Skip to content

spec: the translation liveness row flows.approvals still reads planned and ApprovalRequestRow's label docblocks still name the authored label, although PR #24977 is the reader that serves them in the reader's locale #24979

Closed

Description

@objectstack-fleet

③ a follow-up owed by landing work. Filed by the domain:services PM seat, seat 1 (seat post #6021, session_011TdZ8GjixNZFLz1xJD9zzK), from #24863's dev report (out-of-scope finding 1). packages/spec was a hard stop for that dispatch. Unlabelled for triage.

Reader, and what they do: the domain:spec seat, once PR #24977 (#24863, plugin-approvals serving approval labels in the reader's locale) has landed. One small spec PR.

What is owed

Dedupe

liveness translation flows.approvals planned flip to live reader ApprovalRequestRow process_label docblock → 34 hits, among them:

None covers the liveness flip or the docblocks. New.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 32
    Session: session_01D6F9axfoPzR7t8G1J7Ytzz
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-24979-approvals-label-live
    Worktree: objectstack-issue-24979
    Domain: domain:spec
    Seat: domain:spec#3 (seat post #18883)
    File surface (at origin/main a39389eb51 or later; stop on a breach and explain it in the report):

    The optional flowLabelKey helper is OUT of this claim, because a new export is a widening.
    Container & model: S, mode:subagent, model: default (no path-derived mandate)
    Clause-②: no (ledger and docblock text only: no shape, key, default, accepted value or export moves)
    Responsibility: the follow-up owed by #24863's landing (PR #24977, ba69b168be)
    Thread-read: none
    Serial constraints cleared: PR #24977 is merged (ba69b168be). No in-flight PR of this seat touches these files. The dev re-checks open PRs before opening its own.

    Read on origin/main a39389eb51 at 2026-10-21T08:33Z: translation.json still reads flows.approvals as planned ("read by no consumer yet").

  2. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 24979,
      "status": "done",
      "branch": "claude/issue-24979-approvals-label-live",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25103",
      "session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
      "premise_still_valid": true,
      "summary": "The premise held at origin/main a39389eb51. PR #24977 (ba69b168be, an ancestor of origin/main, exit 0) is the reader: plugin-approvals' reader-locale-labels.ts reads flows.FLOW.approvals.NODE.label through II18nService.t() in the reader's locale. The translation.json rows flows.approvals and flows.approvals.label still read planned, and the ApprovalRequestRow docblocks still named the authored or schema label. Both rows now read live (verifiedAt 2026-10-21) and cite the reader by file#symbol anchors: localizeRequestLabels, approvalStepLabelKey, readerLabelsFor, readerLabels and attachFlowSteps. The child row also cites its producer chain: loadTranslations, i18nServiceSource and openNodeRequest. The process_label, step_label, current_step_label and object_label docblocks now say the served value is the reader's-locale label, falling back to the stored snapshot or the schema label. Each statement is checked against plugin-approvals file:line in the PR body table. Regenerated: liveness/state-counts/translation.md (live 29 to 30, planned 1 to 0), plus one Notes sentence in liveness/README.md, which the gate's stale-count message asks for. That README is outside the claim's literal list but inside 'any liveness artifact that reads those rows'. The new docblock text ships in the built dist/contracts/index.d.ts, so the PR carries .changeset/24979-approvals-label-live.md: '@objectstack/spec': patch, with the claim's line Clause-② no (ledger and docblock text only: ...). readClause2Line reads it as declared, value no, arm null. Deferred: the optional flowLabelKey / flowApprovalLabelKey spec helper was not added, because a new export is a widening and is out of claim. No open PR (14 scanned) touches the changed files.",
      "tests": "All on head da0364f825; nothing was committed after these runs. (1) pnpm --filter @objectstack/spec build under os-verify-lock: VERDICT command-exit 0. (2) Under the lock, spec typecheck (tsc --noEmit plus check:scripts-typecheck plus check:test-typecheck) followed by vitest run --maxWorkers=2: 'Test Files 778 passed (778)', 'Tests 22683 passed | 1 todo', VERDICT command-exit 0. (3) spec test:repo: 'Test Files 72 passed (72)', 'Tests 1237 passed (1237)', VERDICT command-exit 0. (4) check:liveness: exit 1 before regeneration ('state-counts/translation.md is STALE', live 29 to 30, planned 1 to 0). After gen:liveness-counts it exits 0: 976 of 976 symbol anchors resolve, key-mention 747 anchored plus 1 exempt, 'state-counts/ is current'. check:empty-state exit 0. (5) check:generated exit 0: 'All 14 generated artifacts are up to date', against the dist this branch built. (6) dispatch-gates --commands derived 84 families from merge-base a39389eb5 (5 paths, +54/-15 lines). All 84 were run with exit codes recorded. --ran --repo objectstack-ai/objectstack answered '84 derived, 81 run, 3 NOT-MEASURED, 0 UNRUN'. NOT MEASURED, each exit 3 on a missing build prerequisite: @objectstack/lint check:doc-formula-expressions (no formula or lint dist), check:dual-build-cjs-loads (no dist in about 93 packages), check:lean-entry-closure (no objectql dist). These are left to CI. Among the exit-0 families: check-adr-0087-registration ('this PR adds no declared-breaking changeset'), check-changeset-no-major, check-empty-changeset, check:changeset-gate-self-tests, check:nul-bytes, check-spec-docblock-symbol-anchors, check:api-surface, check:docs. (7) Manual control-byte scan of both edited files: no hits. Repo-wide pnpm lint was not run; it belongs to CI. No ablation applies, since no test or gate was added. CI was not awaited, so the PR's CI checks are still in_progress.",
      "mcp_calls": "0",
      "api_writes": "3 relay writes plus 1 git push. (a) pr_create through scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/pulls (draft) and POST /repos/objectstack-ai/objectstack/issues/25103/assignees [baozhoutao]. Read-back: 6681 bytes sent, 6681 stored, identical. (b) This os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/24979/comments, through the relay. Each relay stroke is a POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204). git push of the branch is not REST. No label write: the dispatch named no label, and skip-changeset does not apply because a changeset is present.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无) · noted, not filed. The 2026-09-27 #20296 sentence in the liveness/README.md translation Notes cell ('flows.label stays planned ...') is superseded history. It is left as written, because the cell is append-only chronology. In PR Acceptance notes territory only.",
        "carrier: none · noted, not filed. The ApprovalRequestRow.flow_steps[].label docblock says nothing about where the label comes from, so it was left unchanged. attachFlowSteps (plugin-approvals approval-service.ts:8501) names steps with the same reader's-locale pick. This is noted in the PR Acceptance notes."
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out — landed

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdocumentationImprovements or additions to documentationdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions