Provenance: maintainer ruling 2026-08-31 (director seat summon #7, decision batch #18, verbatim 「其他同意」 on #13655's presented split recommendation). Ruling record: #13655 comment 5478756633. Filed by the director seat, session session_01KGtaLpkW1mycWgkbSb3H6t.
The problem this half closes
An author (human or AI) writes critical: { strategic: 4, … } in an SLA matrix meaning support hours; the platform silently interprets wall-clock hours. The number looks perfectly normal, the misread is invisible, and every derived reading (is_sla_violated, breach sweeps, widgets) inherits it. The reference app's only mitigation today is four duplicated prose warnings (_case-sla.ts, case.hook.ts's matrix, crm_case.sla_due_date's field note, the hook module header) — prose being this repo's weakest protection.
The ruled goal (⛔ not a mechanism prescription)
"This number is wall-clock hours" must be part of the declaration, not ambient prose. First deliverable of this card is the mechanism CHOICE, measured against the real sites, then the implementation:
- a spec-level unit annotation on duration-shaped declarations (widens the contract — if chosen, clause ② applies and the addition must be enforced/read somewhere, ⛔ never declared-but-inert per ADR-0049), or
- a consumption-side convention that consolidates the four prose copies into ONE authoritative, machine-checked site (zero contract change; a lint that flags duration-shaped keys lacking the unit marker), or
- a naming convention (
*_calendar_hours) with a gate — cheapest, but renames published app metadata.
Whichever is chosen must answer: where does the NEXT AI-authored app learn the unit rule at authoring time, rather than in a code comment it never reads?
Boundaries from the ruling
Refs: #13655 (the ruled decision card, closed not planned as the B-record) · objectstack-ai/hotcrm#1184 (where the prose warnings live).
Provenance: maintainer ruling 2026-08-31 (director seat summon #7, decision batch #18, verbatim 「其他同意」 on #13655's presented split recommendation). Ruling record: #13655 comment 5478756633. Filed by the director seat, session
session_01KGtaLpkW1mycWgkbSb3H6t.The problem this half closes
An author (human or AI) writes
critical: { strategic: 4, … }in an SLA matrix meaning support hours; the platform silently interprets wall-clock hours. The number looks perfectly normal, the misread is invisible, and every derived reading (is_sla_violated, breach sweeps, widgets) inherits it. The reference app's only mitigation today is four duplicated prose warnings (_case-sla.ts,case.hook.ts's matrix,crm_case.sla_due_date's field note, the hook module header) — prose being this repo's weakest protection.The ruled goal (⛔ not a mechanism prescription)
"This number is wall-clock hours" must be part of the declaration, not ambient prose. First deliverable of this card is the mechanism CHOICE, measured against the real sites, then the implementation:
*_calendar_hours) with a gate — cheapest, but renames published app metadata.Whichever is chosen must answer: where does the NEXT AI-authored app learn the unit rule at authoring time, rather than in a code comment it never reads?
Boundaries from the ruling
Refs: #13655 (the ruled decision card, closed not planned as the B-record) · objectstack-ai/hotcrm#1184 (where the prose warnings live).