Exploratory prototype: reproducible intelligence→COA relevance (SANDPIPER) - #65
Open
IanMayo wants to merge 3 commits into
Open
Exploratory prototype: reproducible intelligence→COA relevance (SANDPIPER)#65IanMayo wants to merge 3 commits into
IanMayo wants to merge 3 commits into
Conversation
A scratch demonstrator, run against the real engine (compile/score/ materialise/metrics, unchanged), exploring one shape for the "intelligence describes a world → which COAs does it actually affect" question: - a fresh world (Operation SANDPIPER) whose intelligence is authored to describe places, blind to any course of action; - three hand-drawn COAs laid over it afterwards; - the machine deciding, reproducibly, which intel each COA depends on — computed two ways (geometric read-set + behavioural removal) that must agree, and checked against a hand-derived relevance oracle. Surfaces a three-tier relevance partition (decisive / read-but-not- decisive / inert) and proves the decision is reproducible: identical world stamp under re-run and shuffled input order; inert ⇒ removal- invariant; footprint == oracle. Exploratory only — not a spec, not register-blessed, not on the DEC-11 research-first path. Lives under scratch/ so the exploration survives the session; promotion to a proper second vignette is a separate decision. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwujcyJzqhjLXaFn39vojT
|
Extend the exploratory prototype so relevance becomes a reproducible
function of (world, COA, enemy COA), not just (world, COA):
- add two adversary ScenarioCOAs with excursions (R-SEA surges FAC into
the southern approach; R-STRAITMINE mines Cobalt Strait), applied
through the real compile scenario overlay + SPEC-20 layered precedence;
- compute the relevance partition PER scenario (read-set + behavioural
removal), and surface intel whose decisiveness SHIFTS with the enemy COA:
* S3 (FAC threat) is decisive for SOUTH only under R-SEA — inert
otherwise (relevance appears);
* S4 (strait-obstacle assessment) is read under BASE but masked by
the enemy's own action under R-STRAITMINE (binding value becomes
the scenario, not our intel);
- add a worst-case (minimax) verdict table across scenarios (thesis C);
- extend the proofs: identical stamp+verdicts and read-set⇒removal
invariance now hold per scenario, plus a new proof that at least one
piece of intel changes decisiveness across scenarios.
Also separate the causeway rectangle from cobalt_strait so the causeway
state-read no longer lands inside the mined strait (a geometry artifact),
which additionally fixes an unrealistic C1 "violation" for the relief
column when the enemy mines a strait it never transits.
Exploratory only — unchanged engine, SANDPIPER namespace, no src/schema/
fixtures/docs changes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UwujcyJzqhjLXaFn39vojT
Make the scenario-dependent relevance seeable: a self-contained interactive page rendering the exact model the console proofs validate. - scratch/relevance.ts refactored to export computeModel() (a JSON- serialisable VizModel) and guard its console entry point, so the page and the proofs share one computation; - scratch/build-viz.ts renders the model into an operations-console page (map + relevance matrix + BASE/R-SEA/R-STRAITMINE toggle + verdict table + a "what changed" callout), theme-aware, no external assets; - scratch/check-viz.ts smoke-tests the built page via happy-dom (10/10: DOM populates, routes draw, toggling R-SEA makes S3 decisive, no JS errors); visually confirmed via headless Chromium. Every number on the page is computed by the real engine and pre-rendered (DEC-4 — never faked). Exploratory SANDPIPER vignette, not Meridian; scratch/*.png (verification screenshots) gitignored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwujcyJzqhjLXaFn39vojT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A scratch demonstrator (
scratch/relevance.ts) exploring one shape for the question "we take intelligence about a virtual world — how does the computer decide, predictably, which of it actually affects a course of action?" It authors a fresh world blind to any COA, draws COAs over it afterwards, and lets the real engine (compile/score/materialise/metrics, unchanged) decide relevance — reproducibly. This is exploration, not a spec.Slices
Not a SPEC. Exploratory prototype only — not on the DEC-11 research-first path. If this shape is worth keeping, promotion to a proper second vignette (research note → register candidate → spec-kit → fixtures + a first-class read-set seam output + oracle test) is a separate, deliberate decision.
Register impact
No new register decision. The prototype relies only on shipped behaviour (DEC-10 scorer-in-a-loop, G1 input-stamp determinism, G3 traceability). It introduces no new identifiers into the frozen Meridian namespace — SANDPIPER (
VC-SANDPIPER,S1..S10,P-NORTH/SOUTH/CENTER) is a separate, self-contained namespace, and touches nothing undersrc/,schema/,fixtures/, or the canonical docs.What it demonstrates
Operation SANDPIPER — ten intelligence statements, each describing a place (mined north channel, SAM arc, FAC waters, strait obstacles, causeway, storm surge, town population, radar, tide, uncharted shoal), authored with no route in mind. Three COAs are then drawn over the world (NORTH runs the mined channel; SOUTH avoids it; CENTER cuts the strait), and the machine decides which intel each depends on — two independent ways that must agree:
channelAtreads);The result is a three-tier partition, all computed: decisive (removing S1 mines flips NORTH's C1/C2
tight→robust, and provably does nothing to SOUTH — same fact, opposite relevance) · read-but-not-decisive (S4/S5 feed the calc but no verdict turns on them at current margins) · inert (S6 crosses no route; S7–S10 compile into channels no commitment reads — the honest "describes the world, cannot touch a COA" case).How to review
1. Quick check
npx tsx scratch/relevance.tsruns and printsAll proofs passsrc/,schema/,fixtures/, or docs changes (git show --stat)Band(G2)2. Walk the capability
There is no site/gallery/blog surface (deliberately — this is a console prototype). Read the top-of-file docstring, then run it. The five proofs at the bottom are the deliverable:
Honesty checklist
Test plan
npx tsx scratch/relevance.ts→All proofs passnpm run typecheckunaffected (scratch/is outside the tsconfig include set)scratch/🤖 Generated with Claude Code
https://claude.ai/code/session_01UwujcyJzqhjLXaFn39vojT
Generated by Claude Code