Skip to content

docs(skills): objectstack-formula eval for a mail amount in each record's own currency (currency:@path) - #27922

Merged
os-zhuang merged 4 commits into
mainfrom
claude/project-thread-jlqwr0
Oct 30, 2026
Merged

os-zhuang merged 4 commits into
mainfrom
claude/project-thread-jlqwr0

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

domain:skills#2 · os-elon-musk · session_016WV4d1BfaajCZsT5GLe2M7

Fixes #26940
Ruling-ref: 6512920986

What changes

  • skills/objectstack-formula/evals/cel-predicates-formulas.json: case 8 asks for an email_template that mails one overdue notice per contract, the amount shown in that contract's own currency. The reference answer is {{ amount | currency:@currency_code }}: only a mail template may read the code from the send's data; the stored code is three capitals (EUR), exactly as stored; when the template declares variables, the path must be one of them or lie under one. must_contain: currency:@. must_not_contain: the bare currency:currency_code, currency:USD, currency:CNY and the no-argument | currency }}. Six restatements in the reference answers of cases 1, 2, 4, 5 and 7 are shortened (-160 bytes); every assertion and every fact is kept.
  • scripts/check-skills-token-ratchet.mjs: that file's row moves 1352 → 1506, the row comment quoting the ruling below.
  • .changeset/26940-formula-eval-currency-at-path.md: @objectstack/skills patch.

The eval case, the six trims and the changeset are the blocked round's commit 1c67d742, cherry-picked unchanged (it keeps its own trailer); the ratchet row is the only new change, as the ruling binds.

Why

PR #26937 (#26660) added currency:@path to mail templates, and skills/objectstack-formula/SKILL.md:450 teaches it, but no eval scored it: grep -rn 'currency:@' skills/objectstack-formula/evals on origin/main 88d60203c has 0 hits. An AI author writing a per-record overdue mail could write a bare path after the colon (refused at authoring, currency-code-literal), hard-code one code for every record, or leave the argument out, which formats every record in the organization's default currency (packages/formula/src/template-currency-tenant-default.test.ts; the card first said US dollars, the reference answer follows the implementation). Nothing caught any of the three.

The file sat at its ceiling: 5407 bytes of 5408, 1352 tokens. The case costs 194 tokens, the lossless trims paid 40, and no further deletion inside the file pays the remaining 154 (the arithmetic is in the blocked report 6488686813). The maintainer ruled on the director's brief, ruling record 6512920986, letter A, verbatim and untranslated:

「26940同意,并继续帮我评估这种天花板的价值是什么,为什么要卡住车队的开发进度」

同意 is letter A: raise the row to 1506. The second clause asks the director seat for a separate evaluation of the ceiling and is not part of this PR.

Verification

Token measurements (node scripts/check-skills-token-ratchet.mjs, ceil(utf8 bytes / 4)):

Reading Before (origin/main 88d60203c) After (ee7516b7) Ceiling
skills/objectstack-formula/evals/cel-predicates-formulas.json 75 lines · 5407 B · 1352 85 lines · 6021 B · 1506 1352 → 1506, headroom 0
All skills/*/SKILL.md 4610 lines · 226161 B unchanged —
Bundle total, whole shipped tree 219245 219399 (+154) —

Facts in the reference answer re-read on origin/main 88d60203c: skills/objectstack-formula/SKILL.md:448-450; CURRENCY_ARGUMENT_RULE and the mail-dialect refusal of a bare argument in packages/formula/src/template-engine.ts; isDeclaredPath and currency-code-path-undeclared in packages/formula/src/mail-hole-grammar.ts; the tenant-default test above. Eval self-consistency (every must_contain string in its own expected_output, no must_not_contain string in its own prompt or answer): cases=8 failures=0. JSON parses; no control bytes in the three files; eslint --no-inline-config on the edited script is clean; node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD passes.

Gates: node scripts/pm/dispatch-gates.mjs --commands derived 60 families on ee7516b7 (after the last commit, in a fresh worktree after pnpm install --frozen-lockfile --ignore-scripts); --ran reconciliation: 60 accounted for, 58 run and exit 0, 2 NOT MEASURED (exit 3, prerequisite: whole-tree dist/): check:dual-build-cjs-loads, check:lean-entry-closure. Among the 58: check-skills-token-ratchet and its --self-test (79 cases), check:skill-compatibility, check:skill-identifier-liveness, check:skill-frame-sync, check:published-files, check:pm-governed-merges, check:nul-bytes, check-empty-changeset and check-adr-0087-registration against origin/main, and check:doc-formula-expressions after building @objectstack/formula and @objectstack/lint. check:dts-closure and check:sourcemap-no-sources-content ran green over the 4 packages built here only; CI sweeps the whole tree. No package source changed, so no package test or typecheck is owed; ui/scripts/check-skill-eval-tokens.mjs grades skills/objectui only, so it does not read this file.

Clause-②: no
Metadata-protocol: none

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (No spec change.)
  • 2. Every name I added uses the casing for its kind.
  • 3. No formatter ran; eslint on the edited script passes (full pnpm lint left to CI).
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset.
  • 6. packages/spec not touched.
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

维护者速读

  • 改了什么:objectstack-formula 技能新增第 8 条 eval:按合同各自的货币发逾期邮件,期望写 {{ amount | currency:@currency_code }},拒收裸路径、写死 USD/CNY 与不带参数三种写法。
  • 为什么改:PR feat(spec, formula, plugin-email, lint): a mail template formats an amount in the record's own currency with currency:@path #26937 已让邮件模板支持 currency:@path,技能也在教,但没有任何 eval 计分;AI 写错了没人发现。
  • 风险与回滚:只动 eval 文件、ratchet 一行与 changeset,无 schema、键或运行时行为变化;回滚即 revert 本 PR。
  • 先看:scripts/check-skills-token-ratchet.mjs 的 1352 → 1506 行注释(引裁决 6512920986);再看 eval 第 8 条。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期该文件一行显示 1506 tokens (ceiling 1506; headroom 0),整体 exit 0。
  • 需要你做的:欠 CONTRACT_REVIEW_TIER 契约复审;落地为 Tier H,待受管批准人批准。

🤖 Generated with Claude Code

https://claude.ai/code/session_016WV4d1BfaajCZsT5GLe2M7

objectstack-fleet Bot and others added 2 commits October 30, 2026 03:36
…rd's own currency (currency:@path), held over the token ceiling for a ruling

Case 8 asks for an email_template that mails one overdue notice per contract with the amount in that contract's own currency; its reference answer names the marked form, that only a mail template reads the code from the send's data, that the stored code is three capitals exactly as stored, and the declared-variables rule; the assertions require currency:@ and refuse the bare path, a hard-coded code and the no-argument form. Six reference answers of existing cases are shortened where they restated a point they already make (-160 B, every assertion and fact kept).

The file reads 1506 / 1352 tokens (+154): the case cannot be paid by deletion inside the file, so this commit is a measured WIP for the ceiling ruling, not a landing.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QSeKYmhU5KEj1nukYhp1Tg
…-> 1506 for the currency:@path case

The eval case for a mail amount shown in each record's own currency costs
194 tokens; six restatements already cut in the same file paid 40 of them,
and the remaining 154 are raised by the maintainer ruling recorded on the
card (comment 6512920986, letter A), quoted in the row comment. Pinned AT
the measurement, zero headroom.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4d1BfaajCZsT5GLe2M7
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling labels Oct 30, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head ee7516b · 2026-10-30T04:06Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: ee7516b7a996f974345f099968af3633ed08db37
Local-runs: none
Scope: skills/objectstack-formula/evals/cel-predicates-formulas.json + scripts/check-skills-token-ratchet.mjs (the gate that enforces the ceiling, one change with the file it prices), .changeset/26940-formula-eval-currency-at-path.md, skills/objectstack-formula/SKILL.md (L448–450), packages/formula/src/template-engine.ts (CURRENCY_ARGUMENT_RULE, currency-code-literal, currency-code-path-mail-only, currencyCodeValueRefusal, currencyDefaultRefusal), packages/formula/src/mail-hole-grammar.ts (isDeclaredPath, currency-code-path-undeclared), packages/formula/src/template-currency-tenant-default.test.ts, packages/spec/src/system/email-template.zod.ts (variables[].name description)

Inputs read: card #26940 (body, Ruling-ref and Resume-from lines); blocked os-dev-report 6488686813; analysis 6488793773; director brief 6493978216; ruling 6512920986 (letter A, maintainer 「26940同意」); claim 6514261477; os-dev-report 6514690365; the seat report at /mnt/project-files/skills-lane-seat2/report-26940.json; PR body and the head's 41 check-runs; Contract-review-claim 6514710939 (this session, this head). Diff read as git diff origin/main...ee7516b7 on a detached checkout; cited code read with git show origin/main:path. The PR author is objectstack-fleet[bot], so no login note is owed under ③.

① Derived judgments

  1. Diff extent: three files, +39 / −6 — the eval file (+15 / −5), the ratchet script (+12 / −1, one hunk: the row comment and the row value), the new changeset (+12). No other path, no published schema, no package source. Correct.
  2. Cherry-pick fidelity: git diff 1c67d742~1 1c67d742 -- skills .changeset and git diff origin/main...ee7516b7 -- skills .changeset are identical after dropping the index lines (diff of diffs empty). Commit d1f1c89 carries 1c67d74's message and its own session trailer. The ratchet row is the only addition, in commit ee7516b. The thread's claim "cherry-picked unchanged, plus the one ruled row" is true.
  3. currency:@currency_code is accepted: CURRENCY_ARGUMENT_RULE (template-engine.ts L192–195) admits the @ path form "in a mail template only"; mail-hole-grammar.ts parses the path as codePath and, when the template declares variables, refuses an undeclared one (currency-code-path-undeclared, L156–161). The eval's "only a mail template may read the code from the send's data" is true: the in-app dialect refuses it by name (currency-code-path-mail-only, L417–425).
  4. The bare currency:currency_code is refused: template-engine.ts L413–415 — an argument that is not a currency code and carries no @ path is currency-code-literal, in every dialect. The eval's "A bare path is refused" is true, and the must_not_contain string is a real wrong form, not a stylistic one.
  5. No-argument | currency: currencyDefaultRefusal (template-engine.ts L240–260) formats in the tenant default localization.currency and refuses at render when none is set; template-currency-tenant-default.test.ts pins CNY / EUR / JPY defaults and pins that nothing formats in USD. The eval's "no argument means the organization's default currency" follows the implementation; the card's original "US dollars" was corrected by the dev (6488686813) and the director accepted the correction (6493978216). Correct.
  6. "The stored code is three capitals (EUR), exactly as stored": currencyCodeValueRefusal (L328–336) accepts only CURRENCY_CODE_RE (three capitals) and refuses lowercase or padded values at render. True.
  7. "when the template declares variables, the path must be one of them or lie under one": isDeclaredPath (mail-hole-grammar.ts L123–125) is name === path || path.startsWith(name + '.'); the spec's variables[].name description (email-template.zod.ts L117–119) says the same. True.
  8. Assertion fairness and self-agreement, checked by hand on the head's file text: every must_contain string (currency:@) is in its own expected_output; none of the four must_not_contain strings is in case 8's prompt or expected_output; currency:@currency_code does not contain currency:currency_code (the @ breaks the substring); | currency:@currency_code }} does not contain | currency }}. All 8 cases, 0 failures. The expected_output names the three wrong forms descriptively ("a bare path", "a literal code", "no argument") without spelling them, so a correct answer that follows the reference does not trip the refusals; an answer that quotes a wrong form verbatim to warn against it would trip, which is the house rule the card's Wanted and the ruling fixed (the four strings are ruled verbatim).
  9. Consistency with SKILL.md: L448–450 on origin/main teaches "A currency argument is a literal code (currency:EUR); only an email template may read it from the send's data instead, {{ amount | currency:@currency_code }}". Case 8's expected form and its mail-only clause are that teaching; the capitals and declared-variables facts come from the implementation and the spec and do not contradict the skill. SKILL.md is untouched in the diff. Consistent.
  10. The six trims (cases 1, 2, 4, 5, 7; measured −14, −59, −22, −22, −43 B = −160 B): each removes a restatement or a connective and keeps the assertion and the fact — case 1 drops "is CEL via" (the F tag is the CEL tag); case 2 drops "Applies the mechanical … table:", "noting that", "the expression" and "declared-" (inversion, keep-the-failing-condition and the nullable guard all kept); case 4 drops the label "the determinism gate:" and keeps the byte-identical rule; case 5 rephrases "whose predicate dominates the comparison" and shortens "publish-time gate" to "publish gate" (the null tests ahead of the comparison and the has() refusal kept); case 7 drops "Both are predicates over the STORED value:" whose judgment the closing clause "compare the stored value, never its option label" still carries. No prompt, files, must_contain or must_not_contain of cases 1–7 changed (compared field by field on origin/main and the head); cases 3 and 6 are untouched. Correct.
  11. Ratchet row: ['skills/objectstack-formula/evals/cel-predicates-formulas.json', 1506] at L1052; the file is 6021 bytes on the head, ceil(6021 / 4) = 1506, headroom 0, matching the row comment's arithmetic (5407 − 160 = 5247 → 1312; 5247 + 774 = 6021 → 1506; case 8 measured at 774 B). The comment names card skills(objectstack-formula): no eval exercises currency:@path for a mail amount in the record's own currency (follow-up owed by #26660) #26940, the ruling comment id 6512920986, letter A, and quotes the binding clause 「26940同意」 verbatim; the PR body quotes the maintainer's whole sentence and carries Ruling-ref: 6512920986. The header's one permitted other direction ("a PR whose body quotes a maintainer ruling authorizing it", L127–129) is met. Correct.
  12. Changeset: '@objectstack/skills': patch, Clause-②: no, Metadata-protocol: none; the package exists at packages/skills and sits in the fixed group of .changeset/config.json, so a patch is the right level for a shipped-eval change (the same shape as the prior skills changesets in the tree). Its "Six reference answers … shortened" and "every assertion and fact kept" claims are true per item 10. Correct.

② Semver level

Patch on @objectstack/skills; the PR body and the changeset both carry Clause-②: no and Metadata-protocol: none. No published schema, key, runtime behaviour or formatter whitelist changes; the eval file is shipped content and the ratchet row is a repo gate constant. Level and declarations agree.

③ Boundary flags

  • Dev flags (6514690365 deviations): platform branch name instead of claude/issue-26940-* (recorded in the claim); cherry-pick onto origin/main rather than a branch off the WIP branch (verified unchanged, ① item 2); assignee set at pr_create; row comment quotes only the binding clause while the PR body quotes the whole sentence (verified); shallow clone. None affects the tree. Answered.
  • open_questions: none in 6514690365. The blocked round's one question (6488686813) was ruled A by 6512920986; this head implements exactly A and none of A′ / B / C / D.
  • Two gate families NOT MEASURED locally (check:dual-build-cjs-loads, check:lean-entry-closure, whole-tree dist) are CI's; the diff touches no package source.
  • Counting note, not a flag: the dev and the PR say "six trims", the ruling says "five lossless trims" — five cases, six listed edits (case 5's two counted as one item), seven textual substitutions. The byte total (−160) is what the row comment and the arithmetic rest on, and it is exact.
  • Card's "US dollars" sentence: superseded by the implementation reading (① item 5); the ruled must_not_contain list is unchanged, as the ruling binds.
  • CI at this head (41 check-runs, read twice at about 04:07Z and 04:09Z): 0 failure, 0 cancelled; 38 completed (success or skipped by path filter), 3 still in_progress at the last read — Test Core (1/8), Test Core (2/8), Lint · scoped · slot lookup and corpus. Green so far: Lint · docs and code guards, Lint · repo and tooling gates, Lint · scoped · tooling self-tests, Lint · ESLint, Lint · PM dispatch-gates, Lint · CI/release/engine gates, all Type Check jobs, Build Core, Test Core (3/8) and (4/8), Check Changeset, Governed Surface Queue Guard, PR-body guards, Check PR Size, Auto Label. The ratchet gate and its self-test run in lint.yml (L5462–5463). The landing-time check-all-green condition is the dispatch seat's to confirm once the three finish.

④ Design judgment

skills/objectstack-formula/evals/cel-predicates-formulas.json against the card's Wanted and the spec on main: the card asks for one case whose prompt requests an email_template showing each contract's overdue amount in its own currency, expecting {{ amount | currency:@currency_code }} with the capitals and declared-path facts, must_contain currency:@, must_not_contain the bare path, currency:USD, currency:CNY and | currency }}. Case 8 is exactly that; each fact in its reference answer holds against template-engine.ts, mail-hole-grammar.ts, email-template.zod.ts and the tenant-default test (① items 3–7), and the answer teaches the three wrong forms by description so the reference itself passes its own refusals. The scenario is the one the renderer cannot catch for an AI author (a hard-coded code renders silently in one currency for every record; the no-argument form renders silently in the tenant default), which is what an eval, not a gate, must score. The trims pay 40 of the 194 tokens without removing a judgment; the remaining 154 are paid by the ruled row, pinned at the measurement with zero headroom, which keeps the ratchet's shrink-only discipline for every later edit. The ruling 6512920986 is quoted in the PR body as the header requires and its id is in the row comment; the second clause of the maintainer's sentence (an evaluation of the ceiling's value) is correctly kept out of this PR. The change holds against the code it cites and the acceptance scenario.

Implemented-by: claude/project-thread-jlqwr0
Reviewed-by: session_016WV4d1QkPVVzNz3FJqb2iS

VERDICT: PASS

Must-fix: none.

Should-fix: none.

Observations (no action owed on this head):

  1. "Six trims" versus the ruling's "five lossless trims": five cases, six listed items, seven substitutions; the −160 B total is exact and is what the arithmetic rests on.
  2. Three check-runs were still in progress at the last read; the landing gate reads them again.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

维护者速读

  • 改了什么:skills/objectstack-formula/evals/cel-predicates-formulas.json 加了 eval 第 8 条:给每份合同各发一封逾期通知,金额按该合同自己的币种显示。要求写出 {{ amount | currency:@currency_code }},不得写成裸路径 currency:currency_code、写死的 currency:USD / currency:CNY,或不带参数的 | currency }}。为腾出空间,对 1–7 条做了无损精简,共 −160 B。棘轮行 1352 → 1506,按裁决 6512920986 引用。3 个文件,含 @objectstack/skills patch changeset。
  • 为什么改:PR feat(spec, formula, plugin-email, lint): a mail template formats an amount in the record's own currency with currency:@path #26937 教了 currency:@path,但按 [Decision] pm-dispatch: which PRs owe a Skills-docs: line (the #26184 audit Part B rule draft) — protocol-kind only, protocol-kind plus narrowing, or not adopted #26369 B 欠了一条 eval;AI 作者可能写出被拒收的写法或固定一个币种,没有任何东西能发现。你在总监批次里答复「26940同意」(字母 A),即抬这一行。
  • 风险与回滚:只改 eval 和棘轮一行,不改渲染器或技能正文。1–7 条的 prompt、must_contain、must_not_contain 逐字段未变。revert 即回滚。
  • 先看:eval 文件第 8 条,再看 scripts/check-skills-token-ratchet.mjs:1052 的棘轮行及其注释。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs exit 0(该文件 6021 B = 1506 token,余量 0)。
  • 需要你做的:skills/** 是受管面,登记册判 Tier H,请批准本 PR(契约复核 PASS 6514775434,Head-sha: ee7516b7a996f974345f099968af3633ed08db37)。

席位意见:ACCEPT。契约复核 PASS,没有 must-fix,也没有 should-fix。CI 全绿;与已合入的 #27903(同一个棘轮文件,不同行)合并无冲突。

席位核对

  • 形态: one PR, Fixes #26940, Ruling-ref: 6512920986, three files: the eval file, .changeset/26940-formula-eval-currency-at-path.md, scripts/check-skills-token-ratchet.mjs (one row). 1c67d742 cherry-picked unchanged (diff-of-diffs empty) plus the ruled row. Governed skills/**: register Tier H.
  • 前提实测: packages/formula mail dialect accepts currency:@currency_code only in mail templates, refuses a bare currency:currency_code (currency-code-literal), and a no-argument | currency formats in the tenant default and refuses when unset, never USD; case 8's expected_output is true to each (review ①).
  • 门禁 check-runs: head ee7516b7a996f974345f099968af3633ed08db37: 43 check-runs, 30 success, 13 skipped, 0 failed, 0 pending; mergeable_state clean; git merge-tree against origin/main after docs(skills): teach the report-index navigation item beside the named report #27903 is clean. Locally 60 derived gates, 58 exit 0, 2 dist-dependent NOT MEASURED (dual-build-cjs-loads, lean-entry-closure), covered by CI.
  • 接受的偏差: none beyond the ruling. The PR says "six trims" where the ruling says five: five cases, six listed items, −160 B exact.
  • 范围外去向: the maintainer's second ask (evaluate what the ceiling is worth) is the director's, not this PR's (ruling 6512920986).
  • 落地条款: Tier H: a GOVERNED_APPROVERS approval, then the seat lands it under the maintainer's landing grant for this term (seat thread, 2026-10-29 22:04Z).

…-jlqwr0

# Conflicts:
#	scripts/check-skills-token-ratchet.mjs
…ngeset

Eval fixtures carry no token ceiling since the skills ratchet stopped
pricing evals/**, so the clause saying the trims paid for the case
inside the file's ceiling no longer holds and would ship in the
changelog.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4d1BfaajCZsT5GLe2M7
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 23838ca · 2026-10-30T07:15Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract review (delta)

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 23838ca3e8affb2a84e923e6523e2d60b63bcc46
Local-runs: node scripts/check-skills-token-ratchet.mjs (exit 0) and --self-test (97 cases, exit 0) on a detached worktree at the head; node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD (4 commits, exit 0); eval self-consistency re-run by hand on the head's file (cases=8 failures=0; 6021 B, 1506 tokens, no control bytes)
Scope: the delta from the PASSed head ee7516b7 (record 6514775434) to 23838ca3: merge commit ac8e3f05 (origin/main 46943657 merged in, taking main's scripts/check-skills-token-ratchet.mjs whole after PR #27984 1fa48009b), and commit 23838ca3 (one clause cut from .changeset/26940-formula-eval-currency-at-path.md). Files now in the PR: skills/objectstack-formula/evals/cel-predicates-formulas.json and the changeset. Register tier H (skills/**); no approval yet.

Inputs read: Contract-review-claim 6517177402 (this session, this head, 07:15Z); the previous record at head ee7516b7; ruling 6513306068 (#27847, letter B, maintainer 「其他同意」) and its landing 1fa48009b (#27984, one file: the ratchet script, +148 / −358); the PR body (unchanged since the PASS) and the head's check-runs, read at 07:16Z and 07:18Z. Diff read as git diff origin/main...23838ca3 after git fetch origin claude/project-thread-jlqwr0 main; blobs compared by object id. Everything already judged at ee7516b7 (eval content, facts against the formula package, trims, semver) is carried, not re-derived, where the bytes are unchanged.

① Derived judgments

  1. Diff extent: git diff origin/main...23838ca3 and the two-dot git diff origin/main 23838ca3 both list exactly two paths: the eval file (+15 / −5) and the new changeset (+12). The merge-base is 46943657, main's tip, so the PR is a clean fast-forward candidate. No ratchet change, no package source. Correct.
  2. Eval file: blob 0b13a4a7 at both 23838ca3 and ee7516b7. Byte-identical to the PASSed content; the eight cases and the five trimmed answers (cases 1, 2, 4, 5, 7) are the diff against main, as before. Carried.
  3. Changeset: git diff ee7516b7 23838ca3 -- .changeset/26940-formula-eval-currency-at-path.md is one hunk, one line, removing only ", to pay for the case inside the file's token ceiling" from the end of the Now bullet. Nothing else in the file moved (front matter, title, Clause-②: no, Metadata-protocol: none, Before, "No schema, key or behaviour changes"). The remaining Now sentence, "Six reference answers of existing cases are shortened where they restated a point they already make, with every assertion and fact kept", describes what still ships: the trims are in the diff against main, and item 10 of the previous record verified each one keeps its assertion and fact. A release note states what changed, not why; with the ceiling gone the trims are a dedup of restatement in their own right, the very deletion the standing 2026-10-27 ruling values, and reverting them would be a new change on a ruled tree. The sentence is fair. One count is still off: five reference answers are shortened (six listed edits, seven substitutions), the same slip the previous record carried as an observation. See Should-fix 1.
  4. Ratchet on the head tree: scripts/check-skills-token-ratchet.mjs is blob 289e5263 at both 23838ca3 and origin/main, so the PR carries main's gate exactly. isEvalFixture (L1062–1064) matches skills/*/evals/**; a CEILINGS row for such a path is now the error (L1097–1109, citing ruling 6513306068). No row, comment or number for 1352 / 1506 / skills(objectstack-formula): no eval exercises currency:@path for a mail amount in the record's own currency (follow-up owed by #26660) #26940 / 6512920986 remains in the script. The run on the head prints skills/objectstack-formula/evals/cel-predicates-formulas.json is 1506 tokens — eval fixture, measured but not ratcheted. and ends 56 authored bundle file(s) within their ceilings; 10 generator-owned file(s) and 28 eval fixture(s) measured, not ratcheted. with exit 0; the self-test passes 97 cases. The dropped row and its comment are the ruling-B outcome, not a loss. Correct.
  5. Merge commit ac8e3f05: parents ee7516b7 and 46943657; its message records one conflict, the ratchet script, resolved by taking main's side (item 4). git diff --name-only origin/main ac8e3f05 is exactly the two PR files; the changeset blob at ac8e3f05 is 4239e444, the same as at ee7516b7, and the eval blob is 0b13a4a7. So the merge tree equals main's tree plus the two PASSed files, and nothing else came in. Commit 23838ca3 then touched the changeset only. Correct.
  6. Commits on origin/main..23838ca3: d1f1c892, ee7516b7, ac8e3f05, 23838ca3; the trailer check passes on all four. 23838ca3 carries a Co-authored-by and a Claude-Session trailer for the thread's session.
  7. CI at 23838ca3: 39 check-runs, read three times (07:16Z, 07:18Z, 07:19Z), 0 failure, 0 cancelled at every read; at the last read 20 completed success, 13 skipped by path filter, 6 in progress (Test Core 1/8 and 2/8; Type Check consumer gates and source gates; Lint docs and code guards; Lint CI/release/engine gates). Green includes Check Changeset, Build Core, Test Core 3/8, Lint ESLint, Lint repo and tooling gates (the job that runs the ratchet and its self-test, lint.yml), PR-body guards, Governed Surface Queue Guard, Check PR Size, Dogfood Regression Gate, Test UI, the three scoped Lint jobs and Lint PM dispatch-gates. Item 4 is the local read of the same ratchet gate. The all-green condition is the dispatch seat's at landing time.
  8. Claim 6517177402 names this session and this head, posted 07:15Z, before this review. Correct.

② Semver level

Unchanged from the PASS: patch on @objectstack/skills; Clause-②: no, Metadata-protocol: none in both the changeset and the PR body. The delta removes a repo-gate constant from the diff (not a published surface) and a clause from a release note. Level and declarations agree.

③ Boundary flags

  • Dev process: a merge of origin/main rather than a rebase. The register does not forbid it; the merge tree is exactly main plus the two files (item 5), so the diff the approver reads is unaffected. Answered.
  • The PR body was written at ee7516b7 and is not being edited. Statements that are now moot or inaccurate: What changes bullet 2 (the ratchet row 1352 → 1506 and its comment) and the sentence "the ratchet row is the only new change"; the Why paragraph on the ceiling arithmetic and the letter-A raise; the Verification table's Ceiling column and the "eslint on the edited script" and Human Minimum item 3 lines; the Gates paragraph, which was run on ee7516b7, not on this head (CI at 23838ca3 is the evidence now, item 7); and in 维护者速读, 改了什么 ("ratchet 一行"), 先看 (points at a ratchet comment that is not in the diff) and 两分钟验证 (expects 1506 tokens (ceiling 1506; headroom 0); the gate now prints 1506 tokens — eval fixture, measured but not ratcheted.). None makes the tree wrong; the two 速读 lines are the ones a Tier H approver acts on, so the ACCEPT must restate them. See Should-fix 2.
  • Ruling 6512920986 letter A is superseded for this file by ruling 6513306068 letter B (an eval fixture carries no ceiling), landed in main as fix(skills-ratchet): evals/** leave the priced population; the standing 「先削重复,余额按实测提高」 ruling is the gate-recognised raise path #27984. The eval content ruled under A is untouched; only the paying mechanism is gone. The PR body's Ruling-ref: 6512920986 still names the ruling that authorised the content.
  • Two gate families (check:dual-build-cjs-loads, check:lean-entry-closure) remain CI's; the diff touches no package source.

④ Design judgment

The delta does the one thing main's new rule requires and nothing more: it takes the gate as main ships it, lets the formula eval stand as an unpriced measured fixture, and removes the one sentence in the release note that would have told the changelog reader about a ceiling that no longer exists. The eval case and the trims, already judged against the formula package and the card's Wanted at ee7516b7, are byte-identical. The changeset still records the trims, which is right because they ship. The head holds against main's gate and the acceptance scenario.

Implemented-by: claude/project-thread-jlqwr0
Reviewed-by: session_016WV4d1QkPVVzNz3FJqb2iS

VERDICT: PASS

Must-fix: none.

Should-fix:

  1. Changeset, Now bullet: "Six reference answers of existing cases are shortened" counts edits, not answers; five reference answers (cases 1, 2, 4, 5 and 7) are shortened. One-word change if the thread pushes again for any other reason; otherwise carry as the earlier observation, since the sentence is a changelog line and the byte total it rests on is exact.
  2. The ACCEPT comment should state, for the approver, that the ratchet is not in the diff, that the 速读's 先看 is now eval case 8 only, and that the two-minute check node scripts/check-skills-token-ratchet.mjs is expected to print cel-predicates-formulas.json is 1506 tokens — eval fixture, measured but not ratcheted. with exit 0, replacing the body's ceiling 1506; headroom 0 line.

Observations (no action owed on this head):

  1. Six check-runs were still in progress at the last read (07:19Z); the landing gate reads them again.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

维护者速读(取代 ACCEPT 6514907615:头已变,以本条为准)

席位意见:ACCEPT。增量复核 PASS,没有 must-fix。合并 main 只解决了棘轮文件一处冲突,取 main 的版本;changeset 删掉了「为在上限内付账」这半句,因为该文件已没有上限。should-fix 1:changeset 写「六条参考答案」,实际是五条(六处编辑),不值得为此再推一次。CI 无失败。

席位核对

  • 形态: one PR, Fixes #26940, two files: the eval file (byte-identical to the PASSed ee7516b7, blob 0b13a4a7) and .changeset/26940-formula-eval-currency-at-path.md (one clause cut at 23838ca3). The merge ac8e3f05 of origin/main brought in nothing else (merge tree = main's tree + the two files). Governed skills/**: register Tier H.
  • 前提实测: on the head tree the ratchet (identical to main's) exits 0, reads the file as an eval fixture (1506 tokens, unpriced), and --self-test passes 97 cases. Eval self-consistency re-run: 8 cases, 0 failures (delta review ①).
  • 门禁 check-runs: head 23838ca3e8affb2a84e923e6523e2d60b63bcc46: 0 failed, 0 cancelled. The ratchet job (Lint · repo and tooling gates), Check Changeset, Build Core, PR-body guards and the Governed Surface Queue Guard are green; the rest is running or skipped by path.
  • 接受的偏差: the ruled ratchet row no longer exists. Ruling 6512920986 letter A is superseded for this file's pricing by 6513306068 letter B; the ruled eval content is untouched.
  • 范围外去向: none. The stale PR body is corrected by this comment, not edited.
  • 落地条款: Tier H: after a GOVERNED_APPROVERS approval on this head, the seat lands it under the maintainer's landing grant for this term (seat thread, 2026-10-29 22:04Z).

@os-zhuang
os-zhuang marked this pull request as ready for review October 30, 2026 07:26
@os-zhuang
os-zhuang enabled auto-merge October 30, 2026 07:26
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit f6e1db1 Oct 30, 2026
46 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-jlqwr0 branch October 30, 2026 07:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills(objectstack-formula): no eval exercises currency:@path for a mail amount in the record's own currency (follow-up owed by #26660)

3 participants