Skip to content

Commit 3fd8033

Browse files
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)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DU2BHFXKvCJE9K2bko2dD6o)_ 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 ## 维护者速读 - 改了什么:`field-types.md` 的 `homeAmount` 段把 `rateDate` 写成 `date`/`datetime`;Numbers 表 `currency` 行列出 `currencyConfig` 的全部四个键;ADR-0144 Open item 1 加 2026-10-31 注记,记下 PR #28096 定下的拼写 `rateDate` / `rateField`。 - 为什么改:PR #28096 的契约复审 6526217217 should-fix 3–5:spec 接受 `date` 与 `datetime`(`HOME_AMOUNT_RATE_DATE_TYPES`),skill 只教了 `date`;行里只列了两个键,违反本文件「配置列只列真实键」的规则;ADR 写明「每个答案落地后本记录随之修订」。 - 风险与回滚:只改作者指引文字与 ADR 注记,没有代码、schema 或 changeset。ADR 原文按 Prime Directive #13 保留,注记追加在条目下。回滚即 revert 本 PR。 - 先看:`docs/adr/0144-*.md` 的 Open item 1 注记,与 `skills/objectstack-data/rules/field-types.md` 的两处单行改动。 - 两分钟验证:`node scripts/check-skills-token-ratchet.mjs`(field-types.md 3191 / 3207)与 `pnpm check:adr-symbol-anchors`(2852 → 2855 个锚点全部解析)。 - 需要你做的:契约复审(CONTRACT_REVIEW_TIER)尚欠,由席位安排;本 PR 为 Tier H,需要治理审批人(os-zhuang 或 hotlong)批准,并由维护者手动合并。 ## 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 #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`](#28096 (comment)) 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 - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (not touched) - [x] 2. Every name I added uses the casing for its kind. (no names added) - [x] 3. No formatter ran; `pnpm lint` passes. - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 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) - [x] 6. `packages/spec` touched: its generated artifacts are regenerated and committed. (not touched) - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English (the 维护者速读 block is the lane's maintainer summary). - [x] The *Before Submitting* list in CONTRIBUTING.md is done. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016WV4d156vwPo83g9GQuJSt --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent b4ccbc6 commit 3fd8033

5 files changed

Lines changed: 46 additions & 3 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@objectstack/skills': patch
3+
---
4+
5+
docs(skills): the automation guide says a `connector_action` input is judged against the action's `inputSchema` before dispatch
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
This text shipped in PR #28170 (#28041 / #28162), which missed its `@objectstack/skills` changeset; this entry carries it.
11+
12+
- **`objectstack-automation/SKILL.md`**: once evaluated, a `connector_action`'s `connectorConfig.input` is judged against the action's `inputSchema` (`required`, `type`, `properties`, `items`) before dispatch, and a breach fails the step `VALIDATION_ERROR` (`fault`-routable) with nothing sent. `registerFlow` and `os validate` refuse a `{…}` template token at `connectorConfig.input.<key>`.
13+
- **`objectstack-automation/references/integration-recipes.md`**: a record value reaches the payload through a CEL envelope (`{ dialect: 'cel', source: 'record.<field>' }`), and the recipes say that envelope is judged against the `inputSchema`.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@objectstack/skills': patch
3+
---
4+
5+
docs(skills): the field-types guide teaches `homeAmount.rateDate` as a `date` or `datetime` field and lists all four `currencyConfig` keys
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
- **`objectstack-data/rules/field-types.md`**: the `homeAmount` paragraph says `rateDate` names a `date` or `datetime` field (it said `date` only; the spec accepts both). The Numbers table `currency` row lists `currencyConfig` as `currencyMode`, `defaultCurrency`, `currencyField` and `homeAmount` (it named the first two only).
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@objectstack/skills': patch
3+
---
4+
5+
docs(skills): the integration recipes say the connector `auth` union declares `oauth2` and `app-credential`, held degraded until a server runs the grant, and that `signed` signs `aliyun-acs3` and `tencentcloud-tc3` requests
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
This text shipped in PR #28290 (#28226), which carried a changeset for `@objectstack/lint` only and missed its `@objectstack/skills` one; this entry carries it.
11+
12+
- **`objectstack-automation/references/integration-recipes.md`**: an OAuth-protected vendor declares `oauth2` (`authorization_code` / `client_credentials`) or `app-credential` (`feishu` / `dingtalk` / `wecom`), but no server runs the grant yet, so the instance is held degraded and calls no upstream. `signed` on `openapi` / `rest` (scheme `aliyun-acs3-hmac-sha256` or `tencentcloud-tc3-hmac-sha256`, with a `keyId`) signs each request; an RSA-signing vendor (Alipay, WeChat Pay) stays blocked on the request-signing card.

‎docs/adr/0144-multi-currency-record-currency-dated-rates-write-time-home-projection.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,14 @@ Where a source leans one way, the lean is quoted here, not adopted. This record
320320
workload row M2-1 and #27191 is corrected to required. Workload row M2-1 drafts the names `rateDate` and
321321
`rateField`; in that draft, `rateDate` is "a `date`/`datetime` field on the same object (⛔ no default)". The design
322322
record §6 says the document date must not default to `created_at` (「⛔ 不默认 created_at」).
323+
*Note (2026-10-31):* settled: the pointers are spelled `rateDate` (the document date) and `rateField` (the rate
324+
used), the names workload row M2-1 drafts, landed in PR #28096 (`73b72709`). Beside them `homeAmount.field` names
325+
the home field, and all three are required with no default
326+
(`packages/spec/src/data/field.zod.ts#HomeAmountSchema`). `rateDate` names a `date` or `datetime` field on the
327+
same object (`packages/spec/src/data/object.zod.ts#HOME_AMOUNT_RATE_DATE_TYPES`) and `rateField` a `number` field;
328+
both the home and the rate field declare `readonly: true`, and the object judges what each pointer names
329+
(`packages/spec/src/data/object.zod.ts#refuseDishonestHomeAmount`). Review: contract review
330+
[`6526217217`](https://github.com/objectstack-ai/objectstack/pull/28096#issuecomment-6526217217) on PR #28096.
323331
2. **Which row counts as "the document date's rate"** (#27192). The ruling says "a platform rate table by effective
324332
date". Workload row M2-2 and the measurement round read this as the row with the latest `effective_date` on or before
325333
the document date. The measurement round also rules out a "nearest-future rate". The design record §5 says

‎skills/objectstack-data/rules/field-types.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ fields: {
5050
| Type | When to Use | Config |
5151
|:-----|:------------|:-------|
5252
| `number` | Generic numeric value | `min`, `max`, `precision`, `scale` |
53-
| `currency` | Monetary amounts | `currencyConfig` (currencyMode, defaultCurrency) |
53+
| `currency` | Monetary amounts | `currencyConfig` (currencyMode, defaultCurrency, currencyField, homeAmount) |
5454
| `percent` | Percentage values (0-100) | `min`, `max`, `precision` |
5555

5656
## Date & Time
@@ -178,8 +178,8 @@ stored field to `'record'`? Backfill: `os migrate record-currency-codes`.
178178

179179
`homeAmount` (`'record'` only, all three required): the engine stores the
180180
home-currency amount in `field` (a `'dynamic'` `currency`) at the `rateDate`
181-
(`date`) rate, and that rate in `rateField` (`number`), both `readonly: true`.
182-
Cross-currency totals sum `field`.
181+
(`date`/`datetime`) rate, and that rate in `rateField` (`number`), both
182+
`readonly: true`. Cross-currency totals sum `field`.
183183

184184
### Select with Default
185185

0 commit comments

Comments
 (0)