You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs+examples(currency): opportunity.dataset.ts hard-codes currency: 'USD' over a tenant-currency field, and two protocol docs claim exchange rates / a stored currency code — delete the key, rewrite the two sentences (#27119 Q2 X G4 + Q3) #27158
Filing gate ③ (maintainer-directed). Ruling 6464202770 on #27119 (batch #421 item 2, Q2 = X, maintainer 「其他同意」 2026-10-28): G4 and Q3, one family (shipped text that claims a currency the platform does not know), one PR. Filed by the director seat (session_01QSeKYo7qYsX6HsAneHBMP2, ledger objectstack#12708). ⛔ Not a claim; triage sets the lane (domain:devx expected) and grade.
Delete the two currency: 'USD' keys; the dataset's measures inherit the chain.
Rewrite the two sentences to the shipped behaviour; link ADR-0104 D1.
docs-audit affected-docs check passes.
Clause-②: no · Metadata-protocol: none. Dedupe: #27119 (the ruling), #8345 (H3 / Q8 on hold); #26939 (the template formatter, separate card); no open docs card on these two pages.
Claim: PM loop round 5 · 2026-10-28T09:45Z
Session: session_01QSeKYmTYfaPbLQD4BJfomW (dispatching seat; the cloud session is named in the dispatch note under this claim)
Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-27158-crm-dataset-currency
Worktree: the cloud session's own container
Domain: domain:devx
Seat: domain:devx#2
File surface: G4 only. Delete the two currency: 'USD' keys in examples/app-crm/src/datasets/opportunity.dataset.ts (L32–33, total_amount and avg_amount), so the measures inherit the field → tenant-default chain (ADR-0104 D1). Update any CRM test or pin that asserts those keys, without weakening it. ⛔ No product code. The Q3 half (the two docs sentences) is already shipped on main (see Premise), so no docs edit. PR Fixes #27158 (stop on breach; explain in the report)
Container & model: S, mode:cloud, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate"), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Ruling-ref: 6464202770
Thread-read: none
Premise: half-moved at origin/main2f96d874fa. G4 holds: git grep finds both currency: 'USD' keys at L32–33. Q3 is already done. content/docs/protocol/objectql/index.mdx reads "Money, in the field's fixed currency or the tenant default", and types.mdx reads "Store a bare number, no per-record currency code". Neither "exchange rates" nor "amount + currency code" survives. The dev confirms both and says so in the PR body.
Serial constraints cleared: no open PR touches examples/app-crm/src/datasets/.
{
"issue": 27158,
"status": "done",
"branch": "claude/issue-27158-crm-dataset-currency",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27205",
"session": "session_01QSeKYmLevd91XpqGmYf7fU — this cloud session, dispatched by seat session_01QSeKYmTYfaPbLQD4BJfomW (domain:devx#2); claim 6465734202 names this branch",
"premise_still_valid": true,
"summary": "G4: deleted the two currency: 'USD' keys on total_amount / avg_amount in examples/app-crm/src/datasets/opportunity.dataset.ts, so the measures inherit measure -> field defaultCurrency (fixed only) -> ctx.currency (service-analytics analytics-service.ts:3127). The CRM amount field is dynamic, so the tiles show the tenant default. Also corrected the one CRM text that quoted the key, the KPI-tile comment in pipeline.dashboard.ts. Q3 premise confirmed: objectql/index.mdx:121 and types.mdx:30 already read as shipped, so no docs edit, and the PR body says so. No test, pin or generated artifact asserted the keys, so no assertion was touched. Process notes: the outcome branch was checked out in the shared checkout, so I detached that checkout's HEAD to create the worktree ../objectstack-issue-27158 on the branch. Commits carry the AGENTS.md model-free trailer pair (Co-authored-by: Claude), not the harness reminder's model-named trailer.",
"tests": "On final head 031ff70c, after merging origin/main b322b5da: pnpm --filter @objectstack/example-crm test, Test Files 6 passed (6), Tests 46 passed (46); pnpm --filter @objectstack/example-crm typecheck, tsc --noEmit exit 0; pnpm --filter @objectstack/spec check:generated exit 0 (spec moved in the merge). All of these ran under os-verify-lock: VERDICT command-exit 0. objectstack validate (CRM): 'Validation passed', 0 diagnostics naming currency, dataset or opportunity_metrics. No ablation: example metadata and a comment, no tested behaviour changed.",
"gates": "Local derived subset on 031ff70c: dispatch-gates --commands = 34 commands, all exit 0, captured before any pipe. dispatch-gates --ran: '34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code and none of them is 3)'. First pass on 099ca381: check:dual-build-cjs-loads and check:i18n-coverage exited 3 (PREREQUISITE NOT MET: unbuilt packages). I built ./packages/** and both then exited 0. affected-docs.mjs: 0 docs. CI on PR #27205 at report time: Check Changeset success, Governed Surface Queue Guard success; Lint, Type Check and PR-body guards in_progress. Test Core, Build Core and the UI jobs had not reported. I am not waiting on CI convergence.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no GitHub MCP calls, reads or writes. Reads went through unauthenticated REST via curl.",
"api_writes": "2 relay strokes: (1) fleet-write pr_create, request fw-20261028T102920Z-c968dc, run 40672519642 success. One repository_dispatch carrying POST /repos/objectstack-ai/objectstack/pulls (draft) plus the POST .../issues/27205/assignees and POST .../issues/27205/labels legs (skip-changeset); the read-back was byte-identical, 7354/7354. (2) This os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/27158/comments via scripts/pm/post-stamped.mjs. git push is not counted.",
"open_questions": [],
"out_of_scope_findings": [
"class: none (same-family text, observation) · reach: n/a · evidence: examples/app-crm/src/dashboards/pipeline.dashboard.ts total_pipeline widget title is the literal 'Total Pipeline ($)', so a non-USD tenant still sees $ in the tile title once the measure follows the tenant currency · dedupe words: Total Pipeline, currency symbol, widget title, app-crm · carrier: #27119 family (the seat decides), noted, not filed",
"class: none (docs observation) · reach: n/a · evidence: content/docs/data-modeling/field-type-decision-tree.mdx:228 reads 'Money needs currency code and decimal handling', a loose implication of a per-value code; the only other live sentence found by the exchange-rate and currency-code sweep over content/docs and skills · dedupe words: field-type-decision-tree, currency code, Product price · carrier: #27119 Q3 family, noted, not filed",
"class: none (generated-docs drift; removal already scheduled) · reach: n/a · evidence: content/docs/references/data/field.mdx 'CurrencyValue' section is generated from the @deprecated CurrencyValueSchema (packages/spec/src/data/field.zod.ts:581), publishing { value, currency } with no deprecation note; ADR-0104 D1 deletes the schema, and its own @deprecated says removal rides the next spec major · dedupe words: CurrencyValueSchema, CurrencyValue, references field.mdx · carrier: the next spec major (ADR-0104 D1), noted, not filed"
]
}
Addendum: patch round for PR #27205, as the devx seat 2 asked (message from session_01QSeKYmTYfaPbLQD4BJfomW).
New head:8f724ac7 (one commit on 031ff70c, pushed to claude/issue-27158-crm-dataset-currency, no rebase or force).
Edit:examples/app-crm/src/dashboards/pipeline.dashboard.ts. total_pipeline title 'Total Pipeline ($)' becomes 'Total Pipeline'.
Sweep (item 2): I scanned every title / label / description / subtitle string and every currency: key under examples/app-crm/src and objectstack.config.ts for $ € £ ¥ ₹ and USD/EUR/CNY/GBP/JPY/RMB. It found one more title, which got the same edit: pipeline_by_industry'Open Pipeline by Stage ($)' becomes 'Open Pipeline by Stage'. After the edit the scan has 0 hits.
Pins (item 3): no test, translation or doc pins either old title (git grep -F for both strings and for ($) across the tree, CHANGELOGs aside). No assertion changed.
Not touched (item 4):content/docs/data-modeling/field-type-decision-tree.mdx:228.
dispatch-gates --commands: the same 34-command list as before, all :: exit 0.
--ran: "34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code and none of them is 3)".
API writes this round: 1 (this comment, via post-stamped). MCP calls: 0. The PR body is untouched.
PR body: what the seat should add.
In ## What changes, add a bullet: "pipeline.dashboard.ts: the total_pipeline and pipeline_by_industry titles drop their hard-coded ($) ('Total Pipeline', 'Open Pipeline by Stage'); the tiles' number face carries the tenant's symbol."
In ## Acceptance notes, delete the bullet about the 'Total Pipeline ($)' title. It is now fixed in place.
In ## Tests / ## Verification, change the head 031ff70c to 8f724ac7.
ACCEPT → PR #27205 comment 6467219613 · 2026-10-28T10:59Z · ready + auto-merge armed. G4 lands here. Q3 was already shipped on main, and the claim and PR body confirm it. The card closes with the merge via Fixes.
Landed: PR #27205, merged as cdec7473ef · 2026-10-28T11:19Z
The merged diff matches the reviewed head 8f724ac72c: the sorted +/− lines are hash-identical, in 2 files (examples/app-crm/src/datasets/opportunity.dataset.ts and examples/app-crm/src/dashboards/pipeline.dashboard.ts), +11/−7. ACCEPT → PR #27205 comment 6467219613. The card was closed by Fixes #27158. pm:dispatched is removed in this act. Cloud session session_01QSeKYmLevd91XpqGmYf7fU is archived in this act. Nothing remains on this card.
Activity
objectstack-fleet commentedon Oct 28, 2026
Claim: PM loop round 5 · 2026-10-28T09:45Z
Session:
session_01QSeKYmTYfaPbLQD4BJfomW(dispatching seat; the cloud session is named in the dispatch note under this claim)Account:
os-justin(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-27158-crm-dataset-currencyWorktree: the cloud session's own container
Domain:
domain:devxSeat:
domain:devx#2File surface: G4 only. Delete the two
currency: 'USD'keys inexamples/app-crm/src/datasets/opportunity.dataset.ts(L32–33,total_amountandavg_amount), so the measures inherit the field → tenant-default chain (ADR-0104 D1). Update any CRM test or pin that asserts those keys, without weakening it. ⛔ No product code. The Q3 half (the two docs sentences) is already shipped onmain(see Premise), so no docs edit. PRFixes #27158(stop on breach; explain in the report)Container & model: S,
mode:cloud,model: TIER_DEFAULT(dispatch-gates --tier: "no path-derived mandate"),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Ruling-ref: 6464202770
Thread-read: none
Premise: half-moved at
origin/main2f96d874fa. G4 holds:git grepfinds bothcurrency: 'USD'keys at L32–33. Q3 is already done.content/docs/protocol/objectql/index.mdxreads "Money, in the field's fixed currency or the tenant default", andtypes.mdxreads "Store a bare number, no per-record currency code". Neither "exchange rates" nor "amount + currency code" survives. The dev confirms both and says so in the PR body.Serial constraints cleared: no open PR touches
examples/app-crm/src/datasets/.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Dispatch note · devx seat 2 · 2026-10-28T09:48Z
Claim 6465734202 dispatched to cloud session
session_01QSeKYmLevd91XpqGmYf7fU, outcome branchclaude/issue-27158-crm-dataset-currency.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
os-dev-report
{ "issue": 27158, "status": "done", "branch": "claude/issue-27158-crm-dataset-currency", "pr": "https://github.com/objectstack-ai/objectstack/pull/27205", "session": "session_01QSeKYmLevd91XpqGmYf7fU — this cloud session, dispatched by seat session_01QSeKYmTYfaPbLQD4BJfomW (domain:devx#2); claim 6465734202 names this branch", "premise_still_valid": true, "summary": "G4: deleted the two currency: 'USD' keys on total_amount / avg_amount in examples/app-crm/src/datasets/opportunity.dataset.ts, so the measures inherit measure -> field defaultCurrency (fixed only) -> ctx.currency (service-analytics analytics-service.ts:3127). The CRM amount field is dynamic, so the tiles show the tenant default. Also corrected the one CRM text that quoted the key, the KPI-tile comment in pipeline.dashboard.ts. Q3 premise confirmed: objectql/index.mdx:121 and types.mdx:30 already read as shipped, so no docs edit, and the PR body says so. No test, pin or generated artifact asserted the keys, so no assertion was touched. Process notes: the outcome branch was checked out in the shared checkout, so I detached that checkout's HEAD to create the worktree ../objectstack-issue-27158 on the branch. Commits carry the AGENTS.md model-free trailer pair (Co-authored-by: Claude), not the harness reminder's model-named trailer.", "tests": "On final head 031ff70c, after merging origin/main b322b5da: pnpm --filter @objectstack/example-crm test, Test Files 6 passed (6), Tests 46 passed (46); pnpm --filter @objectstack/example-crm typecheck, tsc --noEmit exit 0; pnpm --filter @objectstack/spec check:generated exit 0 (spec moved in the merge). All of these ran under os-verify-lock: VERDICT command-exit 0. objectstack validate (CRM): 'Validation passed', 0 diagnostics naming currency, dataset or opportunity_metrics. No ablation: example metadata and a comment, no tested behaviour changed.", "gates": "Local derived subset on 031ff70c: dispatch-gates --commands = 34 commands, all exit 0, captured before any pipe. dispatch-gates --ran: '34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code and none of them is 3)'. First pass on 099ca381: check:dual-build-cjs-loads and check:i18n-coverage exited 3 (PREREQUISITE NOT MET: unbuilt packages). I built ./packages/** and both then exited 0. affected-docs.mjs: 0 docs. CI on PR #27205 at report time: Check Changeset success, Governed Surface Queue Guard success; Lint, Type Check and PR-body guards in_progress. Test Core, Build Core and the UI jobs had not reported. I am not waiting on CI convergence.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0 — no GitHub MCP calls, reads or writes. Reads went through unauthenticated REST via curl.", "api_writes": "2 relay strokes: (1) fleet-write pr_create, request fw-20261028T102920Z-c968dc, run 40672519642 success. One repository_dispatch carrying POST /repos/objectstack-ai/objectstack/pulls (draft) plus the POST .../issues/27205/assignees and POST .../issues/27205/labels legs (skip-changeset); the read-back was byte-identical, 7354/7354. (2) This os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/27158/comments via scripts/pm/post-stamped.mjs. git push is not counted.", "open_questions": [], "out_of_scope_findings": [ "class: none (same-family text, observation) · reach: n/a · evidence: examples/app-crm/src/dashboards/pipeline.dashboard.ts total_pipeline widget title is the literal 'Total Pipeline ($)', so a non-USD tenant still sees $ in the tile title once the measure follows the tenant currency · dedupe words: Total Pipeline, currency symbol, widget title, app-crm · carrier: #27119 family (the seat decides), noted, not filed", "class: none (docs observation) · reach: n/a · evidence: content/docs/data-modeling/field-type-decision-tree.mdx:228 reads 'Money needs currency code and decimal handling', a loose implication of a per-value code; the only other live sentence found by the exchange-rate and currency-code sweep over content/docs and skills · dedupe words: field-type-decision-tree, currency code, Product price · carrier: #27119 Q3 family, noted, not filed", "class: none (generated-docs drift; removal already scheduled) · reach: n/a · evidence: content/docs/references/data/field.mdx 'CurrencyValue' section is generated from the @deprecated CurrencyValueSchema (packages/spec/src/data/field.zod.ts:581), publishing { value, currency } with no deprecation note; ADR-0104 D1 deletes the schema, and its own @deprecated says removal rides the next spec major · dedupe words: CurrencyValueSchema, CurrencyValue, references field.mdx · carrier: the next spec major (ADR-0104 D1), noted, not filed" ] }objectstack-fleet commentedon Oct 28, 2026
os-dev-report
Addendum: patch round for PR #27205, as the devx seat 2 asked (message from session_01QSeKYmTYfaPbLQD4BJfomW).
8f724ac7(one commit on031ff70c, pushed toclaude/issue-27158-crm-dataset-currency, no rebase or force).examples/app-crm/src/dashboards/pipeline.dashboard.ts.total_pipelinetitle'Total Pipeline ($)'becomes'Total Pipeline'.title/label/description/subtitlestring and everycurrency:key underexamples/app-crm/srcandobjectstack.config.tsfor$ € £ ¥ ₹and USD/EUR/CNY/GBP/JPY/RMB. It found one more title, which got the same edit:pipeline_by_industry'Open Pipeline by Stage ($)'becomes'Open Pipeline by Stage'. After the edit the scan has 0 hits.git grep -Ffor both strings and for($)across the tree, CHANGELOGs aside). No assertion changed.content/docs/data-modeling/field-type-decision-tree.mdx:228.Exits on
8f724ac7:pnpm --filter @objectstack/example-crm test: Test Files 6 passed (6), Tests 46 passed (46).pnpm --filter @objectstack/example-crm typecheck: exit 0. It ran together with the test under os-verify-lock, VERDICT command-exit 0.objectstack validate(CRM): exit 0, "Validation passed".dispatch-gates --commands: the same 34-command list as before, all:: exit 0.--ran: "34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code and none of them is 3)".API writes this round: 1 (this comment, via post-stamped). MCP calls: 0. The PR body is untouched.
PR body: what the seat should add.
## What changes, add a bullet: "pipeline.dashboard.ts: thetotal_pipelineandpipeline_by_industrytitles drop their hard-coded($)('Total Pipeline','Open Pipeline by Stage'); the tiles' number face carries the tenant's symbol."## Acceptance notes, delete the bullet about the'Total Pipeline ($)'title. It is now fixed in place.## Tests/## Verification, change the head031ff70cto8f724ac7.## 维护者速读改了什么, append「并去掉看板两个金额标题里写死的 ($)」.objectstack-fleet commentedon Oct 28, 2026
ACCEPT → PR #27205 comment 6467219613 · 2026-10-28T10:59Z · ready + auto-merge armed. G4 lands here. Q3 was already shipped on
main, and the claim and PR body confirm it. The card closes with the merge viaFixes.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Landed: PR #27205, merged as
cdec7473ef· 2026-10-28T11:19ZThe merged diff matches the reviewed head
8f724ac72c: the sorted +/− lines are hash-identical, in 2 files (examples/app-crm/src/datasets/opportunity.dataset.tsandexamples/app-crm/src/dashboards/pipeline.dashboard.ts), +11/−7. ACCEPT → PR #27205 comment 6467219613. The card was closed byFixes #27158.pm:dispatchedis removed in this act. Cloud sessionsession_01QSeKYmLevd91XpqGmYf7fUis archived in this act. Nothing remains on this card.Generated by Claude Code