Skip to content

SIS elevation: real executor, persistent dreaming, executable boards, 81-agent rewrite, cloud autonomy#24

Draft
frankxai wants to merge 20 commits into
mainfrom
claude/starlight-sis-docs-eclr0l
Draft

SIS elevation: real executor, persistent dreaming, executable boards, 81-agent rewrite, cloud autonomy#24
frankxai wants to merge 20 commits into
mainfrom
claude/starlight-sis-docs-eclr0l

Conversation

@frankxai

@frankxai frankxai commented Jun 22, 2026

Copy link
Copy Markdown
Owner

What this PR is now

Two passes on one branch: (1) the engineering-first front door (demo, living metrics, README rebuild), then (2) the god-mode elevation — wiring the intelligence the docs described but the code never executed. All work is operational-tier; no substrate-gated files (SIP/SIS/ALLIANCE/STACK/VOICES/VERTICALS/REGISTRY) were touched.

Pass 1 — Engineering-first front door

  • npm run demo: four real engines (retrieval / temporal / contradiction / orchestration) with deterministic output, quoted in the README; guarded by a CI smoke test.
  • scripts/sync-metrics.mjs: living metrics derived from source into README markers + metrics/current.json; --check wired into verify.
  • README rebuilt engineering-first; Estate Factory / Web4 GTM relocated to docs/strategic/estate-factory-web4-positioning.md.

Pass 2 — The elevation (recon → fix → prove)

Three recon sweeps found the system was a tested framework whose intelligence claims were prose: stub executor, orphaned swarm pool, dead board-consensus code, theater Queen metrics, non-persisting dreaming, five silent memory defects, and 81/144 boilerplate agents.

Memory integrity (2e71930) — canonical atom text (content ?? insight ?? wish; runtime atoms were invisible to consolidation), Veil-on-write (secrets always scrubbed; PII opt-in), duplicate-id dedupe report, gateway/MCP store unification with privacy-preserving mirror writes.

Execution spine (abd54d1) — real Claude executor (cli claude -p / Anthropic API / stub backends, in-role agent prompts, graceful degradation); starlight orchestrate --live; npm run demo -- --live. The real-backend integration test passed with a live model call.

Dreaming that persists (f039ae3) — promotions actually land in the wisdom vault behind an idempotency ledger; insights materialize as atoms; contradictions written; POSIX cron + runtime-vault default.

Swarm bridge + executable boards (03a68ad) — starlight starlight-swarm run (approval-gated) bridges the planner into the real bounded execution pool; starlight board runs the 5-vector panel through the previously dead consensus math and emits verdict JSON to docs/boards/ (dry-run never fabricates votes); provider detection is cross-platform.

Queen realization (576dbaf) — MEASURE parses scorecard contents into per-lane deltas; LEARN derives proposals from measured data (hardcoded proposals deleted); new queen verify checks doctrine falsifiers against the actual ledger; visual claims made honest.

Cloud autonomy (e7b2ce0) — CI now builds site + console and validates agents; nightly metrics PR, weekly dreaming PR, daily npm-registry drift check (it will open an issue on first run — registry serves 6.0.1 vs repo 8.3.0, which is the point); release.yml publishes on v* tags once NPM_TOKEN is set; PR site-build check.
Arming commands in docs/ops/cloud-autonomy.md:
gh secret set NPM_TOKEN · gh secret set VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID

Agent quality (ebbf18a + 5921217) — AGENT_TEMPLATE.md contract + v92 distinctiveness ratchet with shrink-only ledgers, then a 10-batch swarm rewrote all 81 thin agents into real domain playbooks (each adversarially verified): crypto = analysis-only, health = model-never-diagnose, legal = draft-never-advise, dive = never override tables. Thin ledger: 81 → 0.

Site surfaces (379da3e) — /agents, /skills, /metrics render the live registries and the metrics ledger, derived at build time.

Truth pass (f2c8af4) — metrics re-derived (21,495 LOC / 815 tests), nine new STATUS.md Working rows with proof paths.

Verification

Full gate green at head: npm run lint · npm run build · npm run metrics -- --check · npm run agents:harness-check · complete npm test (operational + substrate + v01 evals, 815 cases) · site + console builds. ~67 new test cases across v92–v98 suites.

Known non-blocking follow-ups: AGENT_REGISTRY.md signature-command column slightly stale for the 8 IS-layer rows; Queen delta heuristic can pair non-comparable scorecard buckets (labeled as heuristic); sqlite-vec semantic layer remains roadmapped.

🤖 Generated with Claude Code

…trics

