Skip to content

Exploratory prototype: reproducible intelligence→COA relevance (SANDPIPER) - #65

Open
IanMayo wants to merge 3 commits into
mainfrom
claude/quantify-intelligence-forecasts-56fxjo
Open

Exploratory prototype: reproducible intelligence→COA relevance (SANDPIPER)#65
IanMayo wants to merge 3 commits into
mainfrom
claude/quantify-intelligence-forecasts-56fxjo

Conversation

@IanMayo

@IanMayo IanMayo commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

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 under src/, 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:

  • structural read-set — which knowledge source the scorer actually reads at each metric read-point (a thin projection over the same sparse channels channelAt reads);
  • behavioural removal — remove each K, recompile + rescore, observe which verdicts move.

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.ts runs and prints All proofs pass
  • No src/, schema/, fixtures/, or docs changes (git show --stat)
  • No unbanded scalars — every assessed answer is a 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:

  1. same inputs → identical world stamp + verdicts (twice)
  2. shuffled knowledge input order → identical world stamp (order-independent)
  3. read-set INERT ⇒ removal leaves that COA byte-identical (the two methods agree)
  4. computed footprint == a hand-derived relevance oracle reasoned from geometry alone

Honesty checklist

  • No unbanded scalar from an assessed source (G2)
  • Every relevance claim traces to a named knowledge source (G3)
  • No silent drops — inert intel is reported explicitly, never omitted (G4)
  • Frozen identifiers unchanged (SANDPIPER uses a separate namespace; Meridian untouched)
  • No schema / oracle / verdict / coverage-row change

Test plan

  • npx tsx scratch/relevance.tsAll proofs pass
  • npm run typecheck unaffected (scratch/ is outside the tsconfig include set)
  • Confirm the diff is a single new file under scratch/

🤖 Generated with Claude Code

https://claude.ai/code/session_01UwujcyJzqhjLXaFn39vojT


Generated by Claude Code

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
@github-actions

github-actions Bot commented Jul 18, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://DeepBlueCLtd.github.io/assay/pr-preview/pr-65/

Built to branch gh-pages at 2026-07-18 15:33 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

claude added 2 commits July 18, 2026 15:17
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants