Commit Graph
100 Commits
Author SHA1 Message Date
robbond a5b71ad89a experiment: map remaining apply proposal boundaries 2026-08-14 16:27:55 +01:00
robbond 6cb91099c2 experiment: confirm deterministic post-refactor closure path 2026-08-14 16:06:22 +01:00
robbond 1ca5026352 experiment: confirm post-refactor live equivalence 2026-08-14 15:50:59 +01:00
robbond 36b4f47097 refactor(reasoning): extract decision sufficiency 2026-08-14 15:37:24 +01:00
robbond c43decf5d4 experiment: establish live decision closure baseline 2026-08-14 15:12:17 +01:00
robbond 983ebcc836 experiment: define decision sufficiency module boundary 2026-08-14 15:00:48 +01:00
robbond bce05f779b feat(reasoning): integrate explicit decision-sufficiency closure (60B.64)
Add two new capabilities:

1. isUserConfirmationOfNoRemainingUncertainty(answer) — bounded,
   deterministic raw-answer confirmation that no other material uncertainty
   remains after a decision factor has been resolved. Matches an explicit
   phrase family (e.g. 'no remaining material uncertainty', 'no other
   material uncertainties remain') plus two bounded regex patterns, while
   rejecting contradictory wording ('still another material uncertainty',
   'I am not saying...').

2. Decision-sufficiency closure integration point in applyValidatedProposal,
   positioned after post-mutation/post-propagation and before final
   active-target selection. When all represented material factors are
   resolved AND the raw user answer confirms sufficiency, resolves the
   existing parent decision in place (status → 'resolved') and clears
   the active unknown target.

Uses a virtual 'resolved this turn' set because node statuses have not
yet been reconciled at the integration point. Tests cover: exact fixture
wording from 60B.56, bounded paraphrases, absence-of-confirmation
(non-closure), remaining-factors (blockage), contradictory wording
(rejection), negated phrases (rejection), and vague completion language
(exclusion).
2026-08-14 14:21:33 +01:00
robbond 02b7c292a5 experiment: define closure confirmation signal 2026-08-14 13:55:41 +01:00
robbond 7ee9b197ab experiment: define decision closure integration boundary 2026-08-14 13:43:43 +01:00
robbond 100dfa2be5 docs: record decision factor detection 2026-08-14 13:31:30 +01:00
robbond 5ef2b5a3c7 feat(reasoning): detect remaining decision factors 2026-08-14 13:31:28 +01:00
robbond 909edd1019 experiment: define option factor representation contract 2026-08-14 12:30:01 +01:00
robbond 3d7f2cc3dd experiment: define decision factor relationship family 2026-08-14 12:21:28 +01:00
robbond 014c6b72dc experiment: define decision sufficiency evidence 2026-08-14 12:10:25 +01:00
robbond 2394ad4c0c experiment: confirm negative closure live 2026-08-14 11:16:58 +01:00
robbond 54e2e2186b fix(reasoning): reconcile closure selection state 2026-08-14 11:02:00 +01:00
robbond a00112e157 docs: record closure reconciliation consolidation 2026-08-14 11:02:00 +01:00
robbond 998ff2fcb7 experiment: diagnose resolution contract mismatch 2026-08-14 09:51:12 +01:00
robbond 59ededfe06 experiment: test opposite-outcome decision closure 2026-08-14 09:43:51 +01:00
robbond 2b44eea8d8 experiment: confirm clean closure with direct metadata 2026-08-14 09:36:39 +01:00
robbond 831e395511 tooling: expose closure metadata in live harness 2026-08-14 09:30:55 +01:00
robbond fa821a53dd docs: record closure metadata capture 2026-08-14 09:30:55 +01:00
robbond 50ae28b325 experiment: validate clean decision closure live 2026-08-14 09:21:36 +01:00
robbond 6b13e67c05 fix(reasoning): enforce terminal post-mutation eligibility 2026-08-14 09:11:08 +01:00
robbond 34eb0cd4e3 fix(reasoning): exclude terminal nodes from active selector 2026-08-14 09:02:08 +01:00
robbond 865565b7af experiment: define active selector terminal guard 2026-08-14 08:51:19 +01:00
robbond 5c6b3421dd experiment: locate post-mutation question guard 2026-08-14 08:38:23 +01:00
robbond 88a80180b7 experiment: diagnose stale question after resolution 2026-08-14 08:21:22 +01:00
robbond 1331fe94f1 experiment: test customer signing decision closure 2026-08-14 08:10:59 +01:00
robbond bcbcb65020 test(reasoning): add customer signing followup fixture 2026-08-14 08:02:45 +01:00
robbond 870d325d08 docs: record customer signing followup fixture 2026-08-14 08:02:45 +01:00
robbond 89551c5e8c experiment: confirm bare whether runtime path 2026-08-14 07:56:46 +01:00
robbond 0f7babd937 experiment: validate bare whether proposition live 2026-08-14 07:08:29 +01:00
robbond 2996c30578 docs: record bare whether proposition fix 2026-08-14 07:01:23 +01:00
robbond 437aadc587 fix(reasoning): honor explicit whether propositions 2026-08-14 07:01:23 +01:00
robbond 29d565372b experiment: diagnose runtime question formulation path 2026-08-14 06:48:24 +01:00
robbond 9b5942799f experiment: validate uncertainty-over proposition live 2026-08-14 06:38:44 +01:00
robbond 827dc82eeb docs: record uncertainty-over proposition coverage 2026-08-14 06:31:33 +01:00
robbond d26bbfebdf fix(reasoning): support uncertainty-over propositions 2026-08-14 06:31:33 +01:00
robbond 35a5efa804 experiment: validate uncertainty proposition coverage live 2026-08-14 06:23:03 +01:00
robbond f94d47d813 docs: record uncertainty proposition coverage 2026-08-14 06:16:14 +01:00
robbond 1f361e2d93 fix(reasoning): preserve explicit uncertainty propositions 2026-08-14 06:16:14 +01:00
robbond 4e66e1ffbf experiment: validate clean proposition question live 2026-08-13 17:54:04 +01:00
robbond 802eb1cc16 docs: record proposition question formulation fix 2026-08-13 17:45:28 +01:00
robbond f955b875af fix(reasoning): clean proposition question formulation 2026-08-13 17:45:28 +01:00
robbond 4a434bb939 experiment: diagnose proposition question shape 2026-08-13 17:30:50 +01:00
robbond 60036ac495 experiment: validate proposition-specific decision question live 2026-08-13 17:09:17 +01:00
robbond 4767de30f7 docs: record audience question routing fix 2026-08-13 16:58:32 +01:00
robbond 8cca70774c fix(reasoning): narrow decision audience question routing 2026-08-13 16:58:32 +01:00
robbond ea7f227974 experiment: diagnose material-question specificity 2026-08-13 13:15:22 +01:00
robbond 229fbfbfd9 experiment: test decision chain across product launch 2026-08-13 13:04:09 +01:00
robbond 43b9e5a35c experiment: validate bounded structural context admission live 2026-08-13 12:56:20 +01:00
robbond a7ca8d712d docs: record bounded structural context admission 2026-08-13 12:49:42 +01:00
robbond d871a8c5c4 fix(reasoning): scope structural context admission 2026-08-13 12:49:42 +01:00
robbond 7f97268f68 experiment: define structural reasoning-context embedding 2026-08-13 10:26:54 +01:00
robbond 48de8b6ce7 experiment: choose reasoning-pattern inheritance boundary 2026-08-13 10:14:19 +01:00
robbond 32e668969e experiment: diagnose decision-pattern kind mismatch 2026-08-13 09:54:42 +01:00
robbond 3a4dda9daf experiment: validate prerequisite-aware question targeting live 2026-08-13 09:45:13 +01:00
robbond 3c6e436e89 docs: record prerequisite-aware question targeting 2026-08-13 09:36:10 +01:00
robbond 54bc48342b fix(reasoning): preserve ready material question target 2026-08-13 09:36:10 +01:00
robbond 854c3aa002 experiment: choose material-factor question alignment 2026-08-13 07:57:26 +01:00
robbond d1fe4ca087 experiment: diagnose material-factor question targeting 2026-08-13 07:49:37 +01:00
robbond 721f1ccb6e experiment: test materiality rule against real unresolved factor 2026-08-13 07:41:09 +01:00
robbond e8e6986d15 experiment: validate decision materiality rule live 2026-08-13 07:33:52 +01:00
robbond b671681ddc docs: record decision materiality rule 2026-08-13 07:24:18 +01:00
robbond 5ce5e7349b feat(reasoning): add decision materiality rule 2026-08-13 07:24:16 +01:00
robbond 5dcaed39df experiment: diagnose decision sufficiency rule
Read-only inspection of 8 files (prompt-builder.js, schema.js, utils.js,
apply-proposal.js, orchestrator.js, experiment-60b1.md, experiment-60b2.md,
current-handoff.md). No code changes.

Key findings:
- Prompt has no independent materiality/sufficiency rule (Rule 20 says null
  selectedQuestion when 'no consequential unresolved unknown' but doesn't define
  what makes an unknown non-consequential)
- Validator performs structural checks only, no evidence sufficiency evaluation
- No cross-option comparison logic in propagateResolvedChildEvidence
- Schema has no materiality or couldChangeDecision field
- 60B.1 resolved WITH 'no other material differences' cue; 60B.2 continued
  WITHOUT it, despite internally computing ~3.6 month payback

Classification: C — NO SUFFICIENCY RULE + CONTINUATION BIAS
Missing distinction: MATERIALITY / DECISION-RELEVANCE RULE
2026-08-13 07:15:01 +01:00
robbond 306f8392a1 experiment: test independent decision sufficiency 2026-08-13 06:47:10 +01:00
robbond 60a1befff7 experiment: test decision sufficiency on option graph 2026-08-13 06:39:12 +01:00
robbond 18979e229b experiment: test downstream option evidence update 2026-08-13 06:30:24 +01:00
robbond 4c25faaa01 feat(60A.7): add reusable decision-options fixture loading in test harness
- Load decisions-options fixture from committed JSON (tests/fixtures/
  pre-anchored-decision-options.json) instead of inline duplicate
- Add runPreAnchoredSimulationWithFixture() helper for decision-options
  mode tests
- Generalize anchor validation from savings-realism-specific to generic
  unresolved unknown check in reproduce-multi-turn-investigation.mjs
- Add experiment documentation (experiment-60a7.md) and handoff note
- All 63 harness tests pass; no production reasoning code changed
2026-08-13 06:24:12 +01:00
robbond 2016a024c5 experiment: rerun option consequence structure once 2026-08-13 06:08:23 +01:00
robbond 56a04ddd0e experiment: test option-specific consequence structure 2026-08-13 05:53:20 +01:00
robbond 3db6f40fdc experiment: validate native option structure live 2026-08-12 19:49:02 +01:00
robbond 57c9f2205e feat: add 'option' node kind and 'contained_in' edge — 60A.3
Implementation of Candidate B (unknown+option) from decision architecture
design in 60A.2. Adds two new primitives to the situation graph:

Schema (lib/graph/schema.js):
- SituationKind.option — a choice available within a decision context
- SituationRelationship.contained_in — links option → its parent unknown context

Prompt rules (lib/graph/prompt-builder.js):
- Section added: Decision Option Structure Rules with 5 numbered instructions
  governing when/how to create option nodes, link them via contained_in,
  attach consequences to specific options, and handle do-nothing alternatives.
  Explicitly forbids alternative_to edges and is_baseline/is_default flags.

Tests (446 new lines):
- schema.test.js: +300 — enum completeness updates, option kind validation,
  contained_in edge validation, native two-option graph fixture (~25 new tests)
- prompt-builder.test.js: +133 — focused rules verification for all 5 rule points,
  negative checks (no relocation/savings/example-specific wording, no alternative_to
  requirement, baseline flag prohibition context)

No production code paths affected beyond the two enum additions; existing node and
edge kinds remain unchanged. No Ollama calls, no live API calls.
2026-08-12 19:39:58 +01:00
robbond 6dd9afbf6b experiment: choose minimum decision representation 2026-08-12 18:34:18 +01:00
robbond e6cf973d2a exp 60A.1: read-only vocabulary adequacy diagnosis for alternatives and decisions
Diagnoses the root cause of the persistent pattern from 59B.2-59B.4
where explicit dual-option input collapsed into a single undifferentiated
unknown node. Concludes the graph vocabulary lacks first-class primitives
for options/decisions (not primarily a prompt issue). Identifies three
missing primitives: option node kind, decision node kind, alternative_of
edge type. Recommends ~25-line schema addition for 60A.2 implementation.
2026-08-12 18:19:29 +01:00
robbond ec32713c31 experiment: test explicit two-option decision structure 2026-08-12 17:52:38 +01:00
robbond 2cd346423d experiment: test do-nothing baseline representation 2026-08-12 17:42:25 +01:00
robbond 70688f91c9 experiment: test independent decision relevance 2026-08-12 17:18:18 +01:00
robbond 7f27fccadc experiment: test decision relevance and do-nothing baseline 2026-08-12 17:10:01 +01:00
robbond 8856e66147 experiment: test known-vs-uncertain consequence structure 2026-08-12 16:59:56 +01:00
robbond c3c5351143 experiment: test trade-off decomposition 2026-08-12 16:51:39 +01:00
robbond 8c5c4b5b75 experiment: test shift into trade-off reasoning 2026-08-12 16:37:52 +01:00
robbond 3f1bf7bcb0 experiment: test verified uncertainty resolution 2026-08-12 16:26:43 +01:00
robbond 52c529a688 experiment: test qualified evidence uncertainty status 2026-08-12 16:02:28 +01:00
robbond 201f259326 experiment: exercise interrogative question rendering live 2026-08-12 15:35:00 +01:00
robbond 6f2c09cd94 experiment: validate question-formulation fix live 2026-08-12 15:29:38 +01:00
robbond 870d6caa05 docs: record question-formulation fix 2026-08-12 15:07:13 +01:00
robbond fa42a2643a fix(graph): preserve grammar for question-like unknown labels 2026-08-12 15:02:56 +01:00
robbond b1914f5da7 experiment: test next-question formulation 2026-08-12 13:53:03 +01:00
robbond 20e4b58440 experiment: test evidence preservation with one uncertainty 2026-08-12 13:46:29 +01:00
robbond 32184694c5 experiment: test qualified-answer reasoning 2026-08-12 13:35:40 +01:00
robbond a78f3edb10 experiment: choose declaration recovery boundary 2026-08-12 13:27:02 +01:00
robbond a40a3e343e experiment: diagnose null semantic mutation path 2026-08-12 13:19:37 +01:00
robbond eaf3194752 experiment: observe direct meaning/action fields on anchored update 2026-08-12 12:09:32 +01:00
robbond 6a04d62800 docs: record accepted answer-meaning capture 2026-08-12 12:01:16 +01:00
robbond c4431997b1 tooling: capture accepted answer meaning directly 2026-08-12 12:00:18 +01:00
robbond d2891730af experiment: rerun incremental meaning on anchored uncertainty 2026-08-12 11:19:47 +01:00
robbond f23e2b2de0 docs: record update-only previous-question fix 2026-08-12 10:41:31 +01:00