You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Triage: routed domain:skills — the failure mode is agent process, and the two cheap directions (① a mandatory "rebuild the mutated package before running the ablation" step in the os-dev ablation protocol, ③ an ablation self-check that greps the built dist for the mutation marker before trusting a green — exactly what #8144's dev did by hand) both land in agent-definition/skill text first. Type Task.
Direction ② (resolve dogfood from src) is recorded as a real semantic trade, not a cleanup: dogfood tests the built dist deliberately (packaging/export-surface coverage — the same axis check:test-source-alias exists to keep distinct), so ② would need its own ruling; do not fold it into a process fix. If grading later picks a packages/qa tool as the landing (a marker-check helper shipped next to the suite), re-route to domain:cli per the package table at that moment.
Held as finding for the grading round. The three-independent-hits evidence (#8095 / #8233 / #8144) makes this a strong promote candidate: the failure is invisible in every later CI run by construction, which is the worst decay class.
Promoted. Three independent measured hits in one shift, and the failure mode is permanently invisible once it happens — a green ablation on a stale dist certifies a vacuous guard and no later CI run can expose it. That is a verification invariant worth restoring mechanically, not by memory.
Scope of the promoted card: directions 1 + 3 only.
The os-dev ablation procedure gains a hard step: rebuild the ablated package before running the dogfood ablation (and the report must say the rebuild happened).
⛔ Direction 2 (resolve dogfood from src) is explicitly OUT of scope. Dogfood tests the built artifact deliberately — that covers packaging/export-surface defects — and changing it is a semantic trade, not a cleanup. If anyone wants direction 2, that is a separate needs-user-decision card.
Note for the skills seat at dispatch: the deliverable touches .claude/ internal tooling (os-dev definition / skills root), so the resulting PR takes the awaiting-human-merge path at review. Size/model suggestion: M, opus.
Scope exactly as graded (directions 1 + 3 only; ⛔ direction 2 out of scope — separate needs-user-decision if wanted):
os-dev ablation procedure gains a hard step: rebuild the ablated package before running the dogfood ablation, and the report must state the rebuild happened.
{
"issue": 8246,
"status": "done",
"branch": "claude/issue-8246-dogfood-ablation-rebuild",
"pr": "https://github.com/objectstack-ai/objectstack/pull/8365",
"premise_still_valid": true,
"summary": "Directions 1 + 3 only, as graded. (1) .claude/agents/os-dev.md gains one standard clause next to the other reverse-verification clauses: a dogfood ablation runs on dist/, so every leg is mutate -> pnpm --filter PKG build -> prove the mutation reached the artifact -> run, and the report must state the rebuild; the report template's `tests` field now says so at the point the report is written. (2) .claude/skills/dogfood-verification/SKILL.md gains the same hard step as one checkbox in its build/runtime-model section, naming the same command, so the two copies stay structurally consistent. (3) scripts/ablation-dist-preflight.mjs is the pre-flight — package + marker, exits non-zero unless the consumed dist/ really carries the mutation; default mode for a planted token, --absent for a deleted guard and for the restore leg. Sourcemap-only hits are RED (a .map hit proves a rebuilt sourcemap, not a mutated artifact), and missing/unreadable dist or an unresolvable package name fail by name rather than shrugging. Direction 2 (resolve dogfood from src) untouched: dogfood's resolution semantics are unchanged. The script deliberately lands in scripts/, not packages/qa, per the grading note's lane rule, and is NOT wired as a check:* gate — it judges a deliberately mutated tree at a moment CI never has.",
"tests": "Pre-flight self-test: `node scripts/ablation-dist-preflight.mjs --self-test` -> all 10 verdict branches + a real temp-dir scan pinning the sourcemap-only trap, 'all cases pass'. Both directions demonstrated end-to-end on @objectstack/formula, with the rebuild stated explicitly (the rule this card adds): (a) marker never planted -> EXIT=1; (b) the real incident shape, src mutated with `OS_ABLATION_MARKER_8246` in cel-engine.ts and NOT rebuilt -> EXIT=1 ('marker ABSENT from dist/ ... would run the pre-mutation build and go GREEN'); (c) same mutation after `pnpm --filter @objectstack/formula build` -> EXIT=0, 2 built files hit, 2 sourcemap hits shown but not counted; (d) --absent on that tree -> EXIT=1, then `git restore` + rebuild -> EXIT=0. Gates, all green locally: check:agent-model-declared (os-dev.md -> opus, 0 inherits), check:doc-authoring (376 files), check:doc-formula-expressions via the lint package after building its dependency closure, check:nul-bytes (7578 files; the 1 untracked-not-ignored is the new script), check:pm-skill-id-lint (9 files clean — the new clause carries no issue IDs), check:pm-skill-ratchet (pm-dispatch SKILL.md untouched, 686/686), check:skill-frame-sync (4 copies isomorphic, 3 axes), check-skill-frame-freshness (frame current with origin/main). Re-derived with `node scripts/pm/dispatch-gates.mjs` over the actual changed paths: exactly those eight, no additions. Also eslint clean on the new script and a control-byte self-scan over the three changed files with no hits.",
"open_questions": [],
"out_of_scope_findings": [
"filed as #8366: packages/qa/dogfood/README.md 'Adding a golden test' step 4 prescribes the ablation ('temporarily revert the relevant fix and confirm the test goes red') with no rebuild — the third live copy of the procedure, in the packages/qa lane the grading note kept out of this card"
]
}
Notes for review, beyond the JSON:
The PR stays draft. ADR-class surface (.claude/ agent definition + skills root): no auto-merge, no merge queue, no ready-flip — maintainer merges by hand.
Labels read back after bots settled: documentation, size/m, skip-changeset. The skip-changeset write was mine; size/m was already there and documentation arrived after, neither wiped.
Where the script landed and why: scripts/ablation-dist-preflight.mjs, not packages/qa — the triage note said a landing next to the suite re-routes the card to another lane, and os-dev.md already cites its tooling out of scripts/. It is not registered as a check:* gate; the header states why.
One judgement call worth a look: the tool has two modes rather than one. The card asked for "marker must be present"; a deletion-shaped ablation has nothing to plant, so --absent is the mirrored assertion (a literal unique to the deleted guard must be gone from dist/), and it doubles as the restore-leg check — a marker left behind in dist/ keeps mutated code live for every later suite run in that worktree. If that reads as scope creep, the --absent branch is self-contained and removable without touching the rest.
Activity
hotlong commentedon Aug 12, 2026
Triage: routed
domain:skills— the failure mode is agent process, and the two cheap directions (① a mandatory "rebuild the mutated package before running the ablation" step in the os-dev ablation protocol, ③ an ablation self-check that greps the built dist for the mutation marker before trusting a green — exactly what #8144's dev did by hand) both land in agent-definition/skill text first. Type Task.Direction ② (resolve dogfood from src) is recorded as a real semantic trade, not a cleanup: dogfood tests the built dist deliberately (packaging/export-surface coverage — the same axis
check:test-source-aliasexists to keep distinct), so ② would need its own ruling; do not fold it into a process fix. If grading later picks apackages/qatool as the landing (a marker-check helper shipped next to the suite), re-route todomain:cliper the package table at that moment.Held as
findingfor the grading round. The three-independent-hits evidence (#8095 / #8233 / #8144) makes this a strong promote candidate: the failure is invisible in every later CI run by construction, which is the worst decay class.Generated by Claude Code
hotlong commentedon Aug 12, 2026
Grading (finding →
pm:queue) — 本评论来自分诊座位 Routine.Promoted. Three independent measured hits in one shift, and the failure mode is permanently invisible once it happens — a green ablation on a stale dist certifies a vacuous guard and no later CI run can expose it. That is a verification invariant worth restoring mechanically, not by memory.
Scope of the promoted card: directions 1 + 3 only.
dist/before the run counts (mechanizing what the audit-log (A): addlogin/logoutwriters on the auth session hooks, and attribute the unattributedlast_login_atupdate row #8144 dev did by hand with grep).⛔ Direction 2 (resolve dogfood from src) is explicitly OUT of scope. Dogfood tests the built artifact deliberately — that covers packaging/export-surface defects — and changing it is a semantic trade, not a cleanup. If anyone wants direction 2, that is a separate
needs-user-decisioncard.Note for the skills seat at dispatch: the deliverable touches
.claude/internal tooling (os-dev definition / skills root), so the resulting PR takes the awaiting-human-merge path at review. Size/model suggestion: M,opus.Generated by Claude Code
hotlong commentedon Aug 13, 2026
Claim — skills seat (#7623), session
session_01139NJ9Wg5pFeZi1Zh8WLg6, branchclaude/issue-8246-dogfood-ablation-rebuild,mode:subagent,model: opus, size M (per grading).Scope exactly as graded (directions 1 + 3 only; ⛔ direction 2 out of scope — separate
needs-user-decisionif wanted):dist/before a green counts (mechanizing audit-log (A): addlogin/logoutwriters on the auth session hooks, and attribute the unattributedlast_login_atupdate row #8144's manual grep).Gates (derived at claim time from
.claude/agents/os-dev.md+.claude/skills/dogfood-verification/SKILL.md):check:agent-model-declared,check:doc-authoring,check:doc-formula-expressions,check:nul-bytes,check:pm-skill-id-lint,check:pm-skill-ratchet,check:skill-frame-sync,node scripts/check-skill-frame-freshness.mjs.Merge path: ADR-class surface (
.claude/agent definition + skills root) — draft PR, maintainer merges by hand, no auto-merge, no queue.skip-changeset(internal agent tooling).Generated by Claude Code
hotlong commentedon Aug 13, 2026
{ "issue": 8246, "status": "done", "branch": "claude/issue-8246-dogfood-ablation-rebuild", "pr": "https://github.com/objectstack-ai/objectstack/pull/8365", "premise_still_valid": true, "summary": "Directions 1 + 3 only, as graded. (1) .claude/agents/os-dev.md gains one standard clause next to the other reverse-verification clauses: a dogfood ablation runs on dist/, so every leg is mutate -> pnpm --filter PKG build -> prove the mutation reached the artifact -> run, and the report must state the rebuild; the report template's `tests` field now says so at the point the report is written. (2) .claude/skills/dogfood-verification/SKILL.md gains the same hard step as one checkbox in its build/runtime-model section, naming the same command, so the two copies stay structurally consistent. (3) scripts/ablation-dist-preflight.mjs is the pre-flight — package + marker, exits non-zero unless the consumed dist/ really carries the mutation; default mode for a planted token, --absent for a deleted guard and for the restore leg. Sourcemap-only hits are RED (a .map hit proves a rebuilt sourcemap, not a mutated artifact), and missing/unreadable dist or an unresolvable package name fail by name rather than shrugging. Direction 2 (resolve dogfood from src) untouched: dogfood's resolution semantics are unchanged. The script deliberately lands in scripts/, not packages/qa, per the grading note's lane rule, and is NOT wired as a check:* gate — it judges a deliberately mutated tree at a moment CI never has.", "tests": "Pre-flight self-test: `node scripts/ablation-dist-preflight.mjs --self-test` -> all 10 verdict branches + a real temp-dir scan pinning the sourcemap-only trap, 'all cases pass'. Both directions demonstrated end-to-end on @objectstack/formula, with the rebuild stated explicitly (the rule this card adds): (a) marker never planted -> EXIT=1; (b) the real incident shape, src mutated with `OS_ABLATION_MARKER_8246` in cel-engine.ts and NOT rebuilt -> EXIT=1 ('marker ABSENT from dist/ ... would run the pre-mutation build and go GREEN'); (c) same mutation after `pnpm --filter @objectstack/formula build` -> EXIT=0, 2 built files hit, 2 sourcemap hits shown but not counted; (d) --absent on that tree -> EXIT=1, then `git restore` + rebuild -> EXIT=0. Gates, all green locally: check:agent-model-declared (os-dev.md -> opus, 0 inherits), check:doc-authoring (376 files), check:doc-formula-expressions via the lint package after building its dependency closure, check:nul-bytes (7578 files; the 1 untracked-not-ignored is the new script), check:pm-skill-id-lint (9 files clean — the new clause carries no issue IDs), check:pm-skill-ratchet (pm-dispatch SKILL.md untouched, 686/686), check:skill-frame-sync (4 copies isomorphic, 3 axes), check-skill-frame-freshness (frame current with origin/main). Re-derived with `node scripts/pm/dispatch-gates.mjs` over the actual changed paths: exactly those eight, no additions. Also eslint clean on the new script and a control-byte self-scan over the three changed files with no hits.", "open_questions": [], "out_of_scope_findings": [ "filed as #8366: packages/qa/dogfood/README.md 'Adding a golden test' step 4 prescribes the ablation ('temporarily revert the relevant fix and confirm the test goes red') with no rebuild — the third live copy of the procedure, in the packages/qa lane the grading note kept out of this card" ] }Notes for review, beyond the JSON:
.claude/agent definition + skills root): no auto-merge, no merge queue, no ready-flip — maintainer merges by hand.documentation,size/m,skip-changeset. Theskip-changesetwrite was mine;size/mwas already there anddocumentationarrived after, neither wiped.scripts/ablation-dist-preflight.mjs, notpackages/qa— the triage note said a landing next to the suite re-routes the card to another lane, andos-dev.mdalready cites its tooling out ofscripts/. It is not registered as acheck:*gate; the header states why.--absentis the mirrored assertion (a literal unique to the deleted guard must be gone fromdist/), and it doubles as the restore-leg check — a marker left behind indist/keeps mutated code live for every later suite run in that worktree. If that reads as scope creep, the--absentbranch is self-contained and removable without touching the rest.Generated by Claude Code