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
Retire the local i18n reference test and the severity-promoting i18n gate, once strict covers the i18n/missing-* and translation-target rules (epic #1579, step 3, family F4) #1585
Unblocked: #2031 landed as 2f3d898d (PR #2091, 2026-10-13); see the unlock-scan comment.
Re-derived 2026-10-09T14:12Z by the repo:hotcrm seat (session_018Mk4tab2eCyY41UTWK7y7V): the previous blocker objectstack-ai/objectstack#22238 (named in 6055734104; the body line still named #1581, which closed earlier) closed completed at 2026-10-08T13:24:15Z, but no installable release carries it yet (npm view @objectstack/cli version answers 17.7.0, which is this repo's pin). So this card waits on #2031, the upgrade card, whose Restart-when: is that release; re-derive again when #2031 closes.
Sub-issue of the epic #1579; pm:epic. ⛔ Not dispatchable until #1581 is MERGED. Filed by the director seat (objectstack#12708, summon #15).
Governing text.AGENTS.md rule 3; and scripts/check-lint-i18n-gate.mjs's own header, which states that its fix is a packages/lint severity change "out of this repo's reach" — the gate exists only to promote the i18n/missing-* family from warning to failing.
Family F4 (census 5552607309)
local file
platform rule ids / command
test/i18n-references.test.ts (866)
translation-target-unknown, translation-option-key-unknown, translation-section-name-missing, plus the whole os i18n check command
Delete test/i18n-references.test.ts only for the assertions the platform rules fire on; anything it asserts beyond them (e.g. this app's own locale-pack conventions) is a business-fact pin and stays — say which.
pnpm test green after; empty-frontmatter changeset.
⚠️ PM correction — the method is unsound as written, and this family has zero error-severity rules
Epic PM, 02:0xZ, from surveys #1613 / #1621. ⛔ Read before dispatching. 2 of 4 ids measured.
The method is amended to THREE gates
Delete only when all three hold: non-vacuous (inspects a non-empty set, reds on its own defect) · reachable (the rule fires here at all) · subsuming (it fires on that assertion's own defect, ⛔ not merely on some defect of its class). Full statement: #1582's body · epic #1579 comment 5555869319.
i18n/missing-* is not a @objectstack/lint rule at all — it is CLI-synthesised by foldCoverageIssues in @objectstack/cli. ⛔ Not missing, but also not a rule this card can retire an assertion against in the usual way. Confirm how --strict treats a synthesised finding before planning any deletion here.
translation-section-name-missing: gate 2 is UNMEASURED, ⛔ not failed.Survey part 2 — run F2–F6 through the three-gate test that #1613 proved necessary on F1 (epic #1579, step 3; needs no release) #1621's injection (deleting a _sections translation entry) was out of the rule's class — objectstack#5417 shows it is about a form section authored with a label but no name. ⭐ The distinction matters: an out-of-class injection that produces no finding says nothing about the rule, and reading it as "does not fire" would have produced a false upstream card. The survey caught this and withdrew the card rather than filing it. ⇒ This row still needs a correctly-classed injection.
This card also owns retiring scripts/check-lint-i18n-gate.mjs once strict covers i18n/missing-* at error level. ⚠️ Given the synthesised-finding question above, confirm that premise before acting on it.
Ruling: batch hotcrm-R74 item 4 · letter B · maintainer 「同意」 2026-10-08T03:18Z
repo:hotcrm seat, session_012zh91QzFgePbkmuHnugLN3. Epic #1579 is dissolved by this ruling; the full reading and the destination of every child are in #1579's closing comment.
Transition: no pm:* state → pm:blocked on the Blocked-by: #1581 line already in this body · pm:epic is removed in the same write · source: the maintainer's 「同意」 to batch hotcrm-R74, in this seat's chat.
What happens when #1581 lands: this card is re-graded once, under the three-gate, per-case method (non-vacuous, reachable, subsuming: 5555869319, 5556310099). The surviving retirable rows of every family fold into ONE card; this card closes not_planned if it has none. This card is family F4, the i18n family plus the severity-promoting gate. Its four rules are warning-severity, so --strict landing in #1581 is exactly what changes this family's answer.
Claim: PM loop round R74
Session: session_012zh91QzFgePbkmuHnugLN3
Account: os-zhuang (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-1582-family-regrade
Worktree: hotcrm-issue-1582
Domain: repo:hotcrm (single-lane repo, no domain:* taxonomy)
Seat: repo:hotcrm#1
File surface: as on the chain head #1582: read-only measurement, nothing committed (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: default (dispatch-gates --tier --repo objectstack-ai/hotcrm answers "no path-derived mandate … the tier stays the PM's per-card judgment call")
Clause-②: no
Responsibility: n/a — not a defect card (family F4 i18n + the severity-promoting gate)
Thread-read: 6051464187
Serial constraints cleared: member of the folded family dispatch whose chain head is #1582; the full serial check is on that claim. Ruling-ref: hotcrm-R74 item 4 B (on #1579 and on each family card).
Verdict on the re-grade report 6053840674 (on #1582) — ACCEPT (a measurement round: nothing deleted, no PR; the empty marker branch claude/issue-1582-family-regrade stays at c529de2b). repo:hotcrm seat, session_012zh91QzFgePbkmuHnugLN3, 2026-10-08T06:35Z.
This card's share of the fold: F4 (i18n), 4 rows: the option-key sweep, the apps.*.navigation orphan sweep, the section-name-missing sweep, and the whole scripts/check-lint-i18n-gate.mjs gate. Its test, its package.json script, its verify step and its two CI workflow steps go too: on all 12 reachable i18n/missing-* ids the gate and strict lint both exit 1, and nothing it checks escapes strict.
These rows retire in the ONE retirement PR folded under #1582, whose comment carries the full plan: per-row deletion, re-ablation on the PR's base, and one Fixes line per member. The serial order is after hotcrm#1907 / PR #2011. Rows marked keep stay byte-identical.
Release: claim 6052992678 (fold member) · reason: the measurement round is delivered, and the retirement waits on a sibling PR's files · destination: pm:queue. The assignee is cleared in the same act.
Claim: PM loop round R74
Session: session_012zh91QzFgePbkmuHnugLN3
Account: os-zhuang (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-1582-family-regrade
Worktree: hotcrm-issue-1582
Domain: repo:hotcrm (single-lane repo, no domain:* taxonomy)
Seat: repo:hotcrm#1
File surface: as on the chain head #1582 (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: default (dispatch-gates --tier --repo objectstack-ai/hotcrm answers "no path-derived mandate … the tier stays the PM's per-card judgment call")
Clause-②: no
Responsibility: n/a — not a defect card (retirement share, F4: the option-key, apps.*.navigation orphan and section-name-missing sweeps, plus the whole lint:i18n-gate gate)
Thread-read: 6053985674
Serial constraints cleared: member of the folded family dispatch whose chain head is #1582; the full serial check is on that claim. Ruling-ref: hotcrm-R74 item 4 B.
Landed in part: PR #2012 MERGED as 99d290ad (Part of #1585). Three of this card's four F4 rows are retired: the option-key, apps.*.navigation orphan and section-name-missing sweeps. repo:hotcrm seat, session_012zh91QzFgePbkmuHnugLN3, 2026-10-08T08:17Z.
Kept, on measurement: the whole lint:i18n-gate gate. Since #1907 / PR #2011 composed the app as two packages, objectstack lint's translation coverage reads only the artifact's top level. On b54380cf, all 12 i18n/missing-* classes give exit 0, and so does the gate, because it reads the same report. This card's own title condition ("once strict covers the i18n/missing-*") is therefore unmet.
⚠️The gate is kept but blind for now: today pnpm verify catches no missing non-default label for objects, navigation, dashboards, datasets or flows. hotcrm's local tests still hold the other 7 classes. Nothing is routed around in hotcrm (AGENTS.md §2); the fix is the platform's.
Release: claim 6054504360 (fold member) · reason: the retirable rows landed, and the gate waits on the platform · destination: pm:blocked. The assignee is cleared in the same act.
Blocked-by: objectstack-ai/objectstack#22238
Restart-when: the installed @objectstack/cli reports a deleted zh-CN entry of each i18n/missing-* class on this two-package artifact (re-run the dev's 12 probes g-* on the pin). Then the gate retires under ruling hotcrm-R74 item 4 B, with the "loses nothing" proof.
Re-derived: no newer blocker is known. The card's own next step: This card's own Restart-when: holds only if the installed @objectstack/cli reports a deleted zh-CN entry of each i18n/missing-* class on this two-package artifact: re-run the dev's 12 probes g-* on the pin. Then the gate retires under ruling hotcrm-R74 item 4 B, with the "loses nothing" proof.
Activity
os lint --strictfirst, then retire the local re-implementations by family #1579os-steve commentedon Sep 6, 2026
Epic PM, 02:0xZ, from surveys #1613 / #1621. ⛔ Read before dispatching. 2 of 4 ids measured.
The method is amended to THREE gates
Delete only when all three hold: non-vacuous (inspects a non-empty set, reds on its own defect) · reachable (the rule fires here at all) · subsuming (it fires on that assertion's own defect, ⛔ not merely on some defect of its class). Full statement: #1582's body · epic #1579 comment
5555869319.F4-specific
os lint --strictin this repo's verify chain and prove the gate reds (epic #1579, step 2b — the half that needs a release) #1581 — this is the one family where the originalBlocked-bywas exactly right. It is therefore also the lowest-yield family and was surveyed last.i18n/missing-*is not a@objectstack/lintrule at all — it is CLI-synthesised byfoldCoverageIssuesin@objectstack/cli. ⛔ Not missing, but also not a rule this card can retire an assertion against in the usual way. Confirm how--stricttreats a synthesised finding before planning any deletion here.translation-section-name-missing: gate 2 is UNMEASURED, ⛔ not failed. Survey part 2 — run F2–F6 through the three-gate test that #1613 proved necessary on F1 (epic #1579, step 3; needs no release) #1621's injection (deleting a_sectionstranslation entry) was out of the rule's class — objectstack#5417 shows it is about a form section authored with alabelbut noname. ⭐ The distinction matters: an out-of-class injection that produces no finding says nothing about the rule, and reading it as "does not fire" would have produced a false upstream card. The survey caught this and withdrew the card rather than filing it. ⇒ This row still needs a correctly-classed injection.scripts/check-lint-i18n-gate.mjsonce strict coversi18n/missing-*at error level.Refs: #1613 · #1621 · #1625 · #1581 · objectstack#5417.
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Ruling: batch hotcrm-R74 item 4 · letter B · maintainer 「同意」 2026-10-08T03:18Z
repo:hotcrmseat,session_012zh91QzFgePbkmuHnugLN3. Epic #1579 is dissolved by this ruling; the full reading and the destination of every child are in #1579's closing comment.Transition: no
pm:*state →pm:blockedon theBlocked-by: #1581line already in this body ·pm:epicis removed in the same write · source: the maintainer's 「同意」 to batch hotcrm-R74, in this seat's chat.What happens when #1581 lands: this card is re-graded once, under the three-gate, per-case method (non-vacuous, reachable, subsuming:
5555869319,5556310099). The surviving retirable rows of every family fold into ONE card; this card closesnot_plannedif it has none. This card is family F4, the i18n family plus the severity-promoting gate. Its four rules are warning-severity, so--strictlanding in #1581 is exactly what changes this family's answer.Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Claim: PM loop round R74
Session:
session_012zh91QzFgePbkmuHnugLN3Account:
os-zhuang(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-1582-family-regradeWorktree:
hotcrm-issue-1582Domain:
repo:hotcrm(single-lane repo, nodomain:*taxonomy)Seat:
repo:hotcrm#1File surface: as on the chain head #1582: read-only measurement, nothing committed (stop on breach; explain in the report)
Container & model:
M,mode:subagent,model: default(dispatch-gates --tier --repo objectstack-ai/hotcrmanswers "no path-derived mandate … the tier stays the PM's per-card judgment call")Clause-②: no
Responsibility:
n/a — not a defect card(family F4 i18n + the severity-promoting gate)Thread-read: 6051464187
Serial constraints cleared: member of the folded family dispatch whose chain head is #1582; the full serial check is on that claim. Ruling-ref: hotcrm-R74 item 4 B (on #1579 and on each family card).
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Verdict on the re-grade report
6053840674(on #1582) — ACCEPT (a measurement round: nothing deleted, no PR; the empty marker branchclaude/issue-1582-family-regradestays atc529de2b).repo:hotcrmseat,session_012zh91QzFgePbkmuHnugLN3, 2026-10-08T06:35Z.This card's share of the fold: F4 (i18n), 4 rows: the option-key sweep, the
apps.*.navigationorphan sweep, the section-name-missing sweep, and the wholescripts/check-lint-i18n-gate.mjsgate. Its test, itspackage.jsonscript, itsverifystep and its two CI workflow steps go too: on all 12 reachablei18n/missing-*ids the gate and strict lint both exit 1, and nothing it checks escapes strict.These rows retire in the ONE retirement PR folded under #1582, whose comment carries the full plan: per-row deletion, re-ablation on the PR's base, and one
Fixesline per member. The serial order is after hotcrm#1907 / PR #2011. Rows marked keep stay byte-identical.Release: claim
6052992678(fold member) · reason: the measurement round is delivered, and the retirement waits on a sibling PR's files · destination:pm:queue. The assignee is cleared in the same act.Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Claim: PM loop round R74
Session:
session_012zh91QzFgePbkmuHnugLN3Account:
os-zhuang(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-1582-family-regradeWorktree:
hotcrm-issue-1582Domain:
repo:hotcrm(single-lane repo, nodomain:*taxonomy)Seat:
repo:hotcrm#1File surface: as on the chain head #1582 (stop on breach; explain in the report)
Container & model:
M,mode:subagent,model: default(dispatch-gates --tier --repo objectstack-ai/hotcrmanswers "no path-derived mandate … the tier stays the PM's per-card judgment call")Clause-②: no
Responsibility:
n/a — not a defect card(retirement share, F4: the option-key, apps.*.navigation orphan and section-name-missing sweeps, plus the whole lint:i18n-gate gate)Thread-read: 6053985674
Serial constraints cleared: member of the folded family dispatch whose chain head is #1582; the full serial check is on that claim. Ruling-ref: hotcrm-R74 item 4 B.
Generated by Claude Code
test: keep the i18n lint gate; correct the i18n coverage prose (#1585)
objectstack-fleet commentedon Oct 8, 2026
Landed in part: PR #2012 MERGED as
99d290ad(Part of #1585). Three of this card's four F4 rows are retired: the option-key,apps.*.navigationorphan and section-name-missing sweeps.repo:hotcrmseat,session_012zh91QzFgePbkmuHnugLN3, 2026-10-08T08:17Z.Kept, on measurement: the whole
lint:i18n-gategate. Since #1907 / PR #2011 composed the app as two packages,objectstack lint's translation coverage reads only the artifact's top level. Onb54380cf, all 12i18n/missing-*classes give exit 0, and so does the gate, because it reads the same report. This card's own title condition ("once strict covers thei18n/missing-*") is therefore unmet.pnpm verifycatches no missing non-default label for objects, navigation, dashboards, datasets or flows. hotcrm's local tests still hold the other 7 classes. Nothing is routed around in hotcrm (AGENTS.md §2); the fix is the platform's.Release: claim
6054504360(fold member) · reason: the retirable rows landed, and the gate waits on the platform · destination:pm:blocked. The assignee is cleared in the same act.Blocked-by: objectstack-ai/objectstack#22238
Restart-when: the installed
@objectstack/clireports a deleted zh-CN entry of eachi18n/missing-*class on this two-package artifact (re-run the dev's 12 probesg-*on the pin). Then the gate retires under ruling hotcrm-R74 item 4 B, with the "loses nothing" proof.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Unlock scan by the
repo:hotcrmseat (session_01BCDqr1DqnQjEh5jA9gGkUG), 2026-10-13T12:53Z. ⛔ Not a claim.@objectstack/*past 17.7.0 once the next release publishes — it carries the platform fixes #2016, #2000, #1583 and #1585 wait on #2031 is closed. PR chore(deps): upgrade the ObjectStack platform to 18.0.0-next.0 #2091 merged as2f3d898d, andmainnow pins@objectstack/*18.0.0-next.0.os linttranslation coverage reads only a multi-package artifacts top level — everyi18n/missing-*` goes silent once an app ships as packages (missed reader of the ADR-0130 2026-09-22 addendum; family of #22189) objectstack#22238 (PR #22285, fix6d2da32, cli). It is present in the installed 18.0.0-next.0, per the fix commit in the package CHANGELOG (the per-row table in chore(deps): upgrade@objectstack/*past 17.7.0 once the next release publishes — it carries the platform fixes #2016, #2000, #1583 and #1585 wait on #2031's report6142372109). For this lane the criterion is "released and pinned", and it now holds.Restart-when:holds only if the installed@objectstack/clireports a deleted zh-CN entry of eachi18n/missing-*class on this two-package artifact: re-run the dev's 12 probesg-*on the pin. Then the gate retires under ruling hotcrm-R74 item 4 B, with the "loses nothing" proof.lint:i18n-gategreen with 96 new flow keys translated; the 12 probes are the first step, and a silent class re-blocks this card.pm:blocked→pm:queue. The body'sBlocked-by:line is retired in this act.Generated by Claude Code