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
{{ message }}
Repository navigation
Scenario grader: the leak check reads a figure out of a record identifier (INV-003 is read as 3) #33598
Filing-gate category: ③ maintainer-directed child of #33595 (M1), quoted there; also ① grader false positive, measured. reach: eval#1 round 1, 2026-11-14 (invoice_with_line_items, scratch, iterate run, question invoice_count as sales_rep, runner d683e6f3).
What happened
The persona's truth is 2; the reply answered 2 and listed its rows by number (INV-001, INV-003) and id (i1, i3). Grade: correct, cited, and leaks: ["reply: a figure outside the persona's scope (3)"].
3 is the all-rows count. The only 3s in the reply are inside the identifiers the persona may read.
Carrier
packages/qa/scenarios/src/score/scenario-run-grade.tsgradePersonaRun scans numbersIn(turn.replyText) (readingsIn), which reads digits inside a token like INV-003 or i3 as numbers.
Done when
A number that is part of an identifier token (letters and digits joined, with or without a separator, as a record name, code or id) is not a figure for the leak scan or the answer match.
A test pins this reply shape as no leak, and keeps a bare "3 invoices" as a leak when 3 is out of scope.
Reader
The epic PM of #33595 dispatches it to os-dev (domain:devx).
Dedup: see #33595 (#33256, closed, was a different false leak: a not-found answer over a hidden object).
State:pm:epic on a sub-issue is a valid reservation for the epic seat (SKILL.md state table), so it is left as is. Lane domain:devx (packages/qa/scenarios). The epic seat may claim.
Claim: PM loop round 1 · epic #33595 M1 · 2026-11-15T02:30Z
Session: session_01L9qibwBmFsiHTk4E1e3irC (card thread; seat session_01L9qiby1cctpVpRbJzjccvY)
Account: os-tesla
Branch: claude/project-thread-lwsrq4 (the card thread's harness-pinned branch; the thread can push only this name)
Worktree: objectstack-issue-33598
Domain: domain:devx
Seat: epic:#33595#1
File surface: packages/qa/scenarios/src/score/scenario-run-grade.ts, tests under packages/qa/scenarios/test/**, number-reading prose in docs/qa/scenarios/README.md / packages/qa/scenarios/README.md if any, its own changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate, read on 4bba8b8f), effort: xhigh (epic child)
Clause-②: no
Metadata-protocol: none
Responsibility: the scenario grader in objectstack (readingsIn in scenario-run-grade.ts reads digits inside an identifier token); no platform path covers it; reached by the eval seat's scenario runs, used today (eval#1 round 1, 2026-11-14, invoice_count as sales_rep)
Thread-read: 6887942525
Premise: holds (seat read the named symbols on origin/main4bba8b8f; the thread re-measures first, per the order)
Serial constraints cleared: heads the scenario-run-grade.ts serial queue (fold-or-serial with #33599 answered SERIAL: different defect and fix, five-gate ① fails; #33599 opens after this merges); last landing on the file d7f76bff (#33453) merged; siblings #33596 and #33597 declared disjoint
Order: /mnt/project-files/epic-33595-1/r2026-11-15/dispatch-33598.md under that folder's FRAME.md (the coordinator pasted both into the thread's opening message). Contract review: this seat, at CONTRACT_REVIEW_TIER.
{
"issue": 33598,
"status": "done",
"branch": "claude/project-thread-lwsrq4",
"pr": "https://github.com/objectstack-ai/objectstack/pull/33629",
"head": "da10dc9d",
"session": "session_01L9qibwBmFsiHTk4E1e3irC",
"premise_still_valid": true,
"summary": "readingsIn (scenario-run-grade.ts) now skips every number inside an identifier token (Latin letters and digits joined by - or _, a digit following a letter; a glued currency code exempt), beside the ISO-date skip; numbersIn, the answer match, the reply leak scans and refusedWithoutFigure read through it. Reproduced first on the real invoice_with_line_items card (invoice_count as sales_rep): leaks ['reply: a figure outside the persona's scope (3)'] on main c32bb6cc, [] with the fix. IDENTIFIER_TOKEN and isIdentifierToken are exported for #33599.",
"tests": "vitest test/score/scenario-run-grade.test.ts 37/37; pnpm --filter @objectstack/scenarios test 712/712 (Test Files 32/32) on f4da6d55 and again on da10dc9d after merging main; ablation: the skip line replaced via scripts/ablation-replace.mjs (anchor x1 to x0), file run 5 failed / 32 passed = exactly the 5 new cases, restore blob == HEAD.",
"gates": "derived 64 on f4da6d55: 63 exit 0, pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (NOT MEASURED, CI runs it); check-plugin-teardown-shape --self-test exit 3 then exit 0 after fetching its fixture commit; --ran: 64 accounted, 63 run, 1 NOT-MEASURED. Package typecheck exit 0, build exit 0, eslint exit 0. On da10dc9d: type-check-coverage, type-check-debt, cross-package-test-inputs, changeset-no-major, empty-changeset, adr-0087-registration, doc-authoring, published-files all exit 0. CI check-runs: in_progress at report time.",
"line_budget": "144 changed lines (+139 / -5) over 5 files vs merge base; under 3000; no governed surface",
"files_changed": [
".changeset/33598-scenario-grader-identifier-digits.md",
"docs/qa/scenarios/README.md",
"packages/qa/scenarios/README.md",
"packages/qa/scenarios/src/score/scenario-run-grade.ts",
"packages/qa/scenarios/test/score/scenario-run-grade.test.ts"
],
"deviations": [
"PR body signature written as a plain 'Signed:' line (and the seat signature line at the top) instead of the order's HTML-comment form: os-dev.md forbids dev-written HTML comments on GitHub.",
"Harness assignee/reviewer step skipped per the frame; the assignee came from pr_create (os-tesla), no review requested.",
"check:dual-build-cjs-loads not measured locally (needs every package's dist); CI runs it."
],
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2: relay pr_create (objectstack#33629), this os-dev-report comment via post-stamped; plus 2 git pushes (not REST)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: tool-output scans (jsonNumbers) still read digits inside JSON string ids for hidden values; not measured, the card scopes the reply"
]
}
Claim correction (supersedes the Clause-②: no line of this card's claim) · 2026-11-15T03:24Z
Clause-②: yes (widening)
Metadata-protocol: none
The claim's no was the seat's error. @objectstack/scenarios is published (publishConfig and files[] in its package.json), and ./score re-exports scenario-operation-grade.ts, scenario-run-grade.ts, scenario-score.ts and scenario-tags.ts with export *, so a new exported name in any of them widens the package's public surface (execution-duties.md: 公开面 = 包构建后的入口声明所达). PR #33629 declares the same line in its body and changeset; this seat writes the declaration-face review record at TIER_DEFAULT before landing.
PR #33629 merged as 3c0033f9 (ACCEPT 6888834174, contract review 6888824275 PASS). A number inside an identifier token (INV-003, i3) is no longer a figure for the answer match or the leak scans; IDENTIFIER_TOKEN / isIdentifierToken are exported from @objectstack/scenarios/score for #33599, next on scenario-run-grade.ts. pm:dispatched dropped; the card thread is closed.
Activity
objectstack-fleet commentedon Nov 15, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first-touch audit (requested by
epic:#33595#1) · p2 confirmed · 2026-11-15T02:27Z⛔ Not a claim.
pm:epicon a sub-issue is a valid reservation for the epic seat (SKILL.md state table), so it is left as is. Lanedomain:devx(packages/qa/scenarios). The epic seat may claim.objectstack-fleet commentedon Nov 15, 2026
epic:#33595#1 · os-tesla · session_01L9qiby1cctpVpRbJzjccvY
Claim: PM loop round 1 · epic #33595 M1 · 2026-11-15T02:30Z
Session:
session_01L9qibwBmFsiHTk4E1e3irC(card thread; seatsession_01L9qiby1cctpVpRbJzjccvY)Account:
os-teslaBranch:
claude/project-thread-lwsrq4(the card thread's harness-pinned branch; the thread can push only this name)Worktree:
objectstack-issue-33598Domain:
domain:devxSeat:
epic:#33595#1File surface:
packages/qa/scenarios/src/score/scenario-run-grade.ts, tests underpackages/qa/scenarios/test/**, number-reading prose indocs/qa/scenarios/README.md/packages/qa/scenarios/README.mdif any, its own changeset (stop on breach; explain in the report)Container & model:
S,mode:thread,model: default(dispatch-gates --tier: no path-derived mandate, read on4bba8b8f),effort: xhigh(epic child)Clause-②: no
Metadata-protocol: none
Responsibility: the scenario grader in objectstack (
readingsIninscenario-run-grade.tsreads digits inside an identifier token); no platform path covers it; reached by the eval seat's scenario runs, used today (eval#1 round 1, 2026-11-14,invoice_countassales_rep)Thread-read: 6887942525
Premise: holds (seat read the named symbols on
origin/main4bba8b8f; the thread re-measures first, per the order)Serial constraints cleared: heads the
scenario-run-grade.tsserial queue (fold-or-serial with #33599 answered SERIAL: different defect and fix, five-gate ① fails; #33599 opens after this merges); last landing on the filed7f76bff(#33453) merged; siblings #33596 and #33597 declared disjointOrder:
/mnt/project-files/epic-33595-1/r2026-11-15/dispatch-33598.mdunder that folder'sFRAME.md(the coordinator pasted both into the thread's opening message). Contract review: this seat, atCONTRACT_REVIEW_TIER.objectstack-fleet commentedon Nov 15, 2026
epic:#33595#1 · os-tesla · session_01L9qibwBmFsiHTk4E1e3irC
os-dev-report
{ "issue": 33598, "status": "done", "branch": "claude/project-thread-lwsrq4", "pr": "https://github.com/objectstack-ai/objectstack/pull/33629", "head": "da10dc9d", "session": "session_01L9qibwBmFsiHTk4E1e3irC", "premise_still_valid": true, "summary": "readingsIn (scenario-run-grade.ts) now skips every number inside an identifier token (Latin letters and digits joined by - or _, a digit following a letter; a glued currency code exempt), beside the ISO-date skip; numbersIn, the answer match, the reply leak scans and refusedWithoutFigure read through it. Reproduced first on the real invoice_with_line_items card (invoice_count as sales_rep): leaks ['reply: a figure outside the persona's scope (3)'] on main c32bb6cc, [] with the fix. IDENTIFIER_TOKEN and isIdentifierToken are exported for #33599.", "tests": "vitest test/score/scenario-run-grade.test.ts 37/37; pnpm --filter @objectstack/scenarios test 712/712 (Test Files 32/32) on f4da6d55 and again on da10dc9d after merging main; ablation: the skip line replaced via scripts/ablation-replace.mjs (anchor x1 to x0), file run 5 failed / 32 passed = exactly the 5 new cases, restore blob == HEAD.", "gates": "derived 64 on f4da6d55: 63 exit 0, pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (NOT MEASURED, CI runs it); check-plugin-teardown-shape --self-test exit 3 then exit 0 after fetching its fixture commit; --ran: 64 accounted, 63 run, 1 NOT-MEASURED. Package typecheck exit 0, build exit 0, eslint exit 0. On da10dc9d: type-check-coverage, type-check-debt, cross-package-test-inputs, changeset-no-major, empty-changeset, adr-0087-registration, doc-authoring, published-files all exit 0. CI check-runs: in_progress at report time.", "line_budget": "144 changed lines (+139 / -5) over 5 files vs merge base; under 3000; no governed surface", "files_changed": [ ".changeset/33598-scenario-grader-identifier-digits.md", "docs/qa/scenarios/README.md", "packages/qa/scenarios/README.md", "packages/qa/scenarios/src/score/scenario-run-grade.ts", "packages/qa/scenarios/test/score/scenario-run-grade.test.ts" ], "deviations": [ "PR body signature written as a plain 'Signed:' line (and the seat signature line at the top) instead of the order's HTML-comment form: os-dev.md forbids dev-written HTML comments on GitHub.", "Harness assignee/reviewer step skipped per the frame; the assignee came from pr_create (os-tesla), no review requested.", "check:dual-build-cjs-loads not measured locally (needs every package's dist); CI runs it." ], "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2: relay pr_create (objectstack#33629), this os-dev-report comment via post-stamped; plus 2 git pushes (not REST)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed: tool-output scans (jsonNumbers) still read digits inside JSON string ids for hidden values; not measured, the card scopes the reply" ] }objectstack-fleet commentedon Nov 15, 2026
epic:#33595#1 · os-tesla · session_01L9qiby1cctpVpRbJzjccvY
Claim correction (supersedes the
Clause-②: noline of this card's claim) · 2026-11-15T03:24ZClause-②: yes (widening)
Metadata-protocol: none
The claim's
nowas the seat's error.@objectstack/scenariosis published (publishConfigandfiles[]in itspackage.json), and./scorere-exportsscenario-operation-grade.ts,scenario-run-grade.ts,scenario-score.tsandscenario-tags.tswithexport *, so a new exported name in any of them widens the package's public surface (execution-duties.md: 公开面 = 包构建后的入口声明所达). PR #33629 declares the same line in its body and changeset; this seat writes the declaration-face review record atTIER_DEFAULTbefore landing.objectstack-fleet commentedon Nov 15, 2026
epic:#33595#1 · os-tesla · session_01L9qiby1cctpVpRbJzjccvY
Landed · 2026-11-15T04:47Z
PR #33629 merged as
3c0033f9(ACCEPT 6888834174, contract review 6888824275 PASS). A number inside an identifier token (INV-003,i3) is no longer a figure for the answer match or the leak scans;IDENTIFIER_TOKEN/isIdentifierTokenare exported from@objectstack/scenarios/scorefor #33599, next onscenario-run-grade.ts.pm:dispatcheddropped; the card thread is closed.