LAUNCH BRIEF — Supervisor PT (paste this into a fresh Claude Code session)
You are the PT domain supervisor for a blackbox testing effort on the OCR
Akta Notaris app (dev_4 worktree). Your job: blackbox-test and document all 8
PT features, producing one uniform report per feature.
Read first (in this order)
docs/blackbox-testing/00-master-plan.md— overall system & strategydocs/blackbox-testing/02-handoff-pt.md— YOUR domain brief (features, routes, validation rules, DoD)docs/blackbox-testing/01-documentation-template.md— the EXACT report format to followdocs/blackbox-testing/05-test-data-catalog.md— where test data lives
The stack is already running (verify, don't boot)
- Backend: http://localhost:47014 (
curl -s localhost:47014/api/health/ready→ready:true) - Frontend: http://localhost:47024 (proxies /api to backend)
- Postgres: 47030 (local dev_4 only). External DBs (SABH/registry) are READ-ONLY — never write to them.
The E2E harness is built and PROVEN (e2e/)
Two layers, both smoke-tested green:
- API layer — e2e/helpers/{api,poll}.ts + e2e/scripts/smoke-ocr.ts. Drives
klasifikasi/upload → classify → POST /submissions → /start → poll status. Proven:
a synthetic akta extracted 20 fields correctly in ~31s.
- UI layer — Playwright (pre-installed Chromium). e2e/pt/smoke-ui.spec.ts is a
working example: setRole(page,"notaris") seeds localStorage["userRole.v2"]
(no auth), then drives the real UI.
Commands
export PATH="/home/developer/.bun/bin:/home/linuxbrew/.linuxbrew/bin:$PATH"
cd <repo>/e2e
bun run scripts/smoke-ocr.ts data/synthetic/PT__pendirian__positive__D-POS-01__akta-valid.pdf # API layer
bunx playwright test pt/ # UI layer
- Roles you'll use:
notaris(input),verifikator_pt(verify),admin. - Selectors already in the app:
pt-finalize-button,pendirian-pt-completed-banner,
perbaikan-attestation-card,akuisisi-legal-path,single-akta-card,
fast-path-add-input,tambah-dokumen-input,door-switch-dialog. - If a needed element has no stable selector, RECORD it as a finding (recommend adding a testid).
Test data (real + synthetic; see catalog §5b)
- Real (PII, gitignored,
e2e/data/real-intake/pt/): pendirian, perubahan (5 variants),
perbaikan, pembubaran, merger (merger/=Penggabungan,peleburan/=Peleburan),
akuisisi, laporan_rups (3 sets), berakhirnya (bonus, full 6-doc package). - Synthetic (
e2e/data/synthetic/, regenerate withbun run gen:data): D-POS-01 valid
akta, D-NEG-01 expired dates, D-NEG-02 NIK mismatch, D-POS-10 perubahan, D-POS-50 peralihan. - You OWN negative-case generation: extend
e2e/helpers/pdf-factory.tsmutations
(expireDates, breakNik, dropSection, renameCompany) per each flow's validation rules.
The 8 features (one report each → docs/blackbox-testing/report/pt-<fitur>.md)
Pendirian, Perubahan, Perbaikan Data, Peralihan PP→PT, Pembubaran, Merger
(Peleburan + Penggabungan), Akuisisi, Laporan RUPS Tahunan.
Method per feature
- Verify the full workflow against the CODE (routes + flow config), not assumptions.
- Happy path end-to-end at BOTH layers (API + Playwright).
- Cover EVERY user-accessible route/button (template section 5).
- Negative case per validation rule (kuorum RUPS where applicable, expired akta,
NIK/nama mismatch, missing docs, company-lookup fail, finalize-gate blocking). - File bugs with severity + repro + screenshot (
e2e/artifacts/) + fix recommendation. - Write the report in the uniform template. Upload each .md for rendered review:
curl -F "file=@<file>.md" https://x056.think.val.id/upload
Rules
- Language: natural Indonesian in reports; avoid AI-looking glyphs (em-dash, arrows, ≠).
- Don't modify app source unless fixing a confirmed bug AND the user approves; prefer
documenting bugs + recommended fixes. - Test writes go to LOCAL dev_4 Postgres only.
- Coordinate back to the orchestrator (the main session) with a short status per feature.
Start by running both smoke commands to confirm your environment, then begin with
Pendirian PT.