feat(consult): annual and timing turns get the shared reading and annual list (product budget decision 2026-10-02)

Annual / timing single-domain turns take the career / marriage / wealth budget:
contract + card <= 12,000, total with the checklist <= 18,000.
CONSULT_READING_BUDGET_BLOCKED removed; size assertions and the pinned
blocker test changed (原值/新值/原因 in the tests and brief 2's progress record);
BUG-1160/1161 resolved, BLOCKED.md entry struck through.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-02 00:46:59 +08:00
co-authored by Claude Opus 5.5
parent 071a196d11
commit ec06d422d3
7 changed files with 67 additions and 41 deletions
+6 -20
View File
@@ -65,20 +65,10 @@ const domainMethodology: Readonly<Record<ConsultationDomain, { strictRoute: stri
children: { strictRoute: "consult-children", eventJudgment: null },
};
/**
* BLOCKED on a product decision (TASK-consult-affliction-reading-20261001,
* BUG-1160/1161): a single-domain annual or timing turn is already within a few
* hundred characters of the 12,000-character model-visible ceiling asserted by
* consult-condensed-checklist-20260927 and consult-evidence-card-20260927
* (annual up to 11,918 before this brief). The shared reading (733 characters
* as a section) and the annual list (334) would take annual to 12,979 and timing
* to 12,257, and those assertions are not this brief's to change. Until the
* product re-decides the ceiling, a turn whose plan holds only these domains
* keeps the pre-brief method: no shared reading, and annual's list is not
* delivered (annual stays in domains_without_strict_checklist). Remove a domain
* from this set once its budget is decided.
*/
export const CONSULT_READING_BUDGET_BLOCKED: ReadonlySet<ConsultationDomain> = new Set(["annual", "timing"]);
// Annual and timing single-domain turns used to skip the shared reading and the
// annual list on a 12,000-character ceiling (BUG-1160/1161). Product decision
// 2026-10-02: they take the career / marriage / wealth budget instead (contract
// + card <= 12,000, total with the checklist <= 18,000), so every turn gets both.
/** Domains whose list was written by the affliction-reading brief rather than condensed from the router. */
const BRIEF_WRITTEN_DOMAINS: ReadonlySet<ConsultationDomain> = new Set([
@@ -209,17 +199,13 @@ export function consultationMethodologyForDomains(
};
// Once per turn, before anything else (T1), however many domains it plans.
if (unique.some((domain) => !CONSULT_READING_BUDGET_BLOCKED.has(domain))) {
push(CONDENSED_SHARED_READING_TITLE, CONDENSED_SHARED_READING_SOURCE, sharedConsultationReading());
}
push(CONDENSED_SHARED_READING_TITLE, CONDENSED_SHARED_READING_SOURCE, sharedConsultationReading());
push("Shared mandatory baseline", ROUTER_FILE, markdownSection(router, SHARED_BASELINE_HEADING));
const withoutChecklist: ConsultationDomain[] = [];
for (const domain of unique) {
const { strictRoute, eventJudgment } = domainMethodology[domain];
const condensed = BRIEF_WRITTEN_DOMAINS.has(domain) && CONSULT_READING_BUDGET_BLOCKED.has(domain)
? null
: condensedConsultationChecklist(domain, { gender });
const condensed = condensedConsultationChecklist(domain, { gender });
if (condensed) {
push(
`${consultationDomainDefinition(domain).label} · ${strictRoute} · 普通对话精简清单`,