Skip to main content

Sprint 01 reconciliation — pass 15 (2026-07-27, recheck-only)

Run on the sprint's final day (sprint_end: 2026-07-27) as an explicit recheck-only pass — close mode was deliberately not run, so the sprint doc stays status: active, ## Sprint review stays unfilled, and the close still has to happen in a later pass.

Engine: sprint:reconcile --team chatbot --json at qontak-docs 479f682 (verified at/past the 30d8080 discipline-resolution fix). No --fix was run — no deterministic pure-math row was outstanding this pass.

Flow vitals

  • Issue count: 93 → 93 (unchanged since pass 14). No items pulled in or out.
  • WIP 28 · done 65 · done-since-2026-07-26: 0. The board did not move in the last 24 hours.
  • Oldest in-progress: BOT-4635 (Agus Suparman), BOT-4636 (Agus Suparman), BOT-4619 (Farras Herdicho) — all ~13 days created-age, updated 2 days ago. On a 14-day sprint closing today, these three have aged the full window without reaching done.
  • Consequence for this pass: every pass-14 finding re-tests against identical board evidence. Nothing closed itself; the movement this pass is entirely from manual corroboration and from identifying an engine defect.

Confirmed engine defect (new — F-45)

roster-mismatch produced false positives for Izzul across passes 11–14. Root cause located in qontak-docs/scripts/sprint-reconcile.mjs (section C, ~lines 292–341): rosterAssignees is populated only inside the for (const init of teamInits) loop over on-map initiative Epics. A roster member whose entire live-sprint load sits under an off-map or BAU Epic therefore never enters rosterAssignees, and the later roster.planNames sweep reports them as 0 issues assigned in the live sprint.

Digest evidence — Izzul does have live sprint work:

IssueAssigneeParentStatus
BOT-4461Muhammad IzzulBOT-3972 (off-map)Done (resolved 2026-07-22)
BOT-4637Muhammad IzzulBOT-4609 (QA BAU, off-map)In Review

This also explains why pass 14's propagation edits could not close F-37/F-43: there was nothing in the repo to fix. Two knock-on defects of the same root cause:

  1. The finding's prose (has a plan queue / owns planned work) is wrong on its face — the sweep iterates roster.json planNames, not the sprint doc's queues. Neither Izzul nor Dimas has a ### queue section in 2026-07-13-sprint-01.md at all.
  2. off-plan-load shares the bug: offRoster accumulates in the same on-map-only loop, so Dhita Putri Pratama (BOT-4739, parent BOT-4554, In Progress) is on this sprint's board, is absent from chatbot/delivery/roster.json, and was not reported (see F-46).

Secondary defect: roster-mismatch does not skip non-dev disciplines, so Dimas Fauzi Hidayat (PM) is reported for having no build tasks — which his own roster.json _note already says is expected.

Route upstream to sprint-reconcile.mjs; do not hand-patch around it.

Manual code corroboration performed this pass

code-repos.json scope for chatbot is [chatbot, chatbot-fe, notification-service, qontak-designer]. Both chatbot (origin/master) and chatbot-fe (origin/main) were fetched first, then joined by key. notification-service has no local checkout and qontak-designer is registered evidence: "none" — so every verdict below is scoped to the two searchable repos and is PARTIAL, exactly as the engine reported.

QACF / BOT-4662 (F-26) — resolved to a split result, no longer "pending corroboration":

