Skip to content

qa(checklist): i18n — 9 ledger edits from the 18.2.0 release sweep (#25807) #25842

Closed

Description

@objectstack-fleet

Filing gate: maintainer-directed task. Filed by the 18.2.0 release-assessment thread · session_01G3h9iZTpL8aCiXbfsp8H5u. ⛔ Not a claim, ⛔ not dispatched.

Maintainer's words (project thread, 2026-10-25, verbatim): 22:54Z 「约 300 条清单准确性问题:是不是应该开卡?」, then 22:55Z 「写issue,不派发」.

Parent: wave anchor #25807 (18.2.0 release test sweep). RUNNER's extraction obligation parks checklist-accuracy findings on the anchor; the maintainer asked for them as issues, so the wave's findings are split into one card per ledger file and the anchor links each card. This is not a release blocker, so it carries no target:v18.

Reader who acts: the lane owning docs/qa/platform-checklist/** (domain:devx). Dedupe (open and closed): no card holds these lines; the 18.0 precedent closed its accuracy rows on its anchor #24579.

Wanted

For each line below, edit docs/qa/platform-checklist/areas/i18n.json: revise the item's text, bump its revision, and append a history entry citing the run record the line comes from. Keep pnpm check:platform-checklist green. A line that turns out to describe a product defect rather than stale text gets its own card instead of a ledger edit.

Findings (9)

From #25815 — release-18.2.0-tier1, 156 items, at 6679644a, pin b41ed7f68956 (clause labels: aK = acceptance[K], nK = negative[K])

  • i18n.flow-copy-translation-and-host-override a2: no file in the ref touches os i18n extract; the extraction of refusal, screen, option and toast keys is pinned in packages/cli/test/i18n-flow-{refusal,screen,toast-option}-coverage.test.ts (extractTranslations, the function the command runs — not the command's file write), none of them in the ref
  • i18n.flow-copy-translation-and-host-override a3: translation.test.ts › 'refuses a single-brace {token} in a translated title, through the one text-slot judge (i18n(flows): a translated screen title is not judged by the text-slot judge, so a single-brace {name} in a translated heading renders literally while the description and refusal message beside it are refused #22627)' pins the schema rule and its {{ name }} remedy; nothing in the ref runs os validate for the exit code
  • i18n.surface-matrix a5: ref is accurate that the two objectui component pins cover only the confirm half (plus successMessage→toast props); they render under a mocked ActionRunner/I18nProvider with no server round-trip, so the network-oracle clause stays the run's
  • i18n.surface-matrix a6/a7/a9: the i18n routes have HTTP coverage elsewhere (e.g. showcase-anonymous-deny-surfaces' I18N_FACES member 200 control) but nothing asserts the locale set, group vocabulary or zz-ZZ empty-map shape named here

From #25817 — release-18.2.0-manual-set, 29 items, at 6679644a, pin b41ed7f68956

  • i18n.strict-translation-key-rejection: The steps' conventional item name zh-CN is refused first by the item-name rule (400 INVALID_REQUEST). Name a snake_case item, and score the 422 INVALID_METADATA.
  • i18n.strict-translation-key-rejection: The translation.zod.ts name comment still calls zh-CN the convention.
  • i18n.strict-translation-key-rejection: A5 should say the singular label shows on the record-page badge and the New dialog, while the list header and nav read pluralLabel.
  • i18n.strict-translation-key-rejection: A3 cites "清空剩余 6 条 authorWarn 死键 —— book ×2 / job.id / translation.validationMessages / app.homePageId / app.areas[].order(ADR-0049,v17 限时) #4667/ADR-0049", but the live text cites ADR-0049 and spec 17.0.0.
  • i18n.notification-localized-and-clears: the header badge counts notifications plus pending approvals. Read the server's unreadCount, never the badge.

Acceptance

  • Every line above is either applied (item revised, revision bumped, history cites the record) or answered on this card with the reason it was not.
  • pnpm check:platform-checklist is green.
  • The PR links this card and [sweep] v18.2.0 release test sweep #25807.

Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-26T12:23Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_01K6HUHL4N3MV54PMcKnRgP3
    Account: os-steve
    Branch: claude/project-thread-jk51nb (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn); family dispatch, chain head #25842, one shared branch and one PR for #25842 #25847 #25848 #25849 #25850
    Worktree: objectstack-issue-25842
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: docs/qa/platform-checklist/areas/i18n.json only (family: docs/qa/platform-checklist/areas/search.json, docs/qa/platform-checklist/areas/studio-authoring.json, docs/qa/platform-checklist/areas/ux-conventions.json, docs/qa/platform-checklist/RUNNER.md are the sibling members' files) (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds (action surface git log origin/main on the file since filing: no commit; the dev re-reads each line against main first)
    Serial constraints cleared: own ledger file only; seat 1 holds #25835 / #25836 on other files; #26035 left the retired objectui pin wording in these files to these cards; no other Claim: names this file

    Family fold (five gates): same shape (stale checklist text, ledger edit + revision + history), same region (docs/qa/platform-checklist/, one PR, skip-changeset), every member graded p2 by triage, each member checked on its own by pnpm check:platform-checklist and its own line list, excluded: #25835 / #25836 (seat 1) and #25837–#25846 minus #25842 (sized for their own threads).


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 25842,
     "status": "done",
     "branch": "claude/project-thread-jk51nb",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/26109",
     "session": "session_01K6HUHL4N3MV54PMcKnRgP3",
     "premise_still_valid": true,
     "summary": "Family dispatch, one PR for #25842 #25847 #25848 #25849 #25850, one commit per card. 31 of 32 findings applied: i18n.json 9/9 (5 items), search.json 6/6 (4 items), studio-authoring.json 9/9, ux-conventions.json 4/5 (write-feedback), RUNNER.md 3/3 (four entries). Each JSON edit bumps revision and appends a history row citing the run record. Not applied: ux-conventions.write-feedback A1 asks for a ruling on object-only success strings, which is a maintainer decision (open_questions). Retired objectui-pin wording in the same files (.objectui-sha, objectui:refresh, 'not runnable from this checkout') rewritten to ui/ paths and pnpm console:build, per #26035; non-history re-scan of the five files: 0 hits.",
     "tests": "docs-only, no test changed. Facts re-read on origin/main cc378e93 before each edit (pins, describes, testids, routes under ui/). NOT MEASURED: the three packages/cli/test/i18n-flow-*-coverage files newly named in i18n.flow-copy-translation-and-host-override automated.ref were confirmed present with it() cases, not executed here.",
     "gates": "head bc394208. dispatch-gates --commands derived 13 families; all 13 run, each exit captured before any pipe: check-ci-filter-parity 0, check-closing-keyword-parity 0, its --self-test 0, check-comment-mask-corpus 0, lint check:doc-formula-expressions 3 (prerequisite: formula+lint unbuilt) then 0 after turbo build of both under os-verify-lock (VERDICT command-exit 0), check:cross-package-test-inputs 0, check:doc-authoring 0, check:driver-memory-census 0, check:gitlink-declared 0, check:nul-bytes 0, check:platform-checklist 0 (OK, 16 areas, 329 items), check:refd-timer-probe 0, check:watch-hint-literal 0. dispatch-gates --ran: 13 derived, 13 run, 0 NOT-MEASURED. check-commit-card-trailers --range origin/main..HEAD: 0, 5 commits clean. PR check-runs: in_progress at report time.",
     "line_budget": "398 changed lines (+238/-160) over 5 files, under the 3000 human-merge threshold",
     "deviations": [
      "PR body starts with the harness attribution pair, then the five Fixes lines (os-dev clean-finish exception), not Fixes on line 1.",
      "Retired objectui-pin rewrite went beyond the regex hits to the four 'AUTOMATION IS PINNED IN THE objectui REPO, NOT HERE' knownGaps in studio-authoring.json and RUNNER's objectui-ref standing fact, because the edited items would otherwise contradict themselves; history rows left as records.",
      "No subscribe_pr_activity and no MCP reviewer request: dispatch contract forbids GitHub MCP writes and owns the CI wait."
     ],
     "files_changed": [
      "docs/qa/platform-checklist/RUNNER.md",
      "docs/qa/platform-checklist/areas/i18n.json",
      "docs/qa/platform-checklist/areas/search.json",
      "docs/qa/platform-checklist/areas/studio-authoring.json",
      "docs/qa/platform-checklist/areas/ux-conventions.json"
     ],
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "6 — mcp__github__issue_read x6 (get 25842/25847/25848/25849/25850, get_comments 25842); no write tool",
     "api_writes": "2 relay strokes — pr_create (POST pulls, POST issues/26109/assignees os-steve, POST issues/26109/labels skip-changeset; body read back identical, 7863 bytes); comment on #25842 (this report)",
     "open_questions": [
      {
       "question": "ux-conventions.write-feedback acceptance[1]: do object-only success strings ('Task created successfully', 'Settings saved', 'Flow \"Reassign Task\" completed') pass 'success feedback names what changed', or must they name the record/item?",
       "options": [
        "A: object-only names pass (the subject is the object kind)",
        "B: they FAIL; the toast must name the record or item (title, label, count)"
       ],
       "recommendation": "Maintainer ruling; the run (#25817) asked for one and the clause is unchanged until it lands."
      }
     ],
     "out_of_scope_findings": [
      "class: c · reach: public door, QA run #25817 at 6679644a: saving a translation item named zh-CN through the metadata API answers 400 INVALID_REQUEST from the item-name rule before any key is judged · evidence: TranslationItemSchema.name describe in packages/spec/src/system/translation.zod.ts reads 'conventionally the locale code (zh-CN)' while refuseUngrammaticalMetaItemName (packages/metadata-protocol/src/protocol-save-door-refusals.ts) refuses any non-snake_case name · Seam: spec:TranslationItemSchema.name → runtime:refuseUngrammaticalMetaItemName · dedupe words: translation item name zh-CN, METADATA_ITEM_NAME_PATTERN, locale code convention, INVALID_REQUEST",
      "class: b · reach: public door, QA run #25817 at 6679644a (not re-measured here): with OS_PORT=41302 exported on os dev, GET /api/v1/meta/connector/showcase_status_api answered baseUrl http://127.0.0.1:3000 while the live connector_action reached 41302 · evidence: os dev boots the prebuilt dist/objectstack.json without --compile (packages/cli/src/commands/dev.ts), so served connector metadata carries the build-time value; examples/app-showcase/src/system/self-url.ts header still says the os dev value follows the live environment · Seam: spec:connector providerConfig.baseUrl → runtime:os dev artifact boot (served metadata vs dispatch) · dedupe words: showcase_status_api baseUrl, OS_PORT, resolveShowcaseSelfUrl, prebuilt artifact",
      "carrier: the area files' own ledger cards or #26035 (area JSON tail) · 15 items in records-forms.json (12), automation.json (2), attachments-storage.json (1) still carry the 'AUTOMATION IS PINNED IN THE objectui REPO' knownGap now that objectui lives under ui/; RUNNER's rewritten fact tells runners to read it as stale · noted, not filed",
      "carrier: none · packages/qa/dogfood/test/search-conformance.ledger.ts names showcase-search.dogfood.test.ts as the proof for search-fields-override (400 INVALID_FIELD), but that file has no refusal case · noted in PR acceptance notes, not filed"
     ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · review: ACCEPT → PR #26109 comment 6416357640. Landing: ready + merge queue once every check on the reviewed head is green or skipped.


    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:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions