SIS elevation: real executor, persistent dreaming, executable boards, 81-agent rewrite, cloud autonomy#24
SIS elevation: real executor, persistent dreaming, executable boards, 81-agent rewrite, cloud autonomy#24frankxai wants to merge 20 commits into
Conversation
…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.
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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.
|
|
||
| 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 }); | ||
| } |
There was a problem hiding this comment.
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 });
}| 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); |
There was a problem hiding this comment.
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.
| const m = readFileSync(f, 'utf8').match(/\b(it|test)\s*\(/g); | |
| const m = readFileSync(f, 'utf8').match(/\b(it|test)\s*\(\s*['"`]/g); |
| { cwd: REPO_ROOT, encoding: "utf-8", timeout: 60_000 }, | ||
| ); | ||
|
|
||
| assert.equal(run.status, 0, `demo exited non-zero:\n${run.stderr}`); |
There was a problem hiding this comment.
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.
| 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}`); |
…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.
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.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…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.
…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.
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 Hard blockers before any merge decision:
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 Board agenda: (a) executor Path: rebase (or split) → harness green → |
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.
Merge complete + board-agenda findingsReconciled with main (
Verified post-merge: lint, root build, full test suite (860+ tests), Found in passing, flagged not fixed: Harness check still isn't running — confirmed again on the new merge SHA ( Board agenda — answered with evidence, not assertion(b) weekly-dreaming auto-writing memory — already gated, not an open risk. Re-read (c) release.yml + NPM_TOKEN — already gated, not an open risk. Dormant until you run (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 (a) executor Path from here: your call on Actions settings + the executor policy question, then this is ready for Generated by Claude Code |
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;--checkwired intoverify.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 (cliclaude -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 boardruns the 5-vector panel through the previously dead consensus math and emits verdict JSON todocs/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); newqueen verifychecks 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.ymlpublishes onv*tags onceNPM_TOKENis 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_IDAgent 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,/metricsrender 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· completenpm 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