TaskMerged to default?Evidence
BOT-4670✅ yes0add41a14 (PR #2394), 0efc076bf
BOT-4671✅ yesc06b69ac3 (PR #2397), a322b332a
BOT-4672✅ yes9a677dba9 (PR #2395), 7417e4d30
BOT-4668❌ no traceno commit and no branch on any ref
BOT-4669❌ no traceno commit and no branch on any ref
BOT-4673❌ no traceno commit and no branch on any ref
BOT-4680 (FE)✅ yes7c101bc2, 0543f543
BOT-4681/4682/4683 (FE)⚠️ co-keyed onlyno own commit; only cited inside 7c101bc2, which is keyed BOT-4680

Confirmed-real no-trace (the engine's verdict stands after manual recheck): BOT-4668, BOT-4669, BOT-4673, BOT-4655, BOT-4656, BOT-4658, BOT-4653, BOT-4650 have zero trace — not a merged commit, not an unmerged branch — on any ref in either searchable repo. Manual corroboration hardened F-15, F-27 and F-32 rather than clearing them.

Step-6b progress computation — AI Agent Testing (F-40)

Derived, not estimated. Done-category issues under BOT-3351: 10 (matches the engine).

  • Joinable to a breakdown task by its Task N.N summary token: 4 of 10 — BOT-4615 (Task 2.4), BOT-4616 (Task 2.5), BOT-4617 (Task 2.8), BOT-4618 (Task 2.1 gap).
  • Of those 4, three are Won't Fix (BOT-4616/4617/4618) — a descope, not a completion, and with no merged code. They contribute 0 man-days (this is F-14).
  • BOT-4615 → Task 2.4 ("Delete and Re-run Test Case Contracts"), breakdown effort 2.5d (BE 2 + QA 0.5), and it is code-corroborated: efc0110a5 (PR #2407), f4a259058.
  • Unjoinable — flagged, not invented: BOT-3942, BOT-3941, BOT-4188, BOT-4654, BOT-4659 carry no Task N.N token, so no breakdown effort can be attached without guessing. All five are merged-code-corroborated (ca1584127/PR #2415, de035bc34/PR #2393, 6ac332cbe/PR #2389, d871730d9/PR #2385, 550b0e2a3/PR #2398). BOT-3949 is Won't Fix with no code.

Proposed (NOT applied — recheck-only pass):

progress_done_days: 2.5 # was 0
progress_pct: 7 # round(2.5 / 37.5 × 100)

Applied to chatbot/ai-agent-testing/delivery/status/<date>.md first, then cached to the README progress_* and the roadmap ## Portfolio progress & forecast.

Read this number as a floor, not a truth. 5 of 10 done issues are genuinely finished and merged but score 0 because the board summary carries no breakdown task-id. Closing F-40 properly means the DRI mapping those five to their Phase-2 breakdown tasks — this pass deliberately does not guess which.

Status of prior findings (by id)

  • F-2 (coverage-gap, BOT-4568) — STILL OPEN, ⛔ ESCALATED. Byte-identical evidence: 1 issue(s), 0 BE/FE. Unchanged across every pass since it was raised.
  • F-14 (code-evidence-gap, AI Agent Testing Won't-Fix set) — STILL OPEN, ⛔ ESCALATED. BOT-3949/4616/4617/4618 still have no merged code. Now cross-confirmed by the step-6b join above: three of them are the only breakdown-joinable done tasks besides 2.4, so the descope decision is directly blocking the progress number.
  • F-15 (code-evidence-gap, BOT-4653) — STILL OPEN, ⛔ ESCALATED. Manual all-refs search confirms no commit and no branch in chatbot/chatbot-fe.
  • F-26 (code-evidence-gap, QACF) — STILL OPEN, ⛔ ESCALATED (narrowed). No longer "pending manual corroboration" — the corroboration was done this pass. 3/6 BE tasks are merged-corroborated with cited PRs; the finding now narrows to BOT-4668, BOT-4669, BOT-4673 (zero trace) plus the weaker FE case of BOT-4681/4682/4683 (co-keyed commit only).
  • F-27 (code-evidence-gap, Code Readiness) — STILL OPEN, ⛔ ESCALATED. BOT-4655, BOT-4656, BOT-4658 confirmed zero trace on any ref.
  • F-32 (code-evidence-gap, engineering bucket) — STILL OPEN, ⛔ ESCALATED. Engine reports BOT-4623–4627 and BOT-4630–4634 as code only on unmerged branch(es), BOT-4628/BOT-4629 with a named unmerged branch each; BOT-4650 manually confirmed zero trace.
  • F-37 (roster-mismatch, Izzul) — RESOLVED — confirmed engine false positive. Superseded by F-45; Izzul has 2 live sprint issues (BOT-4461, BOT-4637). Nothing to fix in the repo.
  • F-38 (roster-mismatch, Dimas) — RESOLVED — not a drift. Dimas is discipline: PM with no build queue, which roster.json's own _note documents as expected. Superseded by F-45.
  • F-43 (roster-mismatch, Izzul) — RESOLVED. Duplicate recheck row of F-37; same disposition.
  • F-44 (roster-mismatch, Dimas) — RESOLVED. Duplicate recheck row of F-38; same disposition.
  • F-39 (status-progress, Impact Report) — STILL OPEN. Board unchanged at 0 done / 1 in-progress of 1 sprint issue. No step-6b computation is possible: with zero done issues the derived completion is genuinely 0, so this finding is blocked behind F-2/F-42 (there is no BE/FE work on the board to complete) rather than behind a man-day read.
  • F-40 (status-progress, AI Agent Testing) — STILL OPEN, but advanced. Step-6b proposal computed above (0% → 7%), not applied in a recheck-only pass.
  • F-41 (epic-wiring-drift, off-map parents) — STILL OPEN / FOR REVIEW, but mostly benign. Re-reported unchanged: BOT-4662 (15 issues), BOT-4602 (7), BOT-4609 (6), BOT-4482 (3), BOT-3972 (1). Four of the five are documented-deliberate: BOT-4602 and BOT-4482 are umbrella child Epics the sprint doc's ## Initiative index comment block explicitly instructs not to collapse; BOT-4609 is the QA BAU standing Epic, which is by design not an initiative; BOT-4662 is the registered P10 off-plan pull-in. BOT-3972 (BOT-4461) is the one genuinely unexplained parent and is the only part of F-41 that needs a TPM read.
  • F-42 (coverage-gap, BOT-4568) — STILL OPEN, ⛔ ESCALATED. Duplicate framing of F-2; same unchanged evidence. Recommend merging into F-2 to stop double-counting.
  • F-3 · F-24 · F-25 · F-29 · F-30 · F-31 · F-34 · F-35 · F-36RESOLVED, not re-reported by this pass's engine run.

Findings introduced this pass

  • F-45 · engine-defect · OPEN · TPM → upstream qontak-docs. sprint-reconcile.mjs accumulates rosterAssignees/offRoster only over on-map initiative Epics, producing roster-mismatch false positives (Izzul) and suppressing real off-plan-load rows (Dhita). Secondary: roster-mismatch does not skip non-dev disciplines. Supersedes F-37/38/43/44.
  • F-46 · off-plan-load · OPEN · TPM. Dhita Putri Pratama holds BOT-4739 (In Progress, parent BOT-4554) in sprint 21473 but has no entry in chatbot/delivery/roster.json and no capacity.md allocation row. Undetected by the engine via F-45. Decide: add to roster + capacity, or confirm as another squad's engineer working a chatbot-board item.
  • F-47 · lint-parse-artifact · OPEN · TPM. chatbot/delivery/capacity.md:47 embeds a Jira key inside eko.aprianto's allocation cell — ai-agent-testing (BE) TBD (Jira-assigned BOT-3942, F-33). lint-delivery parses the -3942 as a man-day figure and emits a bogus CAPACITY_ALLOC_DRIFT … capacity allocation -3942 ≠ README effort_backend_days 16.5. Fix by moving the Jira reference out of the numeric slot (footnote it), not by suppressing the warning.

Ledger format defect found and fixed (F-48)

While rewriting the ledger this pass, the chatbot ledger was found to have been invisible to lint-delivery's CHECK GROUP K for its entire history. parseReconciliationFindings() matches rows on /^(\d+)\.\s+/numbered list items. Every chatbot ledger through pass 14 used - bullets, so JIRA_RECONCILE_OPEN / JIRA_RECONCILE_ESCALATED never fired for this sprint even while the ledger carried explicitly escalated findings. Bifrost's ledger uses numbered rows and does fire, which is why the discrepancy was visible at all.

Fixed this pass by adopting bifrost's shape: numbered rows for the open/escalated subset, resolved findings collapsed into one prose line. Effect on lint: chatbot went from 0 → 8 CHECK GROUP K warnings (7 ESCALATED, 1 OPEN); total repo warnings 73 → 81. That increase is previously-hidden state becoming visible, not new drift.

Durable learning for future passes and for the skill's "keep its CHECK-GROUP-K contract: numbered rows" instruction: bullets silently defeat the check.

Cross-team audit done — one other team is affected. cdp/delivery/sprints/2026-07-21-sprint-02.md is status: active, uses - bullets, and carries an ESCALATED row (F-4, coverage-gap, Julio Jeffer / PM) that CHECK GROUP K therefore never surfaces. Reported here, not edited — it belongs to the CDP squad's own reconciliation pass. Bifrost is already correct (numbered).

Lint state

npm run lint:deliveryno errors, 81 advisory warnings across 64 initiatives / 7 teams. The two chatbot SPRINT_EPIC_DRIFT warnings (BOT-4602 ≠ BOT-4601, BOT-4482 ≠ BOT-4600) are the expected umbrella-model advisories the sprint doc documents; the CAPACITY_ALLOC_DRIFT warning is F-47.

Per the skill's guardrail: this clean lint is not Jira clearance and closes no F-<n>.

Identity corrections carried forward

  • roster.json key Izzul → Jira displayName Muhammad Izzul. The mapping is correct and the engine resolves it fine; the false positive was the on-map scoping bug (F-45), not the name. Do not "fix" the roster entry.
  • Dhita Putri Pratama is a live chatbot-board assignee with no roster entry — pending F-46.

Not done in this pass (stated explicitly)

Recheck-only was chosen, so the following remain outstanding and are not silently deferred:

  1. The F-40 step-6b progress write-up (status/ → README → roadmap) — computed above, unapplied.
  2. All close-mode work: ## Sprint review, the up-channel status/ADR edits, the status: archived flip, and the handoff to sprint-planner for Sprint 2. The sprint reaches sprint_end today with 28 items still WIP and three items aged the full window.