The repo had a real 20k-LOC tested core buried under internal go-to-market
talk, and undersold itself ("src under 3,000 lines" when it's 20,440). This
makes the build-out and intelligence the front door, and proves it works.

- examples/demo.ts (+ npm run demo): runs the four real engines —
  retrieval (FTS5/bm25), temporal (90-day half-life), contradiction
  (cross-vault), orchestration (routing+synthesis) — deterministic, no
  network. Guarded by test/demo-smoke.test.ts.
- scripts/sync-metrics.mjs (+ npm run metrics / --check): recomputes
  agents/skills/LOC/test-cases from source and writes them into the README
  between markers + metrics/current.json. Wired into `verify` so claims
  can't drift. Living truth-lock per the Metrics Truth Rule.
- README rebuilt engineering-first: see-it-work demo output, live metrics
  block, honest quickstart, the engineering depth with file refs and the
  corrected 20,440 LOC, new code-built architecture.svg + embedded visuals.
- Relocated the Estate Factory / Web4 / Trinity go-to-market prose to
  docs/strategic/estate-factory-web4-positioning.md (nothing lost; one
  pointer remains). No substrate-gated files touched.

All gates green: lint, build, agents:harness-check, metrics --check,
operational + substrate + v01-eval suites.
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4ac742f0-d81c-4100-97f7-e3f2abbd089c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/starlight-sis-docs-eclr0l

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the repository's documentation and introduces a live engine demo (examples/demo.ts) alongside a dynamic metrics synchronization script (scripts/sync-metrics.mjs) to prevent documentation drift. Feedback on these changes highlights opportunities to improve robustness: wrapping the demo's temporary directory cleanup in a try...finally block to prevent resource leaks on failure, refining the test-case regex in the metrics script to avoid false positives, and checking for execution errors from spawnSync in the smoke test before asserting on the exit status.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread examples/demo.ts
Comment on lines +84 to +148

console.log(c.bold("\n✦ Starlight Intelligence System — live engine demo"));
console.log(c.dim(` temp vault: ${dir}`));

// Persist atoms as canonical per-vault JSONL (one file per vault).
const byVault = new Map<string, Atom[]>();
for (const a of ATOMS) {
const list = byVault.get(a.vault) ?? [];
list.push(a);
byVault.set(a.vault, list);
}
for (const [vault, items] of byVault) {
writeFileSync(join(dir, `${vault}.jsonl`), items.map((i) => JSON.stringify(i)).join("\n") + "\n");
}
console.log(c.dim(` wrote ${ATOMS.length} atoms across ${byVault.size} vaults\n`));

// ── 1. Retrieval ───────────────────────────────────────────
banner(1, "Retrieval — FTS5 / bm25 over the JSONL vaults");
const index = new RetrievalIndex(dbPath);
const n = index.rebuildFromVaults(dir);
console.log(c.dim(` indexed ${n} entries`));
const query = "FTS5 index retrieval ranking";
console.log(` query: ${c.yellow(`"${query}"`)}`);
for (const r of index.search(query, { limit: 3 })) {
console.log(` ${c.green(r.score.toFixed(2))} ${c.dim(`[${r.entry.vault}]`)} ${r.entry.content}`);
}
index.close();

// ── 2. Temporal ────────────────────────────────────────────
banner(2, "Temporal — staleness + 90-day confidence half-life");
const temporal = new TemporalEngine();
const reports = temporal.scanVaults(dir);
const stats = temporal.getStalenessStats(reports);
console.log(c.dim(` ${stats.total} entries · ${stats.healthy} healthy · ${c.yellow(String(stats.stale))} stale · avg confidence ${stats.avgConfidence}`));
for (const r of reports.filter((x) => x.isStale)) {
console.log(` ${c.yellow("STALE")} ${c.dim(`(${Math.round(r.daysSinceConfirmed)}d, ${r.originalConfidence}→${r.currentConfidence})`)} ${r.content}`);
}
console.log(c.dim(" (old knowledge decays unless reconfirmed — surfaced, not silently trusted)"));

// ── 3. Contradiction ───────────────────────────────────────
banner(3, "Contradiction — cross-vault conflict detection");
const detector = new ContradictionDetector();
const conflicts = detector.scanVaults(dir, { minSimilarity: 0.6 });
if (conflicts.length === 0) console.log(c.dim(" none found"));
for (const x of conflicts) {
console.log(` ${c.yellow("CONFLICT")} similarity ${c.green(x.similarity.toFixed(2))}`);
console.log(` ${c.dim(`[${x.entryA.vault}]`)} ${x.entryA.content}`);
console.log(` ${c.dim(`[${x.entryB.vault}]`)} ${x.entryB.content}`);
}

// ── 4. Orchestration ───────────────────────────────────────
banner(4, "Orchestration — routing + pattern + synthesis");
const sis = new StarlightIntelligence({ memoryPath: dir });
sis.initialize();
const intent = "Review the code for security issues and quality before release";
console.log(` task: ${c.yellow(`"${intent}"`)}`);
const routed = sis.routeTask(intent);
console.log(c.dim(` routed → ${routed.slice(0, 3).map((r) => `${r.agent.name} (${r.score})`).join(", ")}`));
const result = await sis.orchestrate({ intent });
console.log(` pattern: ${c.green(result.pattern)} complexity: ${c.green(String(result.complexity))}/10 agents: ${c.green(String(result.executions.length))} confidence: ${c.green(result.confidence.toFixed(2))} recalled: ${c.green(String(result.memoryRecalled))}`);
console.log(c.dim(` (default executor is a no-LLM stub — wire setExecutor() to a model for real synthesis)`));

console.log(c.green("\n✓ Four engines, real output, zero mocks. This is the operational core.\n"));
rmSync(dir, { recursive: true, force: true });
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The temporary directory created by mkdtempSync is not cleaned up if any error occurs during the execution of main(). Wrapping the main logic in a try...finally block ensures that the temporary directory is always removed, preventing resource leaks in the OS temp folder.

  try {
    console.log(c.bold("\n✦ Starlight Intelligence System — live engine demo"));
    console.log(c.dim(`  temp vault: ${dir}`));

    // Persist atoms as canonical per-vault JSONL (one file per vault).
    const byVault = new Map<string, Atom[]>();
    for (const a of ATOMS) {
      const list = byVault.get(a.vault) ?? [];
      list.push(a);
      byVault.set(a.vault, list);
    }
    for (const [vault, items] of byVault) {
      writeFileSync(join(dir, `${vault}.jsonl`), items.map((i) => JSON.stringify(i)).join("\n") + "\n");
    }
    console.log(c.dim(`  wrote ${ATOMS.length} atoms across ${byVault.size} vaults\n`));

    // ── 1. Retrieval ───────────────────────────────────────────
    banner(1, "Retrieval — FTS5 / bm25 over the JSONL vaults");
    const index = new RetrievalIndex(dbPath);
    const n = index.rebuildFromVaults(dir);
    console.log(c.dim(`  indexed ${n} entries`));
    const query = "FTS5 index retrieval ranking";
    console.log(`  query: ${c.yellow(`"${query}"`)}`);
    for (const r of index.search(query, { limit: 3 })) {
      console.log(`    ${c.green(r.score.toFixed(2))}  ${c.dim(`[${r.entry.vault}]`)} ${r.entry.content}`);
    }
    index.close();

    // ── 2. Temporal ────────────────────────────────────────────
    banner(2, "Temporal — staleness + 90-day confidence half-life");
    const temporal = new TemporalEngine();
    const reports = temporal.scanVaults(dir);
    const stats = temporal.getStalenessStats(reports);
    console.log(c.dim(`  ${stats.total} entries · ${stats.healthy} healthy · ${c.yellow(String(stats.stale))} stale · avg confidence ${stats.avgConfidence}`));
    for (const r of reports.filter((x) => x.isStale)) {
      console.log(`    ${c.yellow("STALE")} ${c.dim(`(${Math.round(r.daysSinceConfirmed)}d, ${r.originalConfidence}${r.currentConfidence})`)} ${r.content}`);
    }
    console.log(c.dim("    (old knowledge decays unless reconfirmed — surfaced, not silently trusted)"));

    // ── 3. Contradiction ───────────────────────────────────────
    banner(3, "Contradiction — cross-vault conflict detection");
    const detector = new ContradictionDetector();
    const conflicts = detector.scanVaults(dir, { minSimilarity: 0.6 });
    if (conflicts.length === 0) console.log(c.dim("  none found"));
    for (const x of conflicts) {
      console.log(`  ${c.yellow("CONFLICT")} similarity ${c.green(x.similarity.toFixed(2))}`);
      console.log(`    ${c.dim(`[${x.entryA.vault}]`)} ${x.entryA.content}`);
      console.log(`    ${c.dim(`[${x.entryB.vault}]`)} ${x.entryB.content}`);
    }

    // ── 4. Orchestration ───────────────────────────────────────
    banner(4, "Orchestration — routing + pattern + synthesis");
    const sis = new StarlightIntelligence({ memoryPath: dir });
    sis.initialize();
    const intent = "Review the code for security issues and quality before release";
    console.log(`  task: ${c.yellow(`"${intent}"`)}`);
    const routed = sis.routeTask(intent);
    console.log(c.dim(`  routed → ${routed.slice(0, 3).map((r) => `${r.agent.name} (${r.score})`).join(", ")}`));
    const result = await sis.orchestrate({ intent });
    console.log(`  pattern: ${c.green(result.pattern)}  complexity: ${c.green(String(result.complexity))}/10  agents: ${c.green(String(result.executions.length))}  confidence: ${c.green(result.confidence.toFixed(2))}  recalled: ${c.green(String(result.memoryRecalled))}`);
    console.log(c.dim("  (default executor is a no-LLM stub — wire setExecutor() to a model for real synthesis)"));

    console.log(c.green("\n✓ Four engines, real output, zero mocks. This is the operational core.\n"));
  } finally {
    rmSync(dir, { recursive: true, force: true });
  }

Comment thread scripts/sync-metrics.mjs Outdated
const files = [...walk(path.join(root, 'src')), ...walk(path.join(root, 'test'))].filter((f) => f.endsWith('.test.ts'));
let cases = 0;
for (const f of files) {
const m = readFileSync(f, 'utf8').match(/\b(it|test)\s*\(/g);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The current regular expression \b(it|test)\s*\( is prone to false positives because it matches any occurrence of it( or test( in comments, strings, or other helper functions. Restricting the match to require a string literal as the first argument (e.g., \b(it|test)\s*\(\s*['"]`) makes the test case counting significantly more robust.

Suggested change
const m = readFileSync(f, 'utf8').match(/\b(it|test)\s*\(/g);
const m = readFileSync(f, 'utf8').match(/\b(it|test)\s*\(\s*['"`]/g);

Comment thread test/demo-smoke.test.ts
{ cwd: REPO_ROOT, encoding: "utf-8", timeout: 60_000 },
);

assert.equal(run.status, 0, `demo exited non-zero:\n${run.stderr}`);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If spawnSync fails to execute (for example, if the executable is not found or a timeout occurs), run.error will be populated and run.status will be null. Checking run.error first and throwing it provides a much clearer error message and prevents confusing assertion failures.

Suggested change
assert.equal(run.status, 0, `demo exited non-zero:\n${run.stderr}`);
if (run.error) throw run.error;
assert.equal(run.status, 0, `demo exited non-zero:\n${run.stderr}`);

claude added 11 commits June 22, 2026 08:12
…check

Three robustness fixes from Gemini Code Assist on PR #24:
- examples/demo.ts: wrap the run in try/finally so the temp vault is removed
  even if an engine throws (no temp-dir leak).
- scripts/sync-metrics.mjs: require a string-literal first arg in the test-case
  regex (`it("…"` / `test("…"`), eliminating false positives from comments,
  strings, and helper calls. Count corrected 841 → 760 (regenerated into the
  README block + metrics/current.json).
- test/demo-smoke.test.ts: throw run.error before asserting exit status so a
  spawn/timeout failure surfaces clearly instead of a confusing null-status
  assertion.

Gates green: lint, build, metrics --check, operational suite, demo smoke.
…store unification

Fixes the four silent-corruption defects from the 2026-07-02 memory recon:

- D1 (consolidation blindness): contradiction.ts + dreaming.ts read only
  insight|wish, so every runtime atom written with `content` (MCP
  sis_append_entry, VaultMemory) was invisible to promotion, contradiction
  detection, and decay. New src/atom.ts is the single text-resolution point
  (content ?? insight ?? wish); both readers now use it.
- D2 (split-brain stores): VaultMemory.rememberInVault mirrors a flat atom
  into <storage>/vaults/<vault>.jsonl — the store MCP + retrieval read — so
  gateway/library writes surface in every client. Private-tagged entries are
  NOT mirrored, preserving the gateway privacy model's structural
  disjointness. Mirror is best-effort; the event store stays write-ahead.
- D4 (duplicate-id total outage): rebuildFromVaults keeps throw-by-default
  (silent replacement stays impossible) and adds {onDuplicate:'skip'} with a
  getLastDuplicates() report for operational callers that prefer a degraded
  index over zero searchable memory.
- D5 (no sanitization on ingest): The Veil (SanitizationGateway) now runs on
  both write paths — sis_append_entry and rememberInVault. Secrets are always
  scrubbed; PII scrubbing is opt-in (STARLIGHT_SCRUB_PII=1) because a personal
  memory substrate legitimately stores contact details; STARLIGHT_SANITIZE=off
  disables for debugging.

New regression suite: test/v93-memory-integrity.test.ts (10 tests).
Full suite green (operational + substrate + v01 evals).
The 6-pattern/7-layer orchestration engine has run on a deterministic stub
since inception — the framework never actually called a model. This wires
the real execution spine, opt-in so demos/tests/CI stay reproducible:

- src/executors/claude-executor.ts: AgentExecutor with three backends —
  cli (headless `claude -p` subprocess, cross-platform PATH detection, no
  hardcoded Windows paths), api (Anthropic Messages API over bare fetch,
  zero new deps), stub (deterministic fallback with one-time warning).
  Selection: explicit > STARLIGHT_EXECUTOR env > auto (api key → cli probe
  → stub). Each call injects the routed agent's in-role system prompt
  composed from its AgentDefinition. Failures degrade to stub output with
  a diagnostic suffix; a bad call can never sink an orchestration.
- src/index.ts: env-driven pickup (STARLIGHT_EXECUTOR=cli|api|auto) +
  public re-exports (createClaudeExecutor, detectBackend, atom helpers).
- CLI: `starlight orchestrate <intent> --live` switches the run onto the
  real backend and prints which one was detected.
- examples/demo.ts: `npm run demo -- --live` does the same for step 4;
  default remains offline-deterministic.
- test/v94-executor.test.ts (10 tests): backend detection order, in-role
  prompt composition, transport seam, Messages API request shape via
  injected fetch, degradation shape, full orchestration through a mocked
  live executor, and a real-backend integration test (runs when
  ANTHROPIC_API_KEY or the claude CLI is present — it is on this box, and
  passed with a live call). v93+v94 wired into test:substrate.
The count guards (v87) prove agents are registered — not that they are real.
81/144 agents are identical auto-scaffolded boilerplate (the generic
Domain Assessment / Context Compilation / Execution Routing / Validation
Check quadruple) and all 63 remaining pre-template agents carry
filename≠name or voice-as-description frontmatter defects.

- agents/AGENT_TEMPLATE.md: the playbook contract — name==filename stem,
  voice must be a VOICES.md archetype (free-text description moves to
  role:), a mandatory domain-playbook section, explicit boundaries, and a
  ban on the four generic scaffold capability names.
- test/v92-agent-quality.test.ts + test/_fixtures/v92-agent-quality-ledger.json:
  a ratchet, not a purge — today's 81 thin agents and 63 legacy-named
  agents are ledgered; the ledgers only shrink. Any agent outside them
  must fully conform; a listed agent that gets fixed must be delisted
  (the test fails otherwise, locking the win). New thin agents are
  impossible to merge.
- Counters (harness, metrics, repo.ts, validate-agents) exclude
  AGENT_TEMPLATE.md in lockstep, keeping the derived count at 144.

v92 wired into test:substrate. Harness + v87 + metrics counters verified.
…tent

The dream cycle identified promotions/contradictions/insights but persisted
nothing; the log showed promotions:4 forever with nothing moving to wisdom.
Now: promotions append to wisdom.jsonl with provenance behind a
.promotion-ledger.json idempotency guard (repeat runs never re-promote);
extracted insights materialize as atoms with content-hash ids; contradictions
write to contradictions.jsonl; VAULT_DIR prefers ~/.starlight/vaults when it
exists (--vault-dir to override); posix cron script added. 6 tests including
the run-twice-no-dupes guarantee. Lane built by Opus, adversarially verified.
createSwarmPlan (planner, CLI-wired) and runSwarm (real bounded claude -p
pool, test-only) never touched; board consensus math was dead code. Now:
- executeSwarmPlan bridges SwarmPacket→SwarmTask; `starlight starlight-swarm
  run <goal>` is approval-gated (--approve) with a deterministic dry-run
  runner by default and --live for real execution; results flow through
  appendSwarmAudit.
- src/board.ts runBoard(): fans a proposal to the 5 board vector personas
  via the executor, parses votes defensively, tallies through the previously
  orphaned calculateModelConsensus + performStarlightBoardReview, and emits
  schema'd verdict JSON + md to docs/boards/. Dry-run mode prints panel
  prompts and writes UNRESOLVED — never fabricates votes. `starlight board`.
- Provider detection branches on process.platform (which/PATH on POSIX);
  the hardcoded Windows path no longer poisons Linux hosts.
- commands/starlight-board.md pointer heals the CLAUDE.md reference.
11 tests. Lane built by Opus, adversarially verified.
…, verify vs ledger

cmdMeasure listed scorecard filenames; cmdLearn emitted hardcoded proposals
gated on a filename containing 'grok'; the ledger claimed visuals that were
never rendered. Now: MEASURE parses scorecard JSON contents into per-lane
metric tables with deltas + a machine-readable summary; LEARN derives
proposals from measured deltas with evidence numbers (hardcoded proposals
deleted); new `queen verify` checks doctrine falsifiers against actual
ledger.jsonl/state.json data; visual language downgraded to the honest
'emits a prompt'; lastDerivedFrom deduped and capped. Driver stays
dependency-free plain node. 15 tests (read-only verbs proven non-mutating
by state hashing). Lane built by Sonnet, adversarially verified.
All scheduling was Windows Task Scheduler on one machine; CI never built the
web surfaces; npm publish was manual (registry already served 6.0.1 against
an 8.x repo once). Now:
- harness-check.yml: web job (site + console builds) + validate-agents step.
- nightly-metrics.yml: sync-metrics refresh via PR (bot/metrics-refresh).
- weekly-dreaming.yml: consolidation PR (bot/dreaming) — never direct-push.
- registry-drift.yml: daily npm-view vs package.json check that opens/updates
  a 'npm registry drift' issue (it WILL fire on first run — real drift exists
  today: registry 6.0.1 vs repo 8.3.0; that is the point).
- release.yml: publish on v* tags, dormant until NPM_TOKEN is set (preflight
  pattern mirrored from vercel-deploy.yml).
- vercel-deploy.yml: PR build-check job so site breakage fails PRs even with
  no deploy secrets.
- docs/ops/cloud-autonomy.md: the arming table + exact gh secret set commands.
Also: npm run dream script; v95-v98 suites wired into test:substrate.
Lane built by Sonnet, adversarially verified.
The registries were airtight but invisible — the site described the system
without showing it. Three build-time data pages now read the repo directly:
- /agents: 144 agents from agents/**/*.md + AGENT_REGISTRY.md rows, grouped
  by family with anchor nav.
- /skills: the 83 activation rules from skills/skill-rules.json, grouped by
  domain with trigger keywords and priority.
- /metrics: metrics/current.json as the public living ledger — value,
  source, last_verified badge per metric.
Wired into the header nav (desktop + mobile). Existing accent/hero/card
conventions reused; no new dependencies. Site build + lint pass; routes
emit static with 1h revalidate. Lane built by Sonnet.
The 10-batch Sonnet swarm rewrote every scaffold-boilerplate agent per
agents/AGENT_TEMPLATE.md, each batch adversarially verified (10/10 PASS):
adapters(10) assets-dist(12) crypto(6) health(8) legal(7) marine(7) ops(9)
research(7) space(7) is-layer(8). Every rewrite carries a genuine domain
playbook (framework primitives, biomarkers, Nice classes, TLE/SGP4, link
budgets, 3-2-1 backup...), a domain-terms reasoning protocol, and explicit
Boundaries — crypto agents are analysis-only (no execution, no advice
framing), health agents model-never-diagnose, legal agents draft-never-
advise, dive agents never override tables/computers. Frontmatter now
conforms across the board: name==filename, voice is a VOICES.md archetype,
description moved to role:.

v92 ratchet ledger regenerated: thin 81 -> 0. Gates green: v92, v87
registry symmetry, harness (144 agents / 83 skills), validate-agents
144/144. Known non-blocking follow-up: AGENT_REGISTRY.md signature-command
column is slightly stale for the 8 IS-layer rows vs their richer rewrites.
- README metrics block + prose re-derived: 21,495 LOC / 76 files, 815 test
  cases / 74 files (was 20,440 / 760 before the elevation), verified
  2026-07-03. Stale hand-typed LOC figures replaced with live-count refs.
- STATUS.md: nine new Working rows with proof paths — dreaming persistence,
  real executor, swarm run bridge, executable boards, queen measurement,
  memory integrity, agent quality ratchet (thin ledger at 0), scheduled
  cloud autonomy.
- test/v76.test.ts excludes AGENT_TEMPLATE.md from registry coverage, in
  lockstep with the other counters.
Full gate green: lint, build, metrics --check, complete npm test.
@frankxai frankxai changed the title Evolve SIS front door: engineering-first README, live demo, living metrics SIS elevation: real executor, persistent dreaming, executable boards, 81-agent rewrite, cloud autonomy Jul 3, 2026
Closes the two non-blocking follow-ups flagged in the elevation PR body.

F1 — Queen computeDeltas() grouped metrics by name alone, so it could pair
structurally non-comparable buckets (a per-vault byVault.horizon against an
aggregate results.scorable26_50pct_rule) into a misleading cross-bucket
delta that cmdLearn could cite as evidence. Now groups by (container, name):
a delta is only computed between sibling configurations under one parent.
The legitimate results.lexical→results.hybrid retrieval-method delta (+61%
precision@10) survives; the byVault↔results cross pairing is gone. Two new
v98 tests assert both against the real repo scorecards via the structured
MEASURE_SUMMARY_JSON.

F2 — AGENT_REGISTRY.md signature-command column for the 8 IS-layer rows was
stale after the agent rewrites. Each is now set to the primary command the
rewritten agent actually declares in its Activates line: Self /discover-genius,
Brand /define-vision, Wealth /wealth-dpi, Code /arco, Voice&Video
/sip-attest-audio, Family /map-relationships, Spiritual /private-public-split
(Creator + Health already matched). No invented commands.

Gates green: lint, full npm test (817 cases), validate-agents 144/144,
harness, v76/v87 registry symmetry, metrics --check.
@vercel

vercel Bot commented Jul 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
site Ready Ready Preview, Comment Jul 6, 2026 4:44pm

…LI workflow

The site had two overlapping deploy paths that caused confusion (the *.vercel.app
preview URL read as production). Cleaned to one model:

- DELETE .github/workflows/vercel-deploy.yml — the dormant, secret-gated CLI
  deploy pipeline (a 2026-04 stopgap when native integration briefly broke). It
  skipped green without VERCEL_* secrets and duplicated the harness-check web
  build gate. Deploys are now owned end-to-end by Vercel's native Git
  integration: previews on PR, production on main → starlightintelligence.org,
  zero repo secrets. Confirmed live (PR #24 preview deployed this cycle).

- PRESERVE + STRENGTHEN the OpenClaw v7.5 HIGH-1 supply-chain control instead of
  losing it with the workflow: test/v75.test.ts v7.5.1.7.4 generalized from
  "vercel-deploy.yml SHA-pins its actions" → "every .github/workflows/*.yml
  SHA-pins its uses: to 40-char SHAs". Pinned the last two floating tags
  (sip-starter-release.yml checkout@v6/setup-node@v6 → their SHAs, harvested from
  the deleted workflow). All 8 remaining workflows pass; supply-chain surface
  shrank and coverage widened.

- Docs/badge truth pass: README deploy badge → harness-check CI badge (the real
  always-on gate); DEPLOY.md rewritten to the native-integration model with the
  manual `vercel --prod` fallback; docs/ops/cloud-autonomy.md drops the retired
  workflow row + its arming section; STATUS.md deploy row added; ATTESTATIONS.md
  gets a dated retirement entry (append-only, superseding the v7.5.1 record
  honestly — the .deploy-log attestation artifact retires with the workflow, the
  SHA-pin control is broadened). release.yml comment de-references the deleted file.

Operational-tier only; no substrate-gated files. Gates green: generalized v75,
full npm test (817), lint, metrics --check, harness.
Matches the pattern already used by nightly-metrics/registry-drift/
weekly-dreaming/sip-starter-release. Lets a maintainer force a run
without a new commit — useful for diagnosing why CI wasn't firing on
recent pushes to this branch.
claude added 4 commits July 5, 2026 03:25
…real

Post-elevation adversarial audit found the W3 "dreaming persists" claim was
overstated: applyDreamResult unconditionally skipped every promotion whose
source id started with "md:" — and the repo's only real vault format is
Markdown, not JSONL atoms. Result: 0 promotions and 0 contradictions ever
fired against the actual committed memory/vaults/, despite green tests
(which only covered synthetic JSONL fixtures).

- DreamResult.promotions now carries its own source content inline, so
  applyDreamResult no longer needs a JSONL-only atom-index lookup and no
  longer skips md:*-sourced promotions. Verified end-to-end: two genuine
  cross-vault promotions now persist to wisdom.jsonl, idempotently (a second
  npm run dream promotes 0 new).
- Section-0 (the pre-heading chunk of each vault .md file) had its YAML
  frontmatter stripped before comparison — the near-identical
  retention/writers/readers boilerplate every vault shares was producing
  false-positive promotions on structure, not content.
- ContradictionDetector.scanVaults() defaulted minSimilarity to 0.6, which
  real MD-doc-chunk content can never reach (ceiling ~0.22 unboosted, ~0.47
  boosted). Added a calibrated 0.4 threshold for dreaming's use and a new
  excludeVaults option so "wisdom" (whose entries are now verbatim promoted
  copies of their own source) doesn't trigger a guaranteed self-match against
  its own origin.
- New src/contradiction.test.ts — this file had zero dedicated coverage
  before. Proves scanVaults respects minSimilarity, never pairs same-vault
  entries, and excludeVaults works as the wisdom-exclusion mechanism relies on.
- test/v80-platform-prompts.test.ts's vault-count derivation counted every
  file in memory/vaults/ as a vault — a latent break that would have fired
  the moment weekly-dreaming.yml produced its first real output. Excluded the
  two artifact filenames (.promotion-ledger.json, contradictions.jsonl) that
  aren't conceptual vaults.

All gates green: lint, build, full test suite (860 tests), metrics --check.
getSwarmAuditLogPath() defaulted to $HOME/Starlight-Intelligence-System/
private/voice-operator/logs/swarm.jsonl regardless of cwd — a bug found when
an audit subagent's starlight-swarm test run wrote a real file outside the
actual project checkout (harness safety layer correctly flagged the
subagent's subsequent out-of-scope deletion attempt; investigated
independently and confirmed no harm — the file was just throwaway dry-run
plan logs).

private/voice-operator/logs/ is already the established project-relative
convention every other voice-operator log uses (routing.jsonl, packets/,
per docs/ops/HANDOVER-2026-04-28.md — gitignored, populated at runtime).
The swarm audit log's $HOME default was the one inconsistent path in this
family. Now defaults to cwd-relative; explicit homeDir override (used by
test/v96-swarm-bridge.test.ts's sandboxing) is unchanged.

Verified: starlight-swarm run from the project root now writes to
./private/voice-operator/logs/swarm.jsonl, confirmed absent from the old
$HOME-based location. test/v96-swarm-bridge.test.ts (12 tests) still green.
…ders

Audit finding: isThin() is a fingerprint match against one dead template's
exact wording — a rewrite that reworded the four banned headers while
keeping generic filler prose would pass undetected. Zero real content check
existed beyond that fingerprint plus frontmatter mechanics.

Added a cross-agent playbook-similarity check: every pair of agents' "What
this agent knows" section body (the section AGENT_TEMPLATE.md calls "the
section that makes the agent real") is compared via the same trigram-Jaccard
measure ContradictionDetector uses. Calibrated against the real corpus: the
current max cross-agent similarity is 0.0294 (two related health agents);
the gate fires at 0.15, ~5x margin above that ceiling while still catching
copy-paste-with-nouns-swapped reuse.

Also fixed starlight-energy-cost.md and starlight-energy-buyer.md — both
had voice: set to a free-text sentence instead of a VOICES.md archetype
(the exact defect class v92 checks for), surfaced by a 12-agent spot-check
during the same audit. Not part of the 81-agent rewrite (self-admitted v0.1
placeholders), but broken nonetheless. Moved the description into role: and
set voice: protocol-defender, matching their refusal-based, anti-pattern-
flagging design — consistent with the frontmatter shape already established
across the rewritten agents (e.g. starlight-crypto-allocation.md).

Verified: v92 (6 tests), v87-agent-registry, v76, agents:harness-check
(144/83), and validate-agents.mjs all green.
engine_loc 21,495 -> 21,508, test_cases 817 -> 825, test_files 74 -> 75
(the new src/contradiction.test.ts + expanded v92/v95/v80 coverage from
this pass). STATUS.md rows for dreaming persistence and the agent quality
ratchet now describe what's actually true post-fix, not what was true
before the audit found the gaps.
@frankxai

frankxai commented Jul 6, 2026

Copy link
Copy Markdown
Owner Author

Queen review verdict — NEEDS-BOARD-REVIEW + rebase (largest open change to the system's spine)

Classification: SUBSTRATE-adjacent. The body claims "no substrate-gated files touched" and that's true for SIP/SIS/ALLIANCE/STACK/VOICES/VERTICALS/REGISTRY — but the PR appends to ATTESTATIONS.md (attestation surface), rewrites 86 agent files (the "81-agent rewrite" — taxonomy-scale), replaces the deploy path (deletes vercel-deploy.yml), and arms cloud autonomy (nightly-metrics PRs, weekly-dreaming PRs that write to the wisdom vault, daily registry-drift issues, tag-triggered npm publish once NPM_TOKEN is set). 143 files, +9.4k/−6k. This is exactly the shape of change the board exists for.

Hard blockers before any merge decision:

  1. CONFLICTING with main (README, workflows, metrics all overlap with chore(ci)(deps): bump the gha-actions group across 1 directory with 2 updates #26/fix(docs): repair broken agent-blueprint links, populate empty metrics ledger #30/fix(site): repair dead CTAs, private-repo links, and internal-note copy on production pages #31). Needs a rebase — and given the diff exceeds GitHub's own 20k-line API display limit, a rebase is also the moment to consider splitting: memory-integrity + executor + dreaming are separable from README/site/GTM-doc moves.
  2. The harness check did not report on this PR (only Vercel checks ran). The PR modifies harness-check.yml itself — the gate that would validate 86 rewritten agents isn't visibly green here. Must see harness ✅ on the rebased branch.

What's genuinely good (from body + sampled patches): the ATTESTATIONS.md entry is honest append-only usage (records the deploy consolidation and strengthens SHA-pin coverage to all workflows); new workflows carry concurrency+cancel-in-progress and SHA pins per repo CI-cost rules; deleting the dormant Actions deploy path matches the one-deploy-path doctrine; v92–v98 test files accompany each claimed capability.

Board agenda: (a) executor --live spawning claude -p/API from orchestration — cost + blast-radius policy; (b) weekly-dreaming PRs auto-writing wisdom-vault promotions — who reviews memory written by cron; (c) release.yml + NPM_TOKEN arming; (d) 86-agent rewrite spot-audit (v92 quality ledger covers form, not judgment).

Path: rebase (or split) → harness green → /starlight-board → then ready+merge.

Per Frank's review: main advanced 20 commits since divergence (spatial
memory-palace pilot, nav/footer redesign, site fixes). Real overlap was
narrow — 4 files, 3 with actual conflicts:

- metrics/current.json: main's copy was a manually-curated one-off from
  #30 with a different schema (registered_agents/skill_activation_rules/
  skill_definitions_dir_format+flat_format/starlight_vaults) and no
  regenerating script backing it. This branch's scripts/sync-metrics.mjs
  doesn't exist on main at all — it's the only script-backed, CI-enforced
  source of truth for this file. Kept this branch's schema, regenerated
  fresh post-merge (agents=144, skills=84 — correctly picked up main's new
  skill via live derivation from skills/skill-rules.json, not hardcoded).

- README.md: main's copy predates this branch's "Evolve SIS front door"
  rewrite (5ad512e) entirely — confirmed #30 never touched README.md, so
  main's structure isn't an independent improvement to reconcile clause-by-
  clause, just content this branch already deliberately superseded. Took
  this branch's rewrite wholesale, then re-derived the metrics block.

- site/src/components/Header.tsx: main built an entirely new grouped-
  mega-menu nav architecture (site/src/lib/nav.ts as single source of truth
  for Header + Footer) that doesn't exist on this branch at all — not a
  case of both sides adding different links to the same flat list. Took
  main's new architecture wholesale, then added this branch's three routes
  into nav.ts's existing groups: /agents + /skills into "Explore" (same
  registry-browsing role as Vaults/Verticals), /metrics into "Learn"
  (same living-ledger role as Changelog).

Separately flagged, not fixed here (pre-existing on main, unrelated to this
merge): site/pnpm-lock.yaml is lockfileVersion '6.0', incompatible with the
pnpm version harness-check.yml's web job installs via
`corepack prepare pnpm@latest --activate` — that job would fail on ANY
branch once Actions runs again, independent of this PR. Verified the actual
merge is sound by installing against a newer pnpm locally (site builds
clean, all new + existing routes render) and then reverting that local
lockfile regeneration rather than bundling an unrelated dependency-tree
change into this PR.

Verified post-merge: lint clean, root build clean, full test suite green
(860+ tests), agents:harness-check (144/84), validate-agents.mjs, metrics
--check, and a real `pnpm run build` of site/ with the merged Header/nav.

frankxai commented Jul 6, 2026

Copy link
Copy Markdown
Owner Author

Merge complete + board-agenda findings

Reconciled with main (1b11a1e, merge not rebase per your call). Real overlap was 4 files, 3 with actual conflicts — all resolved with judgment, not blind pick-one-side:

  • metrics/current.json — this branch's scripts/sync-metrics.mjs doesn't exist on main at all; kept this branch's script-backed schema (the only one with CI enforcement), regenerated fresh post-merge. Correctly picked up main's new skill via live derivation (skills 83→84).
  • README.md — confirmed fix(docs): repair broken agent-blueprint links, populate empty metrics ledger #30 never touched it; main's copy predates this branch's front-door rewrite entirely, so this wasn't two independent edits to reconcile, just old content this branch already superseded.
  • site/Header.tsx — main built an entirely new grouped-mega-menu nav (lib/nav.ts, shared by Header+Footer) that doesn't exist on this branch. Took main's architecture, added this branch's 3 routes into its existing groups (/agents+/skills → Explore, /metrics → Learn).

Verified post-merge: lint, root build, full test suite (860+ tests), agents:harness-check (144/84), validate-agents.mjs, metrics --check, and a real pnpm run build of site/ all clean.

Found in passing, flagged not fixed: site/pnpm-lock.yaml is lockfileVersion: '6.0' on main already — incompatible with the pnpm version harness-check.yml's web job installs via corepack prepare pnpm@latest --activate. That job will fail on any branch once Actions runs again, pre-existing and unrelated to this PR. Didn't bundle a dependency-tree regen into this merge; separate fix, your call on scope.

Harness check still isn't running — confirmed again on the new merge SHA (1b11a1e): only Vercel + CodeRabbit checks fire, no harness-check.yml run at all (last real run is #109 from 2026-06-22, pre-dating this entire session's work). This is a repo-level Actions problem, not fixable from here — needs a check of Settings → Actions → General (permissions) and Settings → Billing → Actions (usage caps). I can't confirm harness ✅ until that's resolved.

Board agenda — answered with evidence, not assertion

(b) weekly-dreaming auto-writing memory — already gated, not an open risk. Re-read weekly-dreaming.yml: it never pushes to main. It commits to bot/dreaming and opens/updates a PR — you review and merge every promotion before it lands. Same pattern as nightly-metrics and registry-drift.

(c) release.yml + NPM_TOKEN — already gated, not an open risk. Dormant until you run gh secret set NPM_TOKEN; preflight skips clean with a notice otherwise. No policy gap, just a secret you haven't provisioned.

(d) 86-agent spot-audit — done this session. 12-agent qualitative sample across crypto/energy/adapter/asset/*-is families: 10/12 genuine domain playbooks, 2 broken (starlight-energy-cost/-buyer had voice: set to free text instead of an archetype — fixed). Also added a real distinctiveness gate beyond form-checking: cross-agent playbook-similarity via trigram-Jaccard, calibrated against the actual corpus (max real similarity 0.03, gate fires at 0.15) — catches a future regression to boilerplate that the old 4-phrase-ban couldn't.

(a) executor --live cost/blast-radius — genuinely open, needs your call. Confirmed in src/executors/claude-executor.ts: per-call timeout (120s default) and maxTokens cap (1024 default) exist, but there is no session-level spend cap, no call-count ceiling, and no confirmation prompt beyond the --live flag + an API key/CLI being present. starlight orchestrate <intent> --live fires immediately once configured. This is the one item where I have the evidence but not the policy — want a hard per-session call cap, a cost ledger, both, or is the existing "opt-in flag + you control the API key" boundary sufficient for now?

Path from here: your call on Actions settings + the executor policy question, then this is ready for /starlight-board proper.


Generated by Claude Code

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