Skip to content

docs(skills,adr): homeAmount.rateDate is date/datetime, the currency row lists all four currencyConfig keys, and ADR-0144 Open item 1 records the settled pointer spelling - #28323

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-gsoqoj
Oct 31, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-gsoqoj

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

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

Fixes #28203

Clause-②: no (authoring text and a dated ADR note catch up to what PR #28096 already shipped; no schema, accept set, error code or public surface changes)
Metadata-protocol: none

维护者速读

What changes

  • skills/objectstack-data/rules/field-types.md
    • The homeAmount paragraph says rateDate names a date/datetime field (was date), matching packages/spec/src/data/object.zod.ts#HOME_AMOUNT_RATE_DATE_TYPES (new Set(['date', 'datetime'])) and the rateDate describe in HomeAmountSchema ("a date or datetime field"). One line re-wrapped to keep the paragraph's width.
    • The Numbers table currency row lists currencyConfig as (currencyMode, defaultCurrency, currencyField, homeAmount): the four keys of CurrencyConfigSchema at origin/main 57f8ca2f, which is a closed strictObject with exactly those keys.
  • docs/adr/0144-multi-currency-record-currency-dated-rates-write-time-home-projection.md: Open item 1 gains a *Note (2026-10-31):* in the same form as the item 11, 12 and 13 notes: settled as rateDate / rateField in PR feat(spec): currencyConfig.homeAmount — a record-mode amount declares its stored home-currency projection by pointer (multi-currency M2-1) #28096 (73b72709), the three pointers required with no default, rateDate a date or datetime field, rateField a number field, both stored fields readonly: true. The recorded item text is kept unchanged. Three new path#symbol anchors: field.zod.ts#HomeAmountSchema, object.zod.ts#HOME_AMOUNT_RATE_DATE_TYPES, object.zod.ts#refuseDishonestHomeAmount.

Why

Should-fixes 3, 4 and 5 of triage contract review 6526217217 on PR #28096 (card #27191). They were left out so the reviewed head could land unchanged.

Verification

  • Token ratchet: field-types.md 3181 → 3191 tokens against a ceiling of 3207 (headroom 26 → 16). The +10 tokens (+39 bytes) fit the existing headroom, so no ceiling raise and no restatement cut were needed.
  • check:adr-symbol-anchors exit 0: base 2852 anchors (604 declaration) → head 2855 (607 declaration), all resolve. check:adr-links exit 0, 944 → 944. adr-index --report OK, docs/adr/README.md current (not regenerated). check:adr-anchors exit 0.
  • check:pm-skill-id-lint exit 0, check:pm-skill-ratchet exit 0.
  • node scripts/pm/dispatch-gates.mjs --commands on the committed head eb4b9762 derives 39 families. All 39 ran in this worktree after pnpm install --frozen-lockfile --ignore-scripts and a packages build, every one exit 0; --ran reconciles 39 derived, 39 run, 0 NOT-MEASURED, 0 UNRUN.
  • No changeset: the skip-changeset label is added (authoring text and ADR only).

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind. (no names added)
  • 3. No formatter ran; pnpm lint passes.
  • 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. (skip-changeset; both lines filled in here)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (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 维护者速读 block is the lane's maintainer summary).
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_016WV4d156vwPo83g9GQuJSt

…rrency` row lists all four `currencyConfig` keys, and ADR-0144 Open item 1 records the settled pointer spelling

Should-fixes 3-5 of contract review 6526217217 on PR #28096: the field-types
paragraph under-taught `rateDate` as `date` only, the Numbers table row named
two of the four real `currencyConfig` keys, and ADR-0144 Open item 1 gains a
dated note recording `rateDate` / `rateField` as landed.

Fixes #28203

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

Copy link
Copy Markdown
Contributor Author

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

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head eb4b976 · 2026-10-31T04:40Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

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

Contract review

Head-sha: eb4b97629b2a3badca12a67655691d8618b69015
Served-tier: CONTRACT_REVIEW_TIER
Local-runs: probe — the ADR and skills gate family (node scripts/check-adr-symbol-anchors.mjs, node scripts/check-adr-links.mjs, node scripts/adr-index.mjs --report and --check, node scripts/check-adr-anchors.mjs, node scripts/check-skills-token-ratchet.mjs, node scripts/pm/check-skill-line-ratchet.mjs, node scripts/pm/check-skill-id-lint.mjs, node scripts/pm/check-governed-merges.mjs --pr 28323) was executed on a worktree at the head and on a detached worktree at the merge-base 57f8ca2, because the dispatch order asks for head-versus-base readings of the anchor count and the per-file token count, which no check-run prints as a number; nothing was installed, built or tested.
Scope: docs/adr/0144-multi-currency-record-currency-dated-rates-write-time-home-projection.md, skills/objectstack-data/rules/field-types.md + packages/spec/src/data/field.zod.ts (CurrencyConfigSchema :727-758, HomeAmountSchema :639-656 and the pointer messages above it), packages/spec/src/data/object.zod.ts (HOME_AMOUNT_RATE_DATE_TYPES :1941-1942, refuseDishonestHomeAmount :1944-2139 and its call at :3891), .changeset/config.json and packages/skills/package.json with packages/skills/scripts/sync-catalog.mjs (what skills/** ships in), scripts/check-empty-changeset.mjs :504-527 and :913-928 (the gate's own text on a skills/** change), content/docs/references/data/field.mdx :34 and :41 (generated, consistency), content/docs/data-modeling/currency.mdx :204-206, field-types.mdx :228-230, validation-rules.mdx :155-157 and :537, content/docs/protocol/objectql/schema.mdx :295 (hand-written docs, consistency), PR #28302's patch of currency.mdx (the other lane's rewrite, read for overlap), docs/adr/0144 Context §1 note and Open items 5 and 11-13 (the amendment convention)

Inputs: the diff 57f8ca2..eb4b976 (the merge-base with origin/main is 57f8ca2; origin/main has since moved to b339465 with no change to any cited file, so the base and the main readings coincide: 2 files, +11 / −3; one commit, carrying Co-authored-by and Claude-Session, no model name, no Refs); the PR body (head eb4b976, draft, author objectstack-fleet[bot], labels documentation, size/s, skip-changeset, no reviews, auto_merge null) and its one comment 6539125256 (the contract-review claim naming this session and this head); card #28203 (body; triage 6528478818 and 6538727767; claim 6538901913; the dev's pointer 6539113089); the dispatch order and the dev report at /mnt/project-files/skills-lane-seat2/ (report pinned to head eb4b976, base 57f8ca2, 39 of 39 gate families exit 0); PR #28096 (#27191, merged 2026-10-31T03:21:26Z as 73b7270) and its contract review 6526217217 (should-fixes 3-5); ADR-0144 in full at the head; the register (check-governed-merges --pr 28323: docs/adr/** ×1, skills/** ×1, Tier H, 14 lines); record-recognisers --template --paths on the two paths (hits: the ADR and the skill file); the head's check-runs (three polls, last at 2026-10-31T04:49:47Z).

① Derived judgments

  1. Accept set: unchanged — correct. Prose in one governed skill file and one dated ADR note; no schema, test, changeset or generated file moves. Clause-②: no and Metadata-protocol: none hold in the body (the changeset half is ②).
  2. The currency row lists exactly the real key set — right. CurrencyConfigSchema at origin/main is a closed strictObject with four keys and no fifth: currencyMode :733, defaultCurrency :734, currencyField :741, homeAmount :746. The aliases map (mode, currency, code, isoCode) steers misspellings and is not a key; precision is a refused guidance key, not a member. The row's spelling of each name matches the schema, and the file's own rule at :27-31 (config columns list only real keys, source of truth field.zod.ts) is now met for this row.
  3. rateDate is date/datetime, and nothing else — right. HOME_AMOUNT_RATE_DATE_TYPES = new Set(['date', 'datetime']) (object.zod.ts :1942) is the whole set the object door accepts (:2089-2091: a pointer at a field whose type is outside it is refused at homeAmount.rateDate); the config door's describe on HomeAmountSchema.rateDate says "a date or datetime field" (:652-653). A formula returning a date has type: 'formula' and is refused. The rest of the paragraph is unchanged and still true at main: field a 'dynamic' currency (:2044-2081), rateField a number (:2109), both readonly: true (refuseUnlessPlatformWritten :2028-2041, called at :2081 and :2135), all three required (:650-654, z.string({ error }) with no default or optional).
  4. The pointer spellings — right. HomeAmountSchema's keys are field, rateDate, rateField (:650-654); date, dateField, documentDate alias to rateDate and rate, exchangeRate, rateUsed to rateField (:645-648). The skill paragraph, the example at :166 and the ADR note all spell them that way.
  5. The ADR note, sentence by sentence against main. "settled: the pointers are spelled rateDate (the document date) and rateField (the rate used), the names workload row M2-1 drafts" — the item's own text (:320) names those drafts, and the schema carries them. "landed in PR feat(spec): currencyConfig.homeAmount — a record-mode amount declares its stored home-currency projection by pointer (multi-currency M2-1) #28096 (73b7270)" — PR feat(spec): currencyConfig.homeAmount — a record-mode amount declares its stored home-currency projection by pointer (multi-currency M2-1) #28096's merge commit is 73b7270…, merged 2026-10-31T03:21:26Z. "Beside them homeAmount.field names the home field, and all three are required with no default (HomeAmountSchema)" — :650-654 and the homeAmountPointerRequired message :615-617 ("the engine has no default for it"). "rateDate names a date or datetime field on the same object (HOME_AMOUNT_RATE_DATE_TYPES)" — ①.3. "rateField a number field" — :2109. "both the home and the rate field declare readonly: true" — :2028-2041. "the object judges what each pointer names (refuseDishonestHomeAmount)" — :1983, wired into ObjectSchema's superRefine at :3891, and the docblock :1951-1954 says the config door sees only names. "Review: contract review 6526217217 on PR feat(spec): currencyConfig.homeAmount — a record-mode amount declares its stored home-currency projection by pointer (multi-currency M2-1) #28096" — that comment is the PASS record whose should-fix 5 asked for this note. Every sentence is true.
  6. Prime Directive [WIP] Add Chinese version of the documentation #13 — kept. The ADR diff is +8 / −0; Open item 1's recorded lines :318-322 are byte-identical to the base; nothing in D5, D8 or the item's "Only the names are open" sentence is rewritten. The item's heading still names spec(field): homeAmount: { field, rateDate, rateField? } on a record-mode amount — the stored home-currency projection declared by pointer (multi-currency M2-1, epic #8345; released with M2-2) #27191, as items 11-13 keep theirs.
  7. Amendment convention — matched. Items 11, 12 and 13 each append *Note (YYYY-MM-DD):* settled: …, landed in PR #N (short sha). … closing with a link to the settling comment, indented three spaces under the item, lines within 120 characters. The new note has the same opening, the same PR-plus-short-sha form, three path#symbol anchors in the ADR's style, and closes with a link to the settling record; here that record is the contract review on PR feat(spec): currencyConfig.homeAmount — a record-mode amount declares its stored home-currency projection by pointer (multi-currency M2-1) #28096, because no maintainer ruling settled the spelling, which is what the item itself says ("settled under that card's review"). Item 5's other form ("Settled, and moved to D7") was not needed: the spelling belongs to no decision section. Longest added line 117 characters.
  8. Anchors resolve, head and base. check-adr-symbol-anchors: base 2852 (604 declaration), head 2855 (607 declaration), every one resolves, exit 0 both; the three new ones are field.zod.ts#HomeAmountSchema (a module-local const, which the checker reads as a declaration), object.zod.ts#HOME_AMOUNT_RATE_DATE_TYPES and object.zod.ts#refuseDishonestHomeAmount. check-adr-links: 944 → 944, exit 0 both. adr-index --report and --check: README current on head and base, not regenerated and not owed (the note changes no title or status). check-adr-anchors exit 0 on head.
  9. Ratchets and lint hold on the head. Token ratchet: field-types.md 3181 → 3191 of 3207 (headroom 26 → 16), measured on both worktrees, ceiling unchanged, scripts/ has no diff; no restatement cut was needed and none was made. Line ratchet exit 0 (the file's line count is unchanged at +3 / −3). check-skill-id-lint: 105 files clean.
  10. Consistency elsewhere. skills/**: field-types.md is the only skill naming currencyConfig; nothing contradicts. docs/adr/**: only 0144 names the pointers. content/docs/references/data/field.mdx :34 and :41 are generated from the schema and already say date / datetime and all four keys. Hand-written pages: no page says rateDate is date only, and no page says the key set is closed at three; but content/docs/data-modeling/field-types.mdx :228-230 and validation-rules.mdx :155-157 are currencyConfig.* key tables with no homeAmount row, validation-rules.mdx :537 reads "currencyConfig (mode, code or code field)", content/docs/protocol/objectql/schema.mdx :295 lists the three modes without the key, and currency.mdx :204-206 still says consolidation "comes in a later release" (flag 4 of review 6526217217). Draft PR feat(objectql): store a record-mode amount converted into the home currency on every write (multi-currency M2-2) #28302 (M2-2, the other lane) rewrites currency.mdx with a homeAmount section whose rateDate row reads "a date or datetime field", agreeing with this PR, and touches none of the other three pages. Out of scope here; should-fix 2.

② Semver level

Inconsistent — must-fix 1. The PR carries skip-changeset and no changeset. But skills/** is not a prose face that releases nothing: @objectstack/skills (packages/skills, public, in the changeset fixed group beside @objectstack/spec) ships dist/skills/ as a byte-for-byte copy of the repository's skills/** tree (packages/skills/scripts/sync-catalog.mjs :5-23, SOURCE = join(REPO_ROOT, 'skills') :80), so the two edited lines of field-types.md reach npm. AGENTS.md's post-task checklist item 3: a fix in a released package "takes a patch changeset — never none, and ⛔ never skip-changeset: that label is for a diff that publishes nothing from any released package". The changeset gate's own text says the same of this exact shape (check-empty-changeset.mjs :518: "It releases something -- a skills/** change does: it ships in @objectstack/skills"; :913-919: a skills-only PR "owes a changeset naming that package … never the skip-changeset label … a wrong label is review's catch"). Precedent on the same file: 69ce01d (PR #28181, the ADR-0144 items 11-13 notes plus skills) and 21b2a10 (PR #28015) each carried '@objectstack/skills': patch with Clause-②: no / Metadata-protocol: none. The right declaration is that: @objectstack/skills patch, both declaration lines, the label removed. No gate reds the current shape (Check Changeset is exempted by the label and check-empty-changeset reads only touched changeset rows), which is why it is this record's to catch. docs/adr/** ships in no package and needs nothing.

③ Boundary flags

  • Dev deviations: (1) the card ran on opus against a fable-mandatory tier reading — the seat's downgrade, recorded in the claim; the review here is at tier. (2) no reviewers requested on the Tier H path beyond os-elon-musk via the relay — the governed approver is the seat's ACCEPT step. No open_questions block on the body or the card.
  • The dispatch order's item 6 told the dev to add skip-changeset, so must-fix 1 is the seat's instruction, not the dev's judgment; the label was added in pr_create as the report says. The fix moves the head by one changeset file; that commit is a delta review by this reviewer.
  • Gate evidence: the dev report is pinned to this head (eb4b976, base 57f8ca2). The head's check-runs at 2026-10-31T04:49:47Z (third poll): 51 runs, 27 success, 23 skipped by path or design, 1 in progress, 0 failure. Success includes Lint & Repo Gates (every Lint · sub-job), TypeScript Type Check (all four Type Check · sub-jobs), Governed Surface Queue Guard, PR-body guards, Check Changeset, Check PR Size, Check Documentation Links, Build Core, Test UI, Live E2E UI, Dogfood Regression Gate, Plan Test Core shards, Auto Label, filter. In progress: Test Core (1/8); (2/8) success; shards 3-8 not yet reported. The landing seat re-reads the two required jobs on the post-fix head.
  • Independence: the diff was produced by session_016WV4d156vwPo83g9GQuJSt on claude/project-thread-gsoqoj; this record is rendered by session_016WV4d1QkPVVzNz3FJqb2iS, which did not draft it. Claim 6539125256 names this session and this head; no competing claim, hold or hand-off.
  • Author: objectstack-fleet[bot]; no non-bot login to record.
  • Tier: H by the register (docs/adr/** ×1, skills/** ×1); the maintainer or a GOVERNED_APPROVERS review lands it. Draft; auto_merge null; nothing to disarm.
  • Closing keyword: Fixes #28203 is right — the card's three wanted items are all in this diff.
  • Serialisation: card skills/docs: the fixed-currency refusal texts teach two refusals and miss the derived-measure one (#28019) #28051 (open, pm:queue) edits field-types.md next on another section (the fixed-currency refusal texts); no hunk overlap, and it inherits 16 tokens of headroom. PR feat(objectql): store a record-mode amount converted into the home currency on every write (multi-currency M2-2) #28302 touches none of this PR's files.
  • Not re-run here: the dev's 39 families; no package was built or tested, since the diff holds no code.

④ Design judgment

Rules face, the skill file and the ADR, against the code they cite and the scenario they are accepted against (an AI author declaring a record-mode amount with a stored home projection, with no eval prompt on the card):

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

VERDICT: FAIL

Must-fix:

  1. (carrier: the dev on claude/project-thread-gsoqoj, one commit) Add a changeset naming '@objectstack/skills': patch with Clause-②: no and Metadata-protocol: none in its body, in the form of .changeset/8345-currency-mode-switch-skills.md on main, and have the seat remove the skip-changeset label through the relay; update the PR body's changeset sentence and Human Minimum item 5 to match. The post-fix head owes a delta review by this reviewer, no must-fix beyond this one being expected.

Should-fix:

  1. (carrier: the seat, no code in this PR) The dispatch order's standing item 6 ("Add skip-changeset") is wrong for any skills/** diff; correct the order template so the next skills card declares @objectstack/skills patch instead. PR docs(skills,lint): the connector auth union declares oauth2 and app-credential, held degraded until a server runs the grant #28290 (merged as 57f8ca2) landed two skill edits under the same reading in its record ("shipped by no package"), which was mistaken; its skill text is covered by the next @objectstack/skills release line, so no revert, but the seat should note it in that card's thread.
  2. (carrier: a docs card for the epic PM, content/docs/**, lane seat's ACCEPT territory, no Tier H) Three hand-written pages list currencyConfig keys without homeAmount: content/docs/data-modeling/field-types.mdx :228-230, content/docs/data-modeling/validation-rules.mdx :155-157 and :537, content/docs/protocol/objectql/schema.mdx :295. PR feat(objectql): store a record-mode amount converted into the home currency on every write (multi-currency M2-2) #28302 rewrites only currency.mdx; file the three pages alongside it so the R2 docs land together, and keep rateDate as "a date or datetime field" there.
  3. (carrier: the next field-types.md editor, card skills/docs: the fixed-currency refusal texts teach two refusals and miss the derived-measure one (#28019) #28051) The file ends at 16 tokens of headroom; a raise beyond that needs a same-file restatement cut first.

…ypes text, and the two skills changesets PR #28170 and PR #28290 missed

A `skills/**` change ships in `@objectstack/skills`, so it owes a patch
changeset, never `skip-changeset` (contract review 6539232473, must-fix 1).
PR #28170 and PR #28290 landed skill text under the same mistaken reading;
their entries are carried here.

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

Copy link
Copy Markdown
Contributor Author

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

PR body correction at head 3ec7b997 (the body cannot be patched through the relay; this comment supersedes the two lines named below).

Contract review 6539232473 must-fix 1: a skills/** change ships in @objectstack/skills, so it owes a patch changeset, never skip-changeset. Commit 3ec7b997 adds three '@objectstack/skills': patch changesets, each with Clause-②: no and Metadata-protocol: none:

The skip-changeset label is removed.

Corrected body lines:

Gates at 3ec7b997: check-empty-changeset (self-test and --base), check-changeset-no-major, check:changeset-fixed, check:changeset-gate-self-tests and changeset status all exit 0. dispatch-gates --commands now derives 49 families; all 49 exit 0, and --ran reconciles 0 NOT-MEASURED.


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

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

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 3ec7b99 · 2026-10-31T05:06Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

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

Contract review

Head-sha: 3ec7b99739d4e47da3f260dac55673a815fda67a
Served-tier: CONTRACT_REVIEW_TIER
Local-runs: probe — the changeset, skills and ADR gate family (node scripts/check-empty-changeset.mjs with and without --self-test, node scripts/check-changeset-fixed.mjs both halves, node scripts/check-changeset-no-major.mjs both halves, node scripts/check-skills-token-ratchet.mjs, node scripts/pm/check-skill-line-ratchet.mjs, node scripts/pm/check-skill-id-lint.mjs, node scripts/check-adr-symbol-anchors.mjs, node scripts/pm/check-governed-merges.mjs --pr 28323) was executed on a worktree at this head, because the must-fix this head carries is a changeset declaration whose gates read the diff against the merge-base and the round-1 readings had to be re-taken on the new head; nothing was installed, built or tested, and check-adr-0087-registration was not measured here (it needs tsx from pnpm install; it has no arm to read, since every changeset says Clause-②: no).
Scope: docs/adr/0144-multi-currency-record-currency-dated-rates-write-time-home-projection.md, skills/objectstack-data/rules/field-types.md + .changeset/28203-skills-home-amount-keys.md, .changeset/28041-skills-connector-input-judged.md, .changeset/28226-skills-grant-kinds.md (the three files this head adds), the merge commits 91fa06d (PR #28170) and 57f8ca2 (PR #28290) read for what they shipped under skills/objectstack-automation/** and .changeset/**, skills/objectstack-automation/SKILL.md :87 and references/integration-recipes.md :18-27, :32-34, :117-118, :152-158 at origin/main (the text the two carried changesets describe), packages/skills/package.json and packages/skills/scripts/sync-catalog.mjs (what skills/** ships in), .changeset/config.json (the fixed group), scripts/check-empty-changeset.mjs :504-527 and :913-928, and the round-1 cited code in packages/spec/src/data/field.zod.ts and object.zod.ts, unchanged since (listed in record 6539232473)

Inputs: this is the delta review of round 1 (record 6539232473, FAIL on head eb4b976, must-fix 1: the skip-changeset label on a skills/** diff). The diff eb4b976..3ec7b99 (one commit, 3 files, +35 / −0, all under .changeset/; the commit carries Co-authored-by and Claude-Session, no model name, no Refs); the diff 57f8ca2..3ec7b99 (the merge-base with origin/main is still 57f8ca2: 5 files, +46 / −3; the two round-1 files are byte-identical to eb4b976); the PR (head 3ec7b99, draft, author objectstack-fleet[bot], labels documentation, size/s, tooling, skip-changeset removed, no reviews, auto_merge null) and its comments 6539125256 (round-1 claim), 6539232473 (round-1 record), 6539368087 (the PR-body correction at this head: the three changesets, the label removed, the three superseded body lines named), 6539377178 (the claim for this head naming this session); card #28203's claim 6538901913 as amended (the three changeset paths added to the file surface); PR #28170 (#28041 / #28162, merged 2026-10-31T02:47:03Z as 91fa06d) and PR #28290 (#28226, merged 2026-10-31T03:55:28Z as 57f8ca2), each read at its merge commit; the register (check-governed-merges --pr 28323: docs/adr/** ×1, skills/** ×1, the three changesets off the register, Tier H, 49 lines); the head's check-runs (three polls, last at 2026-10-31T05:11:54Z).

① Derived judgments

  1. Nothing else moved since eb4b976 — confirmed. The delta adds three changeset files and touches no other path; field-types.md and ADR-0144 are byte-identical to the round-1 head, so the round-1 ① items 2-10 (the four currencyConfig keys, rateDate as date/datetime, the pointer spellings, the ADR note's sentences, Prime Directive [WIP] Add Chinese version of the documentation #13, the amendment convention, the anchors, the ratchets, the consistency sweep) stand as written in 6539232473 and are not re-argued. Re-taken on this head: check-adr-symbol-anchors 2855 resolve (607 declaration), token ratchet field-types.md 3191 / 3207, line ratchet exit 0, check-skill-id-lint 105 clean.
  2. Accept set: unchanged — correct. Changesets publish a CHANGELOG entry and a version bump; no schema, test or code moves. Clause-②: no and Metadata-protocol: none on the PR body hold and now agree with all three changesets.
  3. Frontmatter and package name — right. Each file opens '@objectstack/skills': patch, the name of packages/skills/package.json (public, in the changeset fixed group beside @objectstack/spec), which ships dist/skills/ as a copy of skills/**. patch is the level AGENTS.md's post-task checklist gives a Metadata-protocol: none change. Each body carries both declaration lines at line start, in the form of .changeset/8345-currency-mode-switch-skills.md on main. File names follow the card-slug.md convention; 28226-skills-grant-kinds.md does not collide with the lint changeset 28226-credential-literal-explain-grant-kinds.md already at the base.
  4. .changeset/28203-skills-home-amount-keys.md — true against this PR's own diff. The homeAmount paragraph change ("it said date only; the spec accepts both") and the currency row change ("it named the first two only") are exactly the two hunks of field-types.md at this head, judged true in round 1.
  5. .changeset/28041-skills-connector-input-judged.md — true against 91fa06d. That merge commit's skills/objectstack-automation/SKILL.md connector_action row (now :87) and references/integration-recipes.md Holds bullet 2 (now :18-27) add, in those words: registerFlow and os validate refuse a {…} token under any key of connectorConfig.input; the evaluated input is judged against the action's inputSchema (required, type, properties, items) before dispatch; a breach fails the step VALIDATION_ERROR (fault-routable), nothing sent. The changeset's "a value from the record is a CEL envelope … judged against the inputSchema" is the bullet's own sentence; its parenthetical (a CEL envelope whose source reads record. plus the field) is the value-slot shape SKILL.md teaches throughout (record.id, record.assignee) rather than a quotation, since the explicit record.stripe_id example is a line that commit cut as restatement — a paraphrase, not a falsehood. The attribution is right: PR docs(skills,automation): a connector_action input is judged against the action's inputSchema before dispatch, refused as VALIDATION_ERROR #28170 shipped the text (its body carried skip-changeset under the same mistaken reading), PR fix(spec,service-automation,lint)!: registration and validate judge a connector_action's connectorConfig.input value slot #28150 shipped the code, and the PR's timeline cross-references skills(automation): the connector input recipe still says os validate does not judge connectorConfig.input, which PR #28150 makes false #28162. The changeset omits the restatement cuts and the eval-fixture edit the same commit made; a changeset names what the reader gains, so the omission is fine.
  6. .changeset/28226-skills-grant-kinds.md — true against 57f8ca2. That merge commit's integration-recipes.md rewrites the "Not yet" OAuth bullet (now :152-156) to: auth declares oauth2 (authorization_code / client_credentials) and app-credential (feishu / dingtalk / wecom), no server runs the grant yet, the instance is held degraded calling no upstream; adds to the Holds auth bullet (:32-34) that signed on openapi / rest (scheme aliyun-acs3-hmac-sha256 or tencentcloud-tc3-hmac-sha256, keyId) signs each request; and replaces the signature bullet with "RSA-signing vendor (Alipay, WeChat Pay): no signed scheme signs RSA yet; blocked on the request-signing card" (:157-158). Every clause of the changeset's summary and bullet is one of those sentences. The attribution is right: 57f8ca2's one changeset names @objectstack/lint only. The eval-fixture edit in the same commit is not named; same reading as ①.5.
  7. The gates on this head — green. check-empty-changeset: self-test 165 assertions, scan "3 declaring changeset(s) added", no base changeset modified or deleted, exit 0. check-changeset-fixed: both halves exit 0, the group in sync with 109 public packages. check-changeset-no-major: self-test 456 assertions, "no major bump", exit 0 (its clause-② axis is PR-scoped and has no input locally; CI's Check Changeset reads it). check-governed-merges --pr 28323 exit 3, the governed verdict by design: the three changeset paths are "not on the register", the two round-1 paths keep Tier H.
  8. Check Changeset on CI is green without the label — success on this head at every poll, no skip-changeset label on the PR, so the real scans ran rather than the job-level exemption.
  9. Consistency. The two carried changesets describe text already on main; nothing in skills/**, content/docs/** or docs/adr/** is contradicted by a CHANGELOG entry that quotes it. The round-1 should-fix 2 pages (the three hand-written currencyConfig key tables) are unchanged and remain a follow-up.

② Semver level

Consistent — round-1 must-fix 1 carried. @objectstack/skills patch for the field-types.md text this PR ships, with Clause-②: no / Metadata-protocol: none in the changeset and on the body; the skip-changeset label is gone. The two extra changesets declare the same level for the same package for text already published, which the fixed group would have bumped anyway; their value is the CHANGELOG entry, and each says in its body which merged PR shipped the text, so the entry is honest about provenance. docs/adr/** ships in no package and needs nothing. No major, no (narrowing), no ADR-0087 arm to register.

③ Boundary flags

④ Design judgment

Rules face, unchanged since round 1: the skill file and the ADR hold against the code they cite and the scenario they are accepted against, as judged in 6539232473 ④. On the delta: three small changesets instead of one is the right shape, because each CHANGELOG entry then names the PR that shipped its text and the card it answers, and a reader of @objectstack/skills's CHANGELOG at the next release sees the automation skill's two recent changes rather than finding them absent; folding them into this card's entry would have hidden the provenance.

  • Cited code was read to judge the prose, not reviewed.

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

VERDICT: PASS

Must-fix: none. (Round-1 must-fix 1 carried by this head.)

Should-fix:

  1. (carrier: the seat, no code) Round-1 should-fix 1 as the seat is handling it: correct the dispatch-order template's item 6 for skills/** cards, and note in Teach oauth2 and app-credential connector auth once S1 serves them: skills recipe bullet, its eval, and lint steer strings still say the union has no oauth2 #28226's thread that PR docs(skills,lint): the connector auth union declares oauth2 and app-credential, held degraded until a server runs the grant #28290's record misread the shipping package.
  2. (carrier: a docs card for the epic PM, content/docs/**) Round-1 should-fix 2 unchanged: content/docs/data-modeling/field-types.mdx :228-230, validation-rules.mdx :155-157 and :537, content/docs/protocol/objectql/schema.mdx :295 list currencyConfig keys without homeAmount; file them beside PR feat(objectql): store a record-mode amount converted into the home currency on every write (multi-currency M2-2) #28302's currency.mdx rewrite.
  3. (carrier: the landing seat, no code) Carry comment 6539368087's three corrected lines into the PR body if the relay gains a body-patch op before the ready flip; otherwise leave the comment as the record of the correction.
  4. (carrier: card skills/docs: the fixed-currency refusal texts teach two refusals and miss the derived-measure one (#28019) #28051) field-types.md keeps 16 tokens of headroom.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

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

维护者速读

席位意见:ACCEPT。契约复核分两轮:

  • 首轮在内容上全过:CurrencyConfigSchema 是封闭对象,正好四个键;HOME_AMOUNT_RATE_DATE_TYPES 只收 date 和 datetime;ADR 的注照 items 11–13 的格式写。唯一的必改项是 changeset,这是派发单的错,不是开发的。
  • 增量复核在 3ec7b997 上 PASS,逐份对过三份 changeset 和对应 PR 实际发布的文字。

PR 正文里过时的三行,以评论 6539368087 为准,因为中继不能改 PR 正文。

席位核对

@os-zhuang
os-zhuang marked this pull request as ready for review October 31, 2026 05:21
@os-zhuang
os-zhuang enabled auto-merge October 31, 2026 05:21
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit 3fd8033 Oct 31, 2026
51 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-gsoqoj branch October 31, 2026 05:48
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 needs-user-decision size/s tooling

Projects

None yet

3 participants