docs(roadmap): five defects the linfa/burn sweep tripped over, four of them in the tooling doing the sweeping - #3175
Merged
Merged
Conversation
…f them in the tooling doing the sweeping None of these were the task. All five were hit while doing something else, which is the only reason they surfaced at all — each had been sitting quietly. #3170 apr-agent accepts any flag as a task slug. `apr-agent --help` did not print usage. It created a worktree, a branch and a claim lockfile, then tried to launch a session. The guard is `case $slug in *[!a-zA-Z0-9._-]*) die` — it rejects characters OUTSIDE that class, and `-` is INSIDE it, so every flag a user tries first is a valid slug. Separately: apr-agent is not tracked (git ls-files returns 0) and nothing installs it, yet .git/hooks/pre-commit refuses every commit in the main checkout and directs you to it. A required workflow step enforced by an untracked hook naming an untracked tool. #3171 .claude/ holds 58 worktrees, 25 GB and 571,815 .rs files in the repo root. A tree-wide line count returned 222,601,319 lines. The true figure is 3,947,294 — wrong by 56x, and the wrong answer looked entirely plausible. The containment is worse than the leak: the exclusion lives in .git/info/exclude, which is per-clone and never committed, so it protects exactly one machine and no CI runner. #3172 The CRUX master registry declares 250 stories against 275 contracts. Categories L (15) and M (9) have contracts and no story rows at all. coverage_intake says total: 250, so anything derived from it under-counts by 24, and nothing compares the two. Found because category N (#3146) deliberately did not repeat the pattern. #3173 The verify gate reads descriptive prose as a test citation. gates_extended.rs:81 takes `raw.rsplit("::").next()` over the whole test: string. A LIVE-PENDING body — the repo's own sanctioned state for a gate that cannot bind yet — that names the test it will eventually bind to is reported as Unfalsifiable. The error message names a "test" that runs from the identifier to the end of the sentence, which is the tell. Two classifiers disagree: classify_binding has a considered taxonomy that handles LIVE-PENDING explicitly, and this gate never consults it. The workaround in #3169 was to write module paths with `/` — changing documentation wording to satisfy a code heuristic, the wrong direction. #3174 aprender-train-canary is dark, so no measured trueno-vs-Burn number exists. It is the only thing in the tree comparing the two, and it never runs: workspace-excluded (own [workspace], invisible to cargo metadata), in no workflow, and pinned to burn 0.21.0-pre.2 four months after 0.21.0 shipped. Cargo.toml:143 records the exclusion as intentional; being UNRUNNABLE is a different decision and the two were conflated. Each ticket's acceptance criteria name a test that can fail, and several are written specifically to exclude the cheap fix that would pass without fixing anything: - #3171 asserts `git check-ignore` resolves to .gitignore, NOT to .git/info/exclude. Asserting merely that the path is ignored passes today. - #3172 requires the bijection to fail in BOTH directions; an orphan contract and an orphan story are each an error. - #3173 requires a genuine bare citation to still raise PV-VER-001, so a fix that simply stops reporting cannot pass. - #3174 requires the canary to be BUILT AND RUN and its ratio COMPARED against a floor — the repo has an incident where a number was recorded 18,292 times and never compared — or else deleted and the claim withdrawn. Leaving it dark closes nothing. Roadmap rows only. No code changed here; the fixes are the tickets' work. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noahgift
enabled auto-merge
September 12, 2026 12:29
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
Contributor
Author
|
Dequeued by the 0.67.0 release train (APR-RELEASE-001 §3.4, heijunka: one aprender PR in CI at a time). This PR's merge-group run was sharing the fleet with the release bump #3145 while the bump's workspace-test was on intel. Nothing is wrong with the PR: it is roadmap-only and additive (+95/-0). Auto-merge is re-armed on it right after v0.67.0 is tagged; it then ships in 0.68.0. |
noahgift
added a commit
that referenced
this pull request
Sep 12, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Sep 12, 2026
noahgift
enabled auto-merge
September 12, 2026 17:07
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Sep 12, 2026
check_roadmap_diff_additive.sh reported base id(s) missing at head: this branch forked before they landed on main, and a plain update takes one side of the 847-entry file whole. Resolved as main's roadmap plus this branch's own new entries. The other three roadmap guards pass on the result. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noahgift
enabled auto-merge
September 12, 2026 21:09
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Sep 12, 2026
check_roadmap_diff_additive.sh reported base id(s) missing at head: this branch forked before they landed on main, and a plain update takes one side of the 847-entry file whole. Resolved as main's roadmap plus this branch's own new entries. The other three roadmap guards pass on the result. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noahgift
enabled auto-merge
September 13, 2026 06:08
noahgift
added a commit
to guyernest/aprender
that referenced
this pull request
Sep 14, 2026
… — the 0.67.0 train (paiml#3164) * docs(release): APR-RELEASE-001 — the release train + build kaizen spec, and the R-17 model-movement row for PMAT-1098 The spec was dropped by the operator on 2026-09-12 and is untracked until this commit; the routing row records the orchestrator model moving opus->fable-5-1 at phase 4 (phase-boundary.sh). Pmat-Ticket: PMAT-1098 * docs(audits): PMAT-1098 receipt-so-far for APR-RELEASE-001 session 1 (the 0.67.0 train) + the two agy lane receipts Andon obligation: K=240 was crossed at k_measured=312 when the operator issued the spec run; WIP committed and this draft PR carries the receipt-so-far. Amended at phase 5. Pmat-Ticket: PMAT-1098 * ledger(APR-RELEASE-001 §3.6): 182 measured gate-job records — intel is the bottleneck, gx10 is 2.3x faster and half idle One append-only JSON per (sha, host, job) from the Actions REST API: queue_wait_s (created->started), exec_s, total_s, host, conclusion. peak_rss_mb and free_disk_gb are null with an explicit "[U]" in unmeasured[]: the REST API does not expose them, and an absent measurement must never read as a zero. What the 182 records say (p50 / p95 exec_s, this repo, 2026-09-12): workspace-test intel 1790 / 4148 s gx10 790 / 790 s yoga 259 / 3167 s guard-cargo intel 1201 / 1820 s gx10 422 / 516 s yoga 830 / 1046 s guard-tree intel 604 / 879 s gx10 192 / 213 s yoga 379 / 379 s queue wait p95 intel 2995 s gx10 233 s yoga 1654 s Per-run required-check wall clock, grouped by which boxes the run touched: gx10 only n=4 mean 9.4 min gx10 + yoga n=4 mean 11.3 min gx10 + intel n=10 mean 42.6 min gx10 + intel + yoga n=11 mean 31.6 min Every run that touched intel cost 32-43 min; no run that avoided it cost more than 11.3. intel took 15 of the 22 workspace-test records because that job is pinned to X64 -- and it is the job whose p95 is 69 minutes. paiml#3139 unpins it. §1 coupling, no longer [U]: p95 gate = 72.3 min, so max PRs per train = 72h / 72.3 min = 59.7. §8's "stop cutting trains below 10" does not fire. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * receipt(PMAT-1098): the orchestrator model moved mid-phase-4, and the ledger answered §1 Three things the receipt did not yet carry: 1. orch_model. The harness moved this session from claude-fable-5-1 to claude-opus-5 in the middle of phase 4. A model change mid-session is a recorded event, never a silent one: route.sh record-event wrote the row to docs/audits/impl-routing.jsonl and the frontmatter now names the live model. fable_binding drops to false with the reason, rather than asserting a binding that no longer holds. 2. The build ledger, 182 records, and what they say about which box to fill. 3. §1's max-PRs-per-train, measured at 59.7 from 29 runs, so it stops being [U] and §8's stop condition can be evaluated instead of guessed. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * dogfood(G3.EX): 981 examples run for the first time on a release — 6 real defects, 38 classifier gaps The gate paiml#3121/paiml#3122 added during this cycle had never been executed against a tag. Its first run says 23 fail + 21 timeout, and that number is wrong in the interesting direction: re-running all 44 with each target's own required-features and keeping the logs leaves SIX genuine defects. 9 rows pass once the feature they name at runtime is enabled (cuda, compression, embeddings, tensor, shell-autocomplete). They declare no required-features and gate themselves in code, so the sweep ran them wrong. 20 rows are servers, TUIs and unbounded benchmarks. Killing them at 120 s and calling it `timeout` -- a class the skill defines as a defect -- is wrong on all twenty. 6 rows are a missing model or a missing argument worded outside the regexes. 1 is a TTY, 1 is this box's glibc against a prebuilt ort artifact, 1 is a wall-clock perf assertion failing under load. Verdict GO. Every one of the six defects is byte-identical at v0.66.0: the expect() on weight.rs:356, the five PinnedBuffer imports, the three cwd-relative config literals in llama2/train.rs. §3.1 skips a train whose CUT cannot go green; this cut did not cause any of them, the previous tag shipped them all, and a new instrument finding a backlog is not the same event as a regression. They are paiml#3178 paiml#3179 paiml#3180 paiml#3181, and the classifier gaps are paiml#3182. Not claimed: that the 20 timeouts are healthy. They were not individually verified and the gate cannot yet tell a serving server from a wedged one. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(audits): PMAT-1098 receipt — four missing CHANGELOG rows (aa61219), paiml#3068/paiml#3139/paiml#3175 dequeues, the T-0 correction table, G3.EX GO, and the model return (opus -> fable) recorded Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(ledger): 49 more APR-RELEASE-001 §3.6 records (231 total) — runs 34693750243..34700216664 incl. the discarded paiml#3145 workspace-test (4958 s) and the two cancelled docs-PR runs [skip ci] Pushes to this docs branch were starting full CI runs on intel next to the train (34694025825, 34700216664, 34701097504 — all cancelled by hand); until v0.67.0 is tagged every push here carries [skip ci]. The final push before merge does not. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(evidence): the ph4 teamwork delegate receipt carried two absolute checkout paths — the shipped-tier machine-specific-path ratchet went RED on paiml#3164 (+2 vs 81da9bc) [skip ci] check_hardcoded_paths.sh --full-if-capable, run 34700216664 step 43: evidence/release/0.67.0/agy/ph4-teamwork/delegate-receipt.json|/home/noah/src/aprender and |/home/noah/src/aprender/.git/config. Replaced with <repo_root>; the receipt is this session's artifact, not a tool output anyone re-reads by path. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(audits): PMAT-1098 receipt — T-1 stand-in dispatched on the idle GPU hosts, cuda-nightly standing-RED since the v0.66.0 sha, why gx10 idles (X64 pin, paiml#3139 795 s, ENOSPC), §6 triage to untriaged=0, one-at-a-time drain [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * spec(APR-RELEASE-001): packing rule — yoga and gx10 ≥80% full of aprender PR work under any intel queue pressure is P0 (selector row 0, §1, §3.4, §3.5 SSH, §5 P0·Pack + P0·Reap, §7 pack: line, §8 stops) [skip ci] Operator 2026-09-12, verbatim in §1. §3.4 no longer says one PR at a time: the queue builds 3 by design, dequeue only a KNOWN-RED group. §3.5 distinguishes durable config (forjar) from measurement/unclogging over SSH. Ground truth (§2) gains the measured X64 pin and the gx10/yoga disk layout. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(audits): PMAT-1098 receipt — the four operator rulings and what changed (SSH measurement, 146 GB reclaimed, forjar P0·Reap live on gx10+yoga via infra#549, packing rule, spec e874769), the stacked-merge-group resolver defect paiml#3186 → paiml#3187, 16 ledger records incl. fleet-pack samples [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(ledger): 15 more §3.6 records — the two stacked merge groups RED on paiml#3186, the GPU-host nightlies on the cut, fleet-pack samples [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(receipt): session 2 — the cut's own bashrs red (paiml#3188), the clean-room gate that discriminates nothing (paiml#3189), the steward's unreachable live path (paiml#3190), and the packing denominator [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(spec): APR-RELEASE-001 T-4 is automated, never attended — operator ruling 2026-09-13; the train publishes itself after dogfood GO + assets + preflight [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(spec): APR-RELEASE-001 T-5 Reconcile is a HARD gate — measured 308 open / 424:124 arrival:closure / 95 fixed-but-open / 847 PR-less branches; five predicates, receipt in the ledger, no DONE without it (operator 2026-09-13, kaizen) [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(ledger): T-5 reconcile receipt for v0.67.0 — R1 0 / R2 28 / R3 0 (776 branches archived) / R4 1 / closure:arrival 22:61; 2 issues closed, 3 dirty PRs resolved, 1 closed, 10 verdicts pending [skip ci] Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(ledger): the v0.67.0 train record and 818 §3.6 collector records — 3 bashrs NO-GO(s), then GO + tag at e45eaab Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Noah Gift <claude@noahgift.com>
noahgift
added a commit
to guyernest/aprender
that referenced
this pull request
Sep 14, 2026
…findings about the predicates themselves (paiml#3212) APR-RELEASE-001 §6 makes T-5 a hard gate of every train. It had never been run. This is `scripts/check_reconcile.sh v0.67.0 --prev-tag v0.66.0` (the guard from PR paiml#3200, not yet on main) executed against live GitHub state, recorded as a ledger record rather than asserted in prose. R1 fixed-but-open 0 R2 missing-closing 35 R3 dead-branches 1 (was 2 before paiml#3211) R4 dirty-stale-prs 1 (was 0 six minutes earlier) R5 arrival/closure 63 / 27 = 0.4286 (recorded, not gated) R1 = 0 and R4 was 0 at 11:44Z: no issue in the window was closed-by-keyword yet left open, and every dirty stale PR had been resolved. The other three are not simply debt, they are defects in the predicates, and the receipt says so rather than reporting a number nobody can act on. **T5-F1 — R2 cannot be zero over a window that predates its own guard.** `check_pr_closes_issue.sh` is not on main; it is in paiml#3200, in the merge queue as this was measured. All 35 PRs in v0.66.0..v0.67.0 merged before any such check existed. They cite 39 still-open issues, and inspection shows most citations are CORRECT: paiml#3160 and paiml#3175 FILED their follow-ups (paiml#3147-paiml#3159, paiml#3170-paiml#3174) and cite them without closing, which is what a backlog-opening PR should do. R2's remedy for that shape is the `no-close:` line, which those bodies could not carry. R2 needs an EPOCH — count only PRs merged after the guard was armed — or T-5 hard-fails every train forever on history. **T5-F2 — R3 cannot tell a DEAD branch from a STRANDED one, and acting on it literally destroys evidence.** Both branches R3 named carry unique unmerged work. `feat/y2-calibrate` holds `evidence/perf-060/`, 791 insertions, the ONLY measurement of mini's throughput that exists (prefill 2.371-2.372, decode 2.318 tok/s, measured 2026-08-30 against 34248e8) — and mini became a full-time build host on 2026-09-13. Deleting it to make a counter zero would have destroyed that. It is landed as paiml#3211 instead, and R3 fell 2 -> 1. `feat/y1-7bgarbage` is deliberately NOT archived: it touches contracts/continuous-batching-v1.yaml and needs a review, not a publish. **T5-F3 — R4 is volatile against main, not a property of the PR.** It read 0 at 11:44Z and 1 at 11:50Z, because paiml#3164, paiml#3162 and paiml#3201 merged as one queue group in between and made paiml#3041 dirty. Either measure R4 at a fixed sha or re-run it after the queue drains; as a hard gate against a moving base it reports the queue's timing, not the tree's health. attended_minutes is [U]: this train's T-4 was automated, so no attended window was timed. no-close: this receipt records a T-5 run; it resolves no issue. The three findings are recommendations against paiml#3200's guard, which is still in the queue. Pmat-Ticket: PMAT-1098 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Files #3170–#3174. Roadmap rows only, no code changed.
None of these were the task — all five were hit while doing something else, which is the only reason they surfaced.
apr-agentaccepts any flag as a task slugapr-agent --helpcreated a worktree, branch and claim lockfile. The guardcase $slug in *[!a-zA-Z0-9._-]*)rejects characters outside that class —-is inside it. Also: apr-agent is untracked, yet.git/hooks/pre-commitblocks every commit and directs you to it.claude/= 58 worktrees, 25 GB, 571,815.rsfiles in the repo root.git/info/exclude, which is per-clone and protects one machinecoverage_intakesays 250gates_extended.rs:81rsplit("::")over the whole string; never consultsclassify_binding, which handlesLIVE-PENDINGexplicitly. Fails a build over a sentenceaprender-train-canaryis darkburn 0.21.0-pre.2four months after 0.21.0 shipped. No measured trueno-vs-Burn number existsACs written to exclude the cheap fix
git check-ignoreresolves to.gitignore, not.git/info/exclude— asserting merely that it's ignored passes today.🤖 Generated with Claude Code