Skip to content

docs(adr): ADR for multi-currency — record currency, dated rates, write-time home projection (Q0–Q4 and parameters 1–4 as ruled on #27119); dated note on ADR-0104 (epic #8345, lands in R1 first) #27183

Closed

Description

@objectstack-fleet

Filing gate ③ (maintainer-directed). Ruling 6465431966 on #27119 (batch #421 item 2, Q1 = 乙-现在, maintainer 「同意立专题卡」 2026-10-28): the multi-currency epic resumes on #8345 in shape C′. Part of #8345. Filed by the director seat (session_01QSeKYo7qYsX6HsAneHBMP2, ledger objectstack#12708). ⛔ Not a claim. Workload row and precedents: 6464936321; design: 6464438764.

Ruling-ref: 6465431966

维护者速读

  • 改了什么: 新 ADR 记录多币种的契约形状:兄弟币种字段、sys_exchange_rate、写入时折算存影子列、缺汇率拒写、未分组求和拒收;参数 1–4;Non-goals 清单。ADR-0104 币种段加日期注记。
  • 为什么改: 三张 spec PR 都按它复核,后面不再争形状。
  • 风险与回滚: Tier H(docs/adr/**):需您批准;无代码。
  • 先看: 新 ADR 全文;docs/adr/README.md 索引行。
  • 两分钟验证: 索引行出现、状态 Accepted。
  • 需要您做的: 批准该 PR。

Task

  • Write the ADR from ruling 6465431966 and analysis 6464438764: context, the four shapes considered, decision C′, Q0–Q4, parameters 1–4, release pairing R1/R2/R3, non-goals.
  • ADR-0104: dated note under the currency paragraph pointing at the new ADR and at the CurrencyValueSchema retirement card.
  • adr-index --check green.

Lane: governed · Size: S · Review: Tier H. Clause-②: no · Metadata-protocol: none. Tier H: the PR waits for an authorised approval.

Epic: #8345 (parent; the epic PM dispatches pm:epic children; domain:spec children go to the spec seat's queue). Dedupe: #8345 thread, #27119 (ruled), the workload list 6464936321; no open card carries this slice.

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-28T11:18Z
    Session: session_01Utp6CbTZrFqRYNgjSaSbN5 (epic PM, epic:#8345)
    Account: os-bill
    Branch: claude/project-thread-0jat8q (the session's one designated push branch; the platform exception recorded in the runbook's card-thread section — the in-seat dev pushes only this branch)
    Worktree: objectstack-issue-27183
    Domain: domain:skills (governed docs/adr/**; held in the epic subtree by pm:epic)
    Seat: epic:#8345
    File surface: docs/adr/ (one new ADR record, the README.md index row, a dated note in 0104-field-runtime-value-shape-contract.md) (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: opus — dispatch-gates --tier says MANDATORY claude-fable-5-1 for 'docs/adr/**'; reason: maintainer order (Bill, project thread, 2026-10-28) 「写 adr 你现在没有 fable,先用 opus 写,10 小时后用 fable 复审。」 — the quota exemption, with a fable-tier review of the PR owed ~10h later, effort: xhigh (the ADR floor)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds
    Serial constraints cleared: none
    Maintainer authority for claiming in the subtree: Bill, project thread, 2026-10-28 「使用 pm-dispatch 派发 epic #8345」 and 「其他同意你的建议,开始派发」 (the epic PM claims subtree cards, territory declared on #8345).

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 27183,
    "status": "done",
    "branch": "claude/project-thread-0jat8q",
    "pr": "#27239",
    "session": "session_01Utp6CbTZrFqRYNgjSaSbN5 — the dispatching epic PM's id (mode:subagent); this run's identity is the branch named in Claim 6467611450",
    "premise_still_valid": true,
    "summary": "Draft PR #27239 (head 12cc227, base main, assignee os-bill, label skip-changeset) adds docs/adr/0144-multi-currency-record-currency-dated-rates-write-time-home-projection.md, status Accepted 2026-10-28. It records ruling 6465431966 on #27119: shape C′, sub-questions Q0–Q4, parameters 1–4, the five design rules, and the R1/R2/R3 pairing with the card map from the epic body. It keeps a strict line between ruled text, analysis the ruling read, and readings at cdec747, and separates Q0–Q4 from the batch items #27119 Q1 and Q2. Details found only in the design record or workload rows are listed as ten Open items, each naming its card. The PR also adds a dated note under ADR-0104 D1's Reality-wins paragraph (CurrencyValueSchema still exported, retirement card #27182; ADR-0144 keeps the bare-number value) and regenerates docs/adr/README.md. Four source discrepancies are surfaced, not resolved: (1) parameter 3 makes home = amount ÷ rate, while workload M2-2 and card #27192 write amount × rate; (2) the earlier drafts had the home field fixed, and the ruling says dynamic; (3) rateField is optional in #27191, against the ruling's 'STORED with the rate used'; (4) parameter 4's unit is ambiguous. Number 0144 is next free: 0143 is the highest, 0136 and 0140 are retired, and no open PR adds an ADR. The worktree was removed after the PR opened.",
    "tests": "No test of record. The diff is three Markdown files under docs/adr; no package is touched, so there is no ① closure and no ② package test or typecheck. Docs are not ablated. node scripts/adr-index.mjs --check at 12cc227: 'adr-index: OK — docs/adr/README.md is current and every record parsed.' exit 0. Control-byte self-scan (grep -naP for C0/DEL bytes) over both ADR files: 0 lines. Model-identifier scan of the ADR and the PR body: 0 hits. PR body read back byte-identical to what was sent (7055 bytes, cmp clean).",
    "gates": "Local subset, derived by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (3 paths vs merge base cdec747). 21 commands, each exit captured before any pipe, all at final head 12cc227: check-adr-links (+ --self-test), check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus, ci/plan-test-core-shards --self-test, lint check:doc-formula-expressions, check:adr-anchors, check:adr-index, check:adr-symbol-anchors, check:ci-filter-parity, check:closed-ceremony-text, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:pm-prior-rulings, check:refd-timer-probe, check:watch-hint-literal — all exit 0. Reconciliation: dispatch-gates --ran printed 'Run reconciliation — 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN' and '21 derived famil(ies) accounted for … a DERIVED zero (all 21 recorded an exit code and none of them is 3)'. Earlier runs: check:adr-symbol-anchors went red (exit 1) on the first head, with 13 line-number anchors in my text; fixed in f14a732 by anchoring to symbols or files. check:doc-formula-expressions exited 3 (PREREQUISITE NOT MET, formula and lint not built); after os-verify-lock.sh 'turbo run build --concurrency=2 --filter=@objectstack/formula --filter=@objectstack/lint' printed VERDICT command-exit 0 (held 129s), it exited 0. CI: the PR head 12cc227 had 0 check-runs when read once at report time (not started); CI convergence is the PM's. The derivation names the families outside its total (53 artifact rosters, 11 wide-population families, 1 path-scheduled CI step, 5 type-check lanes) as CI's. The 10 pending-changeset families do not apply: there is no changeset (docs/adr fast lane).",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm (Clause-②: no)",
    "mcp_calls": "0 — no MCP GitHub calls (all reads via gh api REST GET; writes via scripts/pm only)",
    "api_writes": "2 — (1) pr_create through scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204), relay run 40684794243 (success). It executed POST /repos/objectstack-ai/objectstack/pulls (#27239, draft) with assignees [os-bill] and labels [skip-changeset]. The relay's Tier H governed-review follow-up then requested reviewers hotlong and os-zhuang on its own (the standing summons, not a request of mine). Read-back: body 7055 bytes identical, assignee os-bill, label skip-changeset present, draft true, auto_merge null. (2) This os-dev-report: POST /repos//issues/27183/comments via scripts/pm/post-stamped.mjs. git push (5 pushes to claude/project-thread-0jat8q: 1 empty probe at cdec747, then 4 commits) is not a REST write.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: #27192 · its body's 改了什么 line writes home = round(amount × rate, …), but ruled parameter 3 (1 home unit = rate units of the foreign currency) and the card's own two-minute check (USD 10,000 @0.1389 gives ¥71,994.24 = 10000 ÷ 0.1389) both need amount ÷ rate. ADR-0144 D7 records it · noted, not filed",
    "carrier: #27191 · its body and workload row M2-1 make rateField optional, against the ruling's 'STORED with the rate used'. ADR-0144 Open item 1 · noted, not filed",
    "carrier: #27185 · parameter 4 '12 significant decimals' reads as 12 significant digits or as scale 12. The rate column's precision and scale depend on it. ADR-0144 Open item 5 · noted, not filed",
    "carrier: #27182 · its task 'ADR-0104 currency paragraph: dated note that the deletion landed in PR #N' now lands under the 2026-10-28 note this PR adds, which says #27182 records its landing there · noted, not filed"
    ],
    "deviations": "Branch: per the dispatch's set deviation, I used claude/project-thread-0jat8q (not claude/issue-27183-*), recreated with -B from origin/main cdec747 in worktree /home/claude/objectstack-issue-27183, and pushed it with -u before any edit. os-dev rule 1 says a platform-designated card-thread branch is harness-pushed and gets no empty push. I read that clause as not applying in mode:subagent, where nothing else pushes this branch, so the dispatch and os-dev were not treated as conflicting. The dispatch's checkout --detach left the primary checkout detached at 4265176, untouched since. The PR body opens with the dispatched claude-projects-attribution HTML comment line verbatim (the attribution-line exception); I wrote no other HTML comment. Footer: AGENTS.md's session-URL form, not the harness reminder's form. Commit trailers: the model-free pair."
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:skillspm:dispatchedpm:epicpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions