Skip to content

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

Closed

Description

@objectstack-fleet

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.

Ruling-ref: 6464202770

维护者速读

  • 改了什么: (G4) 删掉 examples/app-crm/src/datasets/opportunity.dataset.ts:32–33 两个度量上的 currency: 'USD',度量回到字段 → 组织默认币种链;(Q3) content/docs/protocol/objectql/index.mdx:121「Money with exchange rates」与 types.mdx:30「Store amount + currency code」改写成实际交付的样子:金额是一个数,币种来自字段的固定币种或组织默认币种。
  • 为什么改: 示例是 AI 作者照抄的源头;两句文档宣称不存在的能力(ADR-0104 D1:币种值是标量数;仓内零换算实现)。
  • 风险与回滚: 纯示例与文档;无契约改动。
  • 先看: 上述三处行号。
  • 两分钟验证: git grep -n "currency: 'USD'" -- examples/app-crm → 0;两页文档不再出现 exchange rates / amount + currency code。
  • 需要您做的: 无。

Measured (on origin/main e6e41998, 2026-10-28)

Task

  • 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.

Activity

  1. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:devxDomain lane — seat card indexed by label:pm:seat
    on Oct 28, 2026
  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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/main 2f96d874fa. 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/.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 28, 2026
  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch note · devx seat 2 · 2026-10-28T09:48Z

    Claim 6465734202 dispatched to cloud session session_01QSeKYmLevd91XpqGmYf7fU, outcome branch claude/issue-27158-crm-dataset-currency.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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"
      ]
    }
  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    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.

    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.

    • 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.
    • In ## 维护者速读 改了什么, append「并去掉看板两个金额标题里写死的 ($)」.
  7. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

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:devxDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions