Skip to content

Work plan — 2026-08-10 backlog review: all 67 open issues triaged, fix-status verified against v0.25.0 (supersedes #94, #198) #257

Description

@mmcky

Tracking issue for the 2026-08-10 review of all 67 open issues, verified against main @ v0.25.0 (3db2f9f). Every issue was read in full; bug claims were checked against the current source, CHANGELOG.md, and comment threads (several issues carry status-changing comments their bodies don't reflect). Labels follow QEP-0002 (software set). This is a tracking parent and carries no Type label; the work phases are sub-issues.

Where we stand (verified 2026-09-01 19:57 AEST)

Fact Measured 2026-09-01
main 76d36d7 (#299) — suite 1,538 green, lint --max-warnings 0, 0 prod advisories
Latest release v0.27.0 cut 2026-09-01 06:45Z (#298); v0 = v0.27 = v0.27.0 = 125801c — alias moved, no #109-class lag. Headline: ml native-review round 2 (#297, glossary v0.4.0, rules 18 → 24, first deterministic ml lints), prompt caching on every translator call (#293), tool-review-injection/ (#285), runReview extraction (#278, #169 slice 1)
W1 (#259) not started — 0 of 7 boxes; retargeted v0.28.0 (v0.27.0 shipped without it). #169 slice 1 landed (#278); slice 2 (src/github-content.ts) is next
Open contributor PRs #289 (#156 fix) and #291 (#254 interim) — both reviewed and upgraded in place 2026-09-01, CI green, mergeable, awaiting kp992's look. Merge order #289#291; src/ composes cleanly in either order (#291 moved to src/toc-captions.ts), remaining cross-conflict is the CHANGELOG Unreleased header + bundle map
#225 (sync localisation) closed 2026-09-01 unmerged — three stacked holds (#118 cause unfixed, D2 removes the path, D1 gates the need); #178 stays open
#69 (ja glossary) open, conflicting, last commit 2026-06-25; four reviewers' rulings (names stay English, if-in-doubt English, lake モデル, Wikipedia cross-check) not yet applied; the promised lessons-learnt reply is outstanding since 2026-08-17. #300 filed for the Wikipedia cross-check idea
Resync moratorium in force until #276's guard ships (W1 box 7); #281 records that the failure-issue template still prescribes \translate-resync
Open issues 79 (67 at review) — twelve post-review arrivals not yet triaged into phases: #280 #282 #283 #284 #286 #287 #288 #290 #295 #296 #300 (+ #271 discuss, unplaced); see the arrivals section
Shadow-freeze lift ~2026-09-01 has arrived — W4 (#262) prompt work is now unblocked in principle; any model change still gates on #82's eval set
Tracker type Project (set 2026-09-01 on the owner's instruction; was Task). Not yet registered in the status-projects dashboard's projects.yml — a registration PR against QuantEcon/status-projects is the remaining step for it to be observed

Resume pointer (next session): (1) merge #289 then #291 once kp992 has looked — or after a week, since both are maintainer-upgraded and CI-green; (2) triage the twelve arrivals into W1–W6 (at least #282, #287, #290 look W1-shaped — no run / state advanced past unapplied changes / state-file writer clobbers keys); (3) #169 slice 2, then W1 proper; (4) #69 — apply the thread's rulings and post the reply.

The finding

The backlog has one dominant failure shape, named by #90 and re-confirmed by every production incident since: the failure path produces a success-shaped artifact. Files declared in sync metadata but never delivered (#90.3 / #156 / #222 / #256 — five field instances, the latest on v0.25.0, 2026-08-10); unbuildable PRs shipped after the run logged its own errors (#156); localisations silently overwritten and served to readers for 17 days (#254) or as tofu for months (#182); runs that never start and never say so (#234); and — arriving after this review — resync regenerating from the source PR's merge-time snapshot so that newer source edits are silently reverted and the PR merges clean (#276, the class's sixth field instance, 2026-08-18).

The ordering keeps the doctrine #94 validated: decisions and external clocks first; detection before repair; foundations before dependents.

Verified status changes (issues whose bodies are stale)

Issue Verified against v0.25.0
#89 Done in substanceaction.yml node24, esbuild target node24, engines >=24, @actions/core 2.0.3 + @actions/github 8.0.1, npm audit --omit=dev = 0. ESM-only 3.x/9.x residual = #177 F35's trigger. → close
#90 Defect 1 substantially fixed (v0.17.0; verification pass left), defect 2 resolved (#137). Defects 3–5 live as a class, with a correction: the four index.ts fetch sites are already fail-closed (:525 collects into fetchErrors, :533–535 throws before any branch reset; :1097/:1158/:1190result.errors → run fails + failure issue). The live gaps are (a) drops that record no error at all — the fresh 2026-08-10 repro (lecture-python-programming.fr#29) reported success — and (b) a partial PR still ships when the error set is non-empty (index.ts:902)
#256 Defect 3 (.bib) verified fixed 2026-08-11 on the harness against the deployed @v0=v0.25.0 (new scenario 27; evidence in #256 — the target PR delivered the backfilled entry). Defects 1/2/4/5/6 live. New finding for W1: metadata files[] under-declares (bib + state delivered, undeclared)
#134 writeConfig half fixed (#246); the Phase-4 asset clobber is live (init.ts:495 unconditional copyNonMarkdownFiles)
#118 Forward now runs checkStructuralParity post-finalize (forward.ts:384) — the 2026-07 fence-wrap would be refused; residual = title-sanity check
#253 Confirmed: grep -c findTargetLocalReads dist-action/index.js = 0; guard wired into forward only
#230 Fixed and closed 2026-08-11 (#268): PRICING gains opus-5/fable-5/haiku-4-5, costUSD warns once per unpriced model, VALID_MODEL_PATTERNS gains opus-5/fable-5

The phases (sub-issues)

Phase Priority Gate
W0 — decisions, closures, S-size fixes CLOSED 2026-08-11 (#258 — all twelve boxes; PRs #266#269) none
W1 — make partial delivery loud (now v0.28.0) P0 land #169 first/alongside (index.ts at 0% coverage; slice 1 done #278)
W2 — localisation becomes deterministic P1 D1 font-mechanism decision; #172 choke point
W3 — reviewer, deterministic half P1 parallel with W2
W4 — reviewer, prompt batch shadow-freeze lift (~2026-09-01 — arrived; still gated on #82's eval set for any model change)
W5 — CLI hardening P2 D2
W6 — scheduled debt (Wave 2, eval set, cleanup) P3 capacity

W1 was filed as v0.26.0; that number shipped 2026-08-17 as the ml round-1 release (#272#274), and v0.27.0 shipped 2026-09-01 as the ml round-2 + prompt-caching release (#297, #293) with W1 still unstarted — so W1's work now targets v0.28.0.

Dependency spine

D1 (font mechanism) ──► W2 (scope: #178/#141 live or die here)
D2 (sync first-translate?) ──► W1 wording + W5 TOC insertion
D3 (bot identity) ──► #61 execution; #221 closes
#169 ──► W1 (test the code W1 edits)
#172 ──► W2 transforms (one home, not five sites)
#171 ──► #90.1/.4 closure
W1 (error set) ──► W3 reachability + review input
shadow window ──► W4
#82 baseline ──► any future DEFAULT_CLAUDE_MODEL change

Post-review arrivals

Arrived 2026-08-19 → 2026-09-01, not yet triaged into phases (filed same-day as their own issues per the convention; placing them is the next session's first triage job): #280 rebase force-push auto-closes open sync PRs · #282 (bug) a merged source PR can produce no sync run at all · #283 identifyChangedSections heading-level collision · #284 evaluateDiff hard-fails on ~2% unparseable responses · #286 audit nomination pass · #287 sync advances .translate/state past changes it never applied · #288 forward -f duplicated frontmatter · #290 state-file writer must preserve unknown keys · #295 resyncs preferentially consume human-edited prose (three-edition evidence) · #296 ml round-2 tracker (shipped in v0.27.0; #189 Phase 3 graduation question open) · #300 Wikipedia cross-check for glossary drafting. Also filed 2026-08-27 and already closed: #292 prompt caching → #293.

Contributor PRs 2026-09-01. #289 (#156) and #291 (#254) both reviewed in full and upgraded on the contributor's branches (maintainerCanModify): byte-preserving TOC edits instead of yaml.dump round-trips (401 and 201 changed lines on the real lecture-python TOC, respectively, before the fix), #289 gains fetch-failure coverage and an accurate PR-body notice, #291 gains overlap-based part matching (identity matching lost the caption of exactly the part a lecture-adding sync touches), the rebase-replay site and 404-only target fetches. Both pre-empt W1 boxes 3 and 4 in part; the structured TOC merge (captions never taken from source) and the declared-vs-delivered assertion remain W1's. #225 closed unmerged (see close-candidates).

Triaged 2026-08-19

  • resync regenerates from the source PR's merge-time snapshot — stale content reverts newer target edits #276 (bug, high-priority) — the class's sixth field instance, on the resync path: \translate-resync regenerates from the source PR's merge-time snapshot, so source edits that landed after that PR are silently reverted and the PR merges clean. On fa the stale regeneration merged after the repoint it reverted (2026-08-18, 03:37 → 03:52). Content was hand-restored the same day; a full post-incident measurement (2026-08-19: recorded source-sha vs the source's true last-touch commit, all 21 state files across the three targets, plus content probes — the ledger is in resync regenerates from the source PR's merge-time snapshot — stale content reverts newer target edits #276) found the real residue smaller and different than first thought: zh-cn is fully consistent (its original batch PR had merged; the stale regeneration was correctly discarded); fr's state is correct but numpy.md is missing #595's two edits — the regeneration silently omitted the file after the original PR was closed unmerged, a per-file silent drop that is itself W1 evidence; fa has two stale state files (pandas, polars — the regeneration overwrote the repoint sync's correct SHAs) plus a three-line pandas_panel.md divergence introduced by the hand-restore, which restored a URL form the source itself had moved off. The two deterministic repairs merged and were byte-verified 2026-08-19 (fa#158, fr#38 in the target repos — no re-translation; forward was deliberately not used on fr numpy.md, a natively-reviewed lecture); the recorded-vs-actual mismatch set is now zero. W1 gains a detection box (code-cell invariance guard); the regeneration fix itself stays resync regenerates from the source PR's merge-time snapshot — stale content reverts newer target edits #276. Until that lands, \translate-resync should not be used.
  • The sync is .md-only, so hand-localised _static/ assets can never be created, updated or repaired #271 (discuss) — the .md-only sync leaves hand-localised _static/ assets (figure notebooks, rendered PNGs, data builders) outside the sync in every direction: they can never be created, updated, or repaired by it. Class analysis, not a defect in shipped behaviour; unplaced pending a scoping decision. The single .ml orphan instance is recorded and deferred on the workspace side (QuantEcon/workspace-lectures#48, decision 2).

Close-candidates

QEP-0002 label migration (repo level) — done, verified 2026-08-19

All four items below are applied on the repo (testing deleted, maintenance at #fbca04, core labels + refactor installed, relabels spot-checked: #169 refactor, #103 discuss, #89 infrastructure). Kept as the record of what was changed.

Full report: .dev/log/2026-08-10-issue-review-workplan.md (landed via #265, merge 77f09da).


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions