Directive components are snake_case; registry keys are kebab-case
Two string-literal conventions coexist in the POC protocol, split by role:
- JSON-protocol field and component names — the vocabulary the model
writes into an Envelope — are lower
snake_case(payment_table,not_yet_card,scenario_set). - Internal key/identifier strings — registry scenario keys, disclosure
tokens, outcome reasons — are lower
kebab-case(refi-replace,pi-only,rate-beats-market).
New directives follow snake_case; new registry keys and typed tokens follow kebab-case. Note: the task brief's draft of this rule claimed registry keys were snake_case — the code says otherwise, so the rule is recorded as the two-convention split actually observed.
Evidence
protocol.ts's Directive union: all thirteen component names are lower snake_case string literals (property_summary, equity_picture, confidence, full_picture, scenario_set, ruled_out, payment_table, payment_calculator, comparison, callout, not_yet_card, referral_scenario, handoff). registry.ts's REGISTRY_KEYS are all lower kebab-case (refi-replace, refi-consolidate, heloan-lump-sum, heloc-draw, existing-line-draw, existing-line-consolidate-only, prepay-extra, refi-plus-extra), as are disclosure.ts's DisclosureToken t values (pi-only, costs-financed, rate-source, …) and registry.ts's NotYetReason values (rate-beats-market, no-borrowing-room, underwater).