Derive the layout, don't tune it
Every spacing constant was tuned against a snapshot and silently broke when content changed. The layout now derives all distances from the content, so overlap is impossible by construction.
The node was as wide as the gap between nodes
Node size is a radius in graph units, not pixels — it had been inflated until a node's radius equalled the distance to its parent. Fixing it exposed that the roots never had an angular budget.
Physics Phase 1 — unstack the directory piles
Sibling directories were seeded at byte-identical coordinates. Both gwells seeders now give each subtree an angular budget, so sibling overlap is impossible by construction.
Graph Source Phase 7 — extension detect, native file picker
Typing a path in the picker now surfaces adapter suggestions by extension; Browse file/folder buttons invoke the native OS dialog in Tauri.
Graph Source SA-028 — user-editable source labels
Library entries can now be renamed inline via a pencil button in the tile and the picker's Recent tab.
Graph Source Phase 6 — dev mode gating
Source Adapters tile gated behind devMode; Advanced section in picker shows raw config when devMode is on.
Package Hygiene and Renderer Type Cleanup
Moved misplaced prod dependencies to devDependencies, removed Tauri scaffold boilerplate, extracted a duplicated utility, and replaced any escapes in the graph renderer interface and SigmaGraphView with proper types.
Repo Docs Consolidated for Public Readability
Retired ~54k lines of internal agent workflow logs, brain files, and pass reports from the tracked tree; replaced with eight clean public-facing documents covering current status, roadmap, known issues, and development history.
Code quality and security fixes for public release
Fixes semicolon regex in shell_parser, narrows lockdown fail-open to ImportError+warn, adds tamper trigger warning, replaces __import__("sys") in 4 places, removes dead approval guard clause, drops 6 empty test stubs, fixes hardcoded PYTHONPATH in test fixtures.
Deprecated Module References Scrubbed from Docs
All mentions of rhyzome, ai-lab, bons.ai, and discord-bot as active modules removed from the doc tree; Bo correctly reframed as Cerebra's live bootstrapped agent.
Add MIT license, remove internal artifacts
Adds MIT LICENSE. Removes AGENTS.md, docs/agent/DISCORD_PROTOCOL.md, and LibreOffice lock file from tracking. Extends .gitignore to exclude agent coordination files, CLAUDE.md, and editor lock patterns.
Record Lattica Track A and Track B as live
Updates INTEGRATION_BOUNDARIES and IMPLEMENTATION_STATUS to reflect both live data paths in Lattica's Policy Scout tile: Track A (4 Tauri commands shelling to CLI --json) and Track B (Fossic relay) confirmed live as of v0.3.14.
Layout Persistence, Tile Registry, AiStack IPC
Pane layout persists across restarts via localStorage, tile rendering switched to a registry record, and AiStack topology polling moved from browser fetch to Tauri IPC via reqwest.
Platform Drawer and In-Tree fossic Vendoring
Platform drawer replaced with live module-health view and animated PillarSvg helix; fossic vendored in-tree to eliminate the sibling-path CI dependency.
Disable pre-tool hook, gitignore session config
Clears the PreToolUse hook from .claude/settings.json that ran policy-scout check before every Claude Code tool call. Adds .claude/ to .gitignore so per-machine session config stays local.
Version Bump to 0.3.6
All four version fields synced to 0.3.6; Shell brand label now shows the correct version and M10 is closed as a side effect.
v0.3.12 docs baseline for public release
Removes ~40 stale design docs; rewrites ARCHITECTURE, IMPLEMENTATION_STATUS, CLI, SECURITY_MODEL, INSTALL, ROADMAP, INTEGRATION_BOUNDARIES, and ADRs 1–4 to reflect current code. Fixes VS Code extension row from Planned to Experimental alpha.
Freeze Button Fully Wired Across All Tiles
Freeze/thaw now pauses tile animation and counts queued events while frozen, with snapshot-based resume; all five tiles implement the frozen/onQueuedCountChange props.
Lattica relay with startup backfill
policy-scout-relay.py implements CP-F-3 payload-conditional relay: posture stream and 8 ALWAYS_RELAY_TYPES relay unconditionally; DecisionIssued relays only for DENY_AND_ALERT or critical risk band. Backfills all historical events at startup via store.streams() before subscribing.
Vendor fossic Wheel; CI Now Green
Replaced the private-repo fossic dependency with a pre-built vendored wheel (fossic 1.8.1, manylinux, CPython 3.12), making CI fully self-contained with no external git access required.
Vendor Fossic 1.8.1 PyO3 binding locally
Replaces private GitHub git dep with Fossic 1.8.1 vendored in vendor/fossic/fossic-py; CI now builds from local source with no external auth required.
Dead Tauri Command Removed
fossic_query_remote_store and all supporting types removed from lib.rs; LumaWeaveTile marked with a TODO for Phase 2+ Reflective Twin re-registration.
FossicTile Relay Status Now Live-Derived
FossicTile per-lane relay health is derived from live fossic buffer activity rather than static hardcoded config values.
Canary Event Version Payload Fixed
Startup canary event version field changed from hardcoded "0.2.0" to env!("CARGO_PKG_VERSION"), keeping it correct automatically on future bumps.
Platform Live-State Doc Full Rewrite
LATTICA_NOW.md rewritten from the stale v0.3.0/June-14 snapshot to reflect all 5 live tiles, Shell activity lanes, fossic subscription pattern, and 5 known bugs with file+line references.
Verification Pass and ADR Link Repair
All six Phase 4 verification checks passed or surfaced pre-existing issues; broken ADR cross-reference slugs in ADR-004/005/006/008 corrected; README rewrite (missed Phase 3 git add) committed.
Employer-Ready Docs — Full Restructure
Four new source-verified docs (architecture.md, operating.md, history.md, README rewrite), SR-01–SR-10 promoted to docs/deep-dives/, and ~80 aseptic process artifacts archived to archive/2026-06-21-pre-cleanup/.
CI Pipeline Restored, Clippy Clean
Fixed stale monorepo working-directory paths in CI workflows, resolved all clippy -D warnings across the workspace, and applied rustfmt; Phase 1 inventory and Phase 2 history draft committed as cleanup prep.
CI Credential Attempt via GITHUB_TOKEN (Superseded)
Attempted to unblock the private fossic dependency by configuring a git credential helper with GITHUB_TOKEN; approach confirmed wrong and abandoned — included for changelog completeness.
Green CI, README Rewrite, Archive Index Cleanup
Fixed CI workflow (dropped Rust toolchain, excluded integration tests), rewrote README to lead with capabilities, cleaned AGENTS.md to archive-mode context, and added archive/README index.
Archive Documentation Consolidated into Five Files
Compressed 170+ scattered docs into five clean files — two narrative docs and three concatenated archive bundles covering the full development history at v0.4.4.
D2 close — fossic-similarity-hnsw substrate complete
Sibling crate ships with HNSW-backed semantic search via SimilaritySearchProvider trait, atomic disk persistence, background indexing, Python bindings, and full documentation.
Python Binding for HNSW Similarity Provider
Adds fossic.similarity.HnswProvider and SimilarityQuery to the Python package, exposing the full HNSW index API including background save scheduling and stream-pattern filtering.
Background Save Scheduling with Dirty-Flag Discipline
Adds AtomicBool dirty/save_pending fields, storm-prevention via optimistic stamp, and Weak<HnswProvider> drop semantics for background HNSW persistence scheduling.
HnswProvider Gains Atomic Disk Persistence
HnswProvider can now save its HNSW vector index and event-ID mappings atomically to disk and reload them on construction, with corrupt-file recovery and system event emission.
Substrate extension patterns reference doc
New reference document covering seven canonical patterns for authors of sibling crates and substrate extensions, source-verified against v1.7.1.
HNSW provider core implementation live
HnswProvider fully implemented with stream-pattern filtering, fudge-factor candidate expansion, and 11 integration tests covering all edge cases.
D2 begins — fossic-similarity-hnsw crate scaffold
fossic-similarity-hnsw ships as a new sibling crate with HnswConfig, HnswError, and an HnswProvider skeleton implementing the actual SimilaritySearchProvider trait; BackgroundExecutor, TaskKind::Custom, and SystemStreamWriter are now exported from fossic for use by substrate extensions.
Bounded read docs across all four bindings
All four binding surfaces (Rust, Python, Node.js, Tauri IPC) now have documented bounded-read APIs with cursor resumption, streaming iterators, and SamplingMode; FOSSIC_V1_SPEC updated with canonical type definitions and a Phase 1–5 roadmap.
Tauri IPC bounded read commands
fossic-tauri v1.1.8 adds 7 bounded IPC commands covering range, correlation, causation, and aggregate reads — each with cursor-resumption support; streaming deferred to v1.2.x.
Node binding surface for bounded reads
fossic-node v1.1.7 exposes bounded read methods and streaming async iterables for all three read modes, with TruncationCursor, SamplingMode, and defaultMaxResults/defaultMaxBytes in OpenOptions from the start.
Phase 8 — ProjectRegistered + RelayHeartbeat event-sourced project discovery primitives
Two new system event types (ProjectRegistered, RelayHeartbeat) emitted to _fossic/system via a new registry.rs module. Substrate-side emit only — consumer coordination (fossic-coordinator) is future work. Python relay.py updated with startup emit and daemon heartbeat thread.
Python Binding Surface for Bounded Reads and Iterators
fossic-py gains ReadOutcome (tagged-union), TruncationCursor (opaque), SamplingMode (static constructors), bounded read methods, and three streaming iterator types — full parity with the Rust bounded read and iterator surface from v1.1.3–v1.1.5.
EveryNSeconds policy and recurring background GC
SnapshotPolicy::EveryNSeconds is now live — read_state schedules a background snapshot via the BackgroundExecutor during the next quiescent window; auto_gc_orphans now also schedules an hourly recurring GC task at store open.
Streaming Iterators with Pool-Safe Batching
Three streaming iterators ship for read_range, read_by_correlation, and walk_causation — each fetches 100 events per internal batch, releases the pool connection before yielding, and is fused so next() after None is always safe.
Bounded Aggregate Fold with Clone Snapshot
aggregate_bounded folds events against a budget, clones the aggregator at the cut point to finalize a partial result, and returns ReadOutcome<A::Output> with cursor: None — no resume in v1.1, deferred to v1.2.x.
Drop-Time GC Fallback (Phase 6 Close)
OpenOptions::auto_gc_orphans (default false) triggers gc_orphaned_snapshots at last-Store-clone drop time, purging snapshots for reducers no longer registered; Arc::strong_count guards against intermediate-clone false-fires.
Bounded BFS Causation Walk with Sampling
walk_causation_bounded ships with three sampling modes and level-boundary budget cuts; Rust-side BFS loop replaces recursive CTE to enable natural truncation points without materialising the full result.
read_range_bounded + read_by_correlation_bounded
Implements bounded read_range and read_by_correlation variants with paged resume, at-least-one guarantee, and budget fallback to OpenOptions defaults. Fixes CursorInner::Correlation field (after_timestamp_us→last_seen_id) to match the id>last_seen_id resume predicate.
SystemStreamWriter — dedicated system-stream connection
Extracts write_degraded_event into SystemStreamWriter; dispatcher thread holds one dedicated SQLite connection outside the write mutex. Byte-identical SubscriptionDegraded output. Phase 1 anchor comments added for Track 2 merge safety.
Bounded Resource API Foundation Types
Adds ReadOutcome, TruncationCursor, BudgetKind, SamplingMode, and dispatch channel observability as the foundation for bounded reads; no existing API surfaces changed.
Cerebra Daemon-v1 Vocabulary Additions
Two new event types and one new global stream from cerebra serve added to AGENT_TRACE_VOCABULARY.md §7.
First sequential P-013 contribution — Cerebra's PredictionMadeRenderer landed
PredictionMade events in the cerebra signal feed now render via Cerebra's component (composite score, basis badge, signal grid) instead of bare-label fallback. P-013 validated as a sequential pattern. Policy Scout host correction in COORDINATION_PATTERNS.md.
Documentation refinements from cross-project check-ins
Three small refinements surfaced by project Claudes during post-UP-001 grounding-pass reading. UNIFIED_PASSAGE adds internal-pre-verification note. P-013 generalizes host/guest as positional roles. P-014 clarifies audit identifies both static-should-be-live and live-should-be-static-with-rationale.
Post-UP-001 cleanup; P-013/P-014 promotion; hardcoded fixes; retrospective
Post-UP-001 cleanup: P-013 (Guest author in host repo) and P-014 (Don't hardcode dynamic values) promoted to COORDINATION_PATTERNS.md. Header version now from package.json, subtitle fixed. Blog Bumper template formalized. UP-001 retrospective filed.
UP-001 closed — first unified passage methodology validated end-to-end
First unified passage closes successfully. Smoke test verified live Cerebra SignalEvaluated events rendering in Lattica's UI via the registry pipeline. Methodology validated across DRAFT → REVIEW → ARM → EXECUTE → POST_FLIGHT. First user-observable feature beyond v0.2.0 scaffold.
Tauri build fix; three latent v0.2.0 scaffold bugs caught and fixed
First npm run tauri dev surfaced three bugs: missing Manager import, missing RGBA icons, stream not declared before append. All fixed and build verified end-to-end. UP-001 ARM phase now complete — Fossic upgraded pre-flight to pass.
Cross-Claude manifest-snippet discipline; courier load reduced
Documents structured per-recipient manifest format every Claude uses at end of pass reports. Developer copy-pastes snippets verbatim; recipient grounding-passes to find files. Three docs updated. Symmetric discipline across all project Claudes.
UP-001 REVIEW iteration 1; three ACK corrections applied
Cerebra and fossic both filed ACK-with-conditions/corrections in UP-001 REVIEW. Three issues accepted: stream-key typo, two fossic-tauri API errors caught by code review, guest-author-in-host-repo pattern formalized for Cerebra renderer. Relays out asking both Claudes to upgrade ACK status.
UP-001 DRAFT committed; first unified passage REVIEW phase open
First unified-passage methodology validation begins. Three DRAFT artifacts committed to docs/coordination/unified-passage/UP-001/. Outbound relays open REVIEW phase with Cerebra and Fossic Claudes. UP-001 scope: render a live Cerebra event end-to-end in Lattica's UI.
Agent Trace Vocabulary Corrections Batch
Four corrections to AGENT_TRACE_VOCABULARY.md — stream key, CatalystArmSelected gap note, ReinjectionTriggered schema, OTel mapping.
Contract ADRs filed, ADR-009 dangling refs cleaned, version format documented
Cleanup pass. Contracts from v0.2.0 (token namespace, tile registration, payload renderer registry) now have formal ADRs (015/016/017). ADR-009 ADR-L-NNN refs swept. VERSION_CONVENTION notes format drift.
Phase 9 close — cognitive loop complete
Phase 9 ships the complete v0.1 cognitive loop: deterministic Clutch cascade, strategic Catalyst escalation with bandit-based learning, and re-injection across context windows. Four steps closed at b175874. Promoting to v0.4.0 to mark the milestone.
Cerebra Phase 9 Catalyst Events Land in Vocab
Corrects AGENT_TRACE_VOCABULARY.md §7.5 and §8.2 to match actual Cerebra v0.3.6 emissions for ClutchDecisionMade, CatalystInvoked, and CatalystArmSelected, closing the validator gap opened by Phase 9 Steps 1 and 3.
Phase 9 Step 3 follow-ups — catchup pass
Cross-pollination doc pass-9.3.md written from actual cycle_runtime.py emission sites (payload schemas diverge from D5 planning spec in field names; code is canonical). Two pre-existing tech debt entries catalogued. Two research doc corrections applied per Q2/Q3 clarifications.
GWells Lifecycle And Headless Closeout
Folded the lifecycle probe/docs, benchmark baseline workflow, and headless scheduler work into one closeout commit for GWells v0.1.5 polish.
Phase 8 D1 closure — cycle episode persistence
Closes D2 stub from Step 2; cycle_episode_records (Migration016) with FK to runtime_sessions and nullable FK to sessions; EpisodeWriter persists cycle outputs on accept; salience boost via WorkingMemory.promote for cited records. Phase 8 CLOSES.
Cerebra OTel Mapping Aligned to Locked Coordination Spec
Four post-rc.1 corrections to §8.2 of AGENT_TRACE_VOCABULARY.md align the OTel GenAI span mapping to the decisions locked in the Cerebra coordination round before the exporter ships.
Phase 8 Step 3 — Cycle closeout and continuation bundles
Ships ContinuationBundle mechanism, Migration015, cerebra run-cycle CLI, and restores the SessionOpened→CycleStarted causation chain via open_session tuple return.
Test surface unification — Justfile, cargo --workspace fix
Fixed cargo test --workspace compilation failures in fossic-tauri and added just test as the canonical three-binding test runner.
Cycle Runtime Composition Ships
CycleRuntime composes Phase 6 eval, Phase 7 leeway gate, and Phase 8 config/clutch/stop into a working synchronous cycle; simple.planning.v0 demo ships with a full 13-event canonical chain per step.
Pre-release spec polish and CCE docstrings land
Adds Python-level docstrings to the three CCE encoding functions, locks the no-dot version format convention as parser-load-bearing, and files the blake3 Python harness gap as tracked debt ahead of v1.0-rc.1.
Cerebra cycle runtime vocabulary lands in canonical doc
Folds Cerebra's 22-event Phase 6/7/8 contribution into AGENT_TRACE_VOCABULARY.md, adds a Consumer Extension Registry for cross-consumer discoverability, and extends the OTel GenAI span mapping with all 22 Cerebra events.
Python CCE conformance harness lands
Exposes the CCE encoder from fossic-py and adds a parametrized harness that verifies all 30 canonical vectors byte-identical to the Rust core, closing the binding parity gap.
ReadQuery gains event_type_filter parity
ReadQuery now accepts event_type_filter mirroring AggregateQuery's shape. SQL NULL-guard pattern keeps None fully backward-compatible. Closes TD-002 / RB-1.
Phase 8 Step 1 — RuntimeSession persistence foundation
Adds session lifecycle management: RuntimeSession frozen dataclass, SessionManager, SQLite persistence via runtime_sessions table, and PredictionInput adapter bridging session state to Phase 6 prediction pipeline.
Gwells Benchmark Coverage Expanded
Expanded the GWells benchmark matrix, refreshed the canonical physics doc, and kept the timing surface aligned with the current engine behavior.
Spec clarification for purge semantics and branches
Clarified purge semantics in spec to read-path removal language, added canonical BranchInfo field documentation, documented the default branch convention, and added the register_upcaster docstring.
Retroactive blast-radius records realigned to real SHAs
All thirteen retroactive blast-radius files corrected to match actual commit groupings, with the ADR namespace formalised and the DV-002 purge-semantics decision recorded.
Aseptic methodology bootstrap and spec corrections
Bootstrapped the Aseptic contamination-prevention methodology, created retroactive blast-radius records for all prior passes, filed a TIDYUP survey, and corrected the threading model spec.
Phase 6 Step 3 — Prediction/Outcome Pipeline
Implemented the full prediction/outcome pipeline for six-signal epistemology, including persistence, event emission, and Migration013 for the predictions + outcomes tables.
Phase 6 Step 2 — Six-Signal Evaluation Infrastructure
Implements the full signal evaluation stack: six prompt modules, SignalEvaluator, EvaluationComposer, emit_evaluation_events(), and the evaluations table (Migration012). EPISTEMIC_HUMILITY uses a marker-based scoring path (v0.1); the remaining five signals use LLM complete_structured() in JSON mode.
DynReducer Snapshot Caching in Python Binding
Exposes Rust snapshot machinery to Python via the DynReducer protocol, making read_state use snapshot-backed replay; adds a similarity search stub and aggregate volume benchmark revealing the PyO3 bridge overhead.
Glob Subscriptions and Tilde Path Expansion
Adds glob-pattern subscription matching across stream sets, internal tilde path expansion in Store.open(), cursor alignment fixes for cross-stream queries, and all eight platform ADRs.
fossic-py Test Debt Cleared to 62 Passing
Resolved all 27 outstanding fossic-py test failures across DynReducer protocol, BranchInfo field naming, tilde path handling, and subscription semantics — leaving one intentional skip and one logged real bug.
Node Binding Load-Bearing Fixes
Fixes Symbol.asyncIterator and Symbol.asyncDispose via JS wrapper class, corrects walk_causation chain traversal, and resolves a concurrent next() race in the subscription iterator.
napi-rs Node.js Binding With TypeScript Types
Adds fossic-node, a napi-rs binding exposing the full fossic store API to Node.js and TypeScript consumers with generated type definitions and a full test suite.
CI Pipeline, Wheel Builder, Release Workflow
Adds GitHub Actions for test matrix CI, cibuildwheel Python wheel builds, napi-rs release artifact publishing, and an mdBook documentation scaffold with DESIGN.md.
Tauri IPC Companion and napi-rs Config
Adds fossic-tauri, a Tauri 2 IPC companion crate exposing fossic commands to webview consumers, plus napi.config.json wiring the napi-rs build pipeline for the Node binding.
PyO3 Python Binding for Full API Surface
Adds fossic-py: a PyO3 0.29 Python 3.12 binding exposing append, read, branches, snapshots, reducers, subscriptions, transforms, upcasters, and deletion to Python consumers.
Benchmark Harness And Aseptic Reports
Added deterministic GWells benchmark stepping, captured performance metrics, and bootstrapped Aseptic living reports for ongoing passes.
Cross-Stream Queries, Upcasters, and Deletion
Completes the advanced query and lifecycle surface with cross-stream correlation, schema upcasting for event migrations, payload transforms, tombstone deletion, and cursor pagination.
Subscriptions and WAL-Backed Live Delivery
Adds a pub/sub subscription layer driven by SQLite WAL change detection, enabling reactive consumers to receive events in real time without polling the log.
Branches, Snapshots, and Pattern Reducers
Adds branch isolation with fork/merge lifecycle, point-in-time snapshot capture and restore, and glob-pattern stream reducers for aggregated projections.
Core Rust Event Store With CCE
Foundational append-only SQLite event log with BLAKE3 content-addressed events, typed error hierarchy, and stream lifecycle management.
Cross-Cutting Infrastructure (fossic event sourcing layer)
Added fossic-py as a production dependency and built the FossicStore/EventEmitter layer that backs Phase 6+ event emission across cycle-trace and lattice streams.
GWells Runtime Lifecycle State
Closed the C14 runtime lifecycle API gap by exposing controller state, quiet debug events, and safer reseed handling.
Lattice Step 2 — retrieval-side sibling deduplication
Adds lattice-aware sibling dedup between scorer and floor filter in both `search` and `context` commands, with D2 routing rules, DB column updates, and event emission.
GWells runtime lifecycle hygiene
Hardened GWells controller pause, resume, stop, pinning, and live override behavior to avoid duplicate loops and stale runtime caches.
Data Cleanup Deletion Path
Replaced dry-run-only planning with an explicit --apply flag for actual deletion. Default behaviour (no --apply) is unchanged — plan preview only.
GWells hub-ring crowding relief
Added deterministic top-level ring spacing so large explicit-spine layouts avoid origin crowding while preserving small-graph behavior.
pnpm/yarn/bun Sandbox Execution
PM-aware lockfile snapshots and diff capture for all four package managers, plus pnpm transitive dependency analysis. yarn and bun skip transitive (incompatible list output formats, documented).
GWells fallback seeding safety
Added deterministic fallback seeding for no-spine, orphan, and unreached graph nodes so non-filesystem layouts avoid origin clumping.
Tower visibility in memory status + Phase 5 e2e suite
Extends `cerebra memory status` to show truth tower contents, and ships the Phase 5 end-to-end integration test suite covering all 6 behavioral classes.
Documentation Staleness Update
Refreshed IMPLEMENTATION_STATUS.md, INSTALL.md, and INTEGRATION_BOUNDARIES.md to reflect the completed state of all 13 Tier 2/3 plans — no code changes.
Supply Chain Detection Depth
Multi-layer lifecycle script analysis wired non-fatally into the sandbox flow — JS static analysis, Python AST visitor, dependency confusion detection, transitive npm tree scan, and publish anomaly signals.
GWells resolver-backed assignment
Routed GWells well assignment through structural analysis fallback while preserving existing radial-backbone and parallel-spines behavior.
cerebra context T1 auto-population
Wires T1 auto-promotion into `cerebra context` so every retrieval run feeds selected memory into the Truth Tower, with --no-promote and abstention guard rails.
GWells structural resolver foundation
Added a behavior-neutral structural resolver so GWells can analyze non-filesystem graph shapes before routing layout behavior through topology-aware roles.
Phase 5 Step 5 — Truth Tower T1+T2 core (two-tier evidence stack)
TruthTower class with T1 auto-promotion from retrieval results, T2 manual promotion citing a T1 anchor, staleness cascade on T1 eviction, chronological render, and full inspector event suite.
Phase 5 Step 4 — Interpretive Lattice Phase 1 (confidence-gated multi-commit)
When ≥2 categories score ≥0.65, classify_record_lattice() writes sibling memory_records for each additional category, all linked by a shared lattice_lineage_id; existing classify_record() untouched.
Phase 5 Steps 3+4 — WorkingMemory core + memory CLI
WorkingMemory class with capacity eviction, tower-cited penalty, and pin guards; `cerebra memory` CLI (status / promote / evict).
Phase 5 Steps 1+2 — cognitive runtime schema + session management
Migration009 (sessions/wm/tower tables), slot constants, PHASE_5_EVENT_TYPES, new_session(), vault lockfile, and `cerebra session` CLI commands.
v112 arc close — semver 0.18.0 → 0.19.0
Semver bump to 0.19.0; v112 arc reconciled in NOW.md + ROADMAP with full commit table; 10 new KNOWN_SHARP_EDGES lessons appended.
Agent integration — MCP server, injection detection, sandbox, intel, watch
MCP server (5 tools, PreToolUse hook), prompt injection scanner (8 categories + base64 rescan), Linux namespace sandbox (overlayfs + strace), package intel adapter (typosquatting, known-bad registry), and real-time fs watch daemon with event routing.
Clear opacity debt + fix stale status-cluster i18n assertion
Diagnoses and closes the v112.4 opacity regression report (binding intact, no code fix needed) and resolves the pre-existing i18n.spec.ts:187 stale assertion.
Policy management UI — ADR-008 three-phase implementation
Policy management UI delivered in three ADR-008 phases: JSON schema contracts and TypeScript domain types; strict type coverage with browser preview mocks and pagination; then the full management card suite with rule display and simulation controls.
Tier 2 safety suite — HMAC chain, integrity, response, git, scan, policy
Six Tier 2 safety subsystems shipped: HMAC audit chain, integrity checks, incident response with lockdown and playbooks, git pre-commit hooks, secret scanning, and policy management with simulation. CLI wired; ADRs 001–008 and plans 01–13 added.
Docs audit — data paths, report surfaces, release checklist
Audited and documented the full data visibility story for the native dashboard: CLI-first setup path, data path catalog, report evidence surfaces, audit events display, and a consolidated v0.2 smoke checklist. Added a local alpha release checklist.
Dark mode consolidation and decision check UI
Consolidated the dark-mode CSS architecture to eliminate per-card overrides and fixed contrast failures. Added the full decision check flow: Rust adapter, TypeScript card shell, invoke wiring, and result display.
Tauri adapter hardening — validated selectors, Rust unit tests, CI
Replaced cleanup dry-run wrappers with validated target selectors, extracted audit event ID validation into a dedicated Rust helper, added full unit test coverage for adapter validators, and wired a Tauri desktop CI job.
AgentChatTile + Agents settings category + chat UI
Wires the agent chat frontend — AgentChatTile with ephemeral conversation state, ChatInput with Enter-to-send, Agents settings category (endpoint/model/API key/test connection), and schema v95 migration.
InferenceBackend trait + RemoteClient + Tauri commands
Adds the Rust inference module — InferenceBackend trait, RemoteClient (OpenAI-compat HTTP), and chat/test_inference_connection Tauri commands. No frontend wiring yet; that's Commit 2.
Fix tiles popover stacking beneath floating tiles — Case B
Raised .lw-status-bar z-index from 10 to 1001; the status bar's stacking context was bounding the popover's z-index: 10100 below the tile-layer (1000).
Dev-gate internal tiles; rename Command Deck → Keyboard Shortcuts
Flags qa-feedback, system-index, and graph-visual-inventory tiles as requiresDevMode: true; renames command-deck-section label and 3 i18n strings to "Keyboard Shortcuts."
Dev-mode gating infrastructure + settings toggle
Adds developer.devMode boolean (schema v94) to settings, wires requiresDevMode filtering to the Tiles popover, and delivers a verified toggle in Advanced settings.
Phase 4 Steps 10–11 — abstention operator and e2e integration suite
Closes Phase 4. Wires the silence/abstention path into search and context, and verifies the full pipeline end-to-end against the dev vault.
Phase 4 Steps 7–9 — retrieval pipeline, trace writer, ContextPacket, context CLI
Builds the full retrieval pipeline: trace writing to DB, ContextPacket assembly, and the cerebra context command end-to-end.
Policy management UI cards complete ADR-008
PolicyOverviewCard and PolicyValidateCard land the final phase of ADR-008, giving the desktop dashboard a full policy management surface alongside two new Tauri commands.
TypeScript strict mode, browser preview mocks, and list pagination
Enforced noUncheckedIndexedAccess across the UI, added mock fallbacks so browser preview loads without Tauri, and added offset-based pagination to report list and audit list.
JSON schema contracts, mock fixtures, and domain type system
Established the contract layer for all CLI output shapes with Draft-07 JSON Schemas, paired mock fixtures for browser preview, and split the monolithic types.ts into 12 domain-scoped modules.
CLI commands wired for all new features
Six new command groups — scan, git, integrity, lockdown/preserve/clearance, and policy — expose the full Tier 1 feature set from the terminal.
Policy management with simulation and project overrides
Per-project overrides, a dry-run simulator, an audit history replayer, and a structural validator make policy authoring safe and testable before deployment.
Secret scanning with entropy and pattern detection
A dedicated scan engine combines Shannon-entropy string detection with a pattern library covering API keys, tokens, and credentials across major providers.
Git integration with pre-commit hooks and lockfile scanning
Policy Scout can now install a pre-commit hook that checks staged files before each commit and detect lockfile tampering between commits.
Incident response layer with lockdown and playbooks
One-command lockdown, YAML-driven runbooks per threat class, and evidence preservation land as a structured incident response layer.
Registry self-integrity checks on startup
Policy Scout now verifies SHA-256 checksums of its own bundled data files at startup, catching tampered registries before any decision is made.
Tamper-evident HMAC chain on audit log
Every JSONL audit entry now carries a cryptographic chain so any deletion or alteration of past records is detectable before a security review.
Motion spoke MVP — Reduce Motion toggle + safety reference
Replaces the Motion spoke stub with a live toggle for reduce motion and a classification-grouped effect safety reference (safe/low/moderate).
Type spoke MVP — read-only typography role cards
Replaces the Type spoke stub with 3 live typography role cards (display/body/mono) reading from typographyRegistry.
v112.2 theme export sub-area MVP
Wired the existing exportGlobalThemeOverrideBundle to a real download flow. Export sub-area now shows a reactive button that enables when global overrides exist.
v112.1 string scrub + gwells debug log removal
Replaced 11 arc-number-bleed strings with user-language equivalents; removed 3 standalone gwells debug console.log calls.
Phase 3 — Storage and Index Layer complete
Embeddings, lexical FTS, graph store, artifact store, index-state, and event-driven freshness shipped. Vault re-embedded with mxbai-embed-large-v1 (1024-dim). Vector retrieval verified across 8 queries; 0.21 discrimination gap, 0 parse failures, sensible rankings throughout.
v111 arc close — semver 0.17.0 → 0.18.0
Closes the v111 test-infrastructure arc. Bumps semver, reconciles NOW.md and ROADMAP with honest v111 history (including the pulled CI E2E work), and appends 6 KNOWN_SHARP_EDGES entries from v111's learnings.
Pull CI E2E wiring, defer to post-v1.0 dedicated arc
Reverted ci.yml and playwright.config.ts to pre-v111.4 state after 6 failed amendments. Documented the investigation and proposed real-fix path in a known-bug entry.
CI E2E: switch to Vite production-preview server
Replaced webServer command in playwright.config.ts with a CI-conditional that builds a production bundle then serves via vite preview, eliminating per-request JIT compilation causing 30-60s page loads.
CI E2E wiring — required job, Playwright cache action
Adds e2e job to ci.yml gated on lint-css + typecheck; uses microsoft/playwright-github-action@v1 for browser caching; --workers=4; timeout-minutes=15. E2E now required for merge.
Flaker triage — color-tab to web-first, 3 documented
Converts all 5 waitForTimeout calls in color-tab-functional.spec.ts to web-first assertions (stable triple-run); adds audit-marker comments to settings-panel, graph-sources, and gwells C9.0 (architectural deferral).
Bench v0.2 LoRA track; confirm Granite 4.1 3B instruct as v0.1.x classifier
Benching the v0.2 LoRA training track after Phase 3 audit revealed corpus imbalance as the resume-blocker (10 RELATIONAL training records covering 2 of 4 sub-categories). Granite 4.1 3B instruct via Ollama stays as production; calibration confirmed at 65% partial-credit, unchanged from v0.1.0.
v0.2 LoRA training infrastructure — corpus, trainer, evaluator
Built and validated the complete v0.2 QLoRA training pipeline. Phase 1 diagnosed the format mismatch root cause (no EOS, no completion-only loss, key name bug); Phase 2 fixed all three and confirmed 0 parse failures. Adapters are not shipping; infrastructure is committed for future use.
qa.ts waitForTimeout → web-first assertions
Converts two race-condition Band-Aids in qa.ts (openAdvisoryTab + expandSection) to web-first assertions; contract-registry timeout flake resolved, stable across 3 consecutive runs.
Post-v0.1.0 architecture brainstorm — counsel/swarm, topology, fingerprinting
Captured the design thinking session that followed v0.1.0 close-out. Updated counsel/swarm cognition and two reframe docs; added conceptual topology probing and model disposition fingerprinting as new architecture concepts. Archived nine completed workflow prompts.
GVI split — monolith into 3 parallel spec files
Splits 233-test graph-visual-inventory.spec.ts into Core/Probes/Theme for Playwright worker parallelism; wall-clock drops from ~8.7 min to 2m58s.
v110 arc close — semver 0.17.0, NOW.md + ROADMAP, sharp-edges
Formal close of v110 arc: semver 0.16.0→0.17.0, NOW.md reconcile, ROADMAP v110 LANDED annotation, KNOWN_SHARP_EDGES +3 entries.
Real-source mode — unified testid + panel overflow fix
Unified graph-viewport testid across overlay + AppShell, resolving real-source inspector positioning; 2 skipped E2E re-enabled and passing.
Hygiene cluster — identity rename + ErrorBoundary + StatusCluster cleanup
Renamed starmap→LumaWeave in tauri.conf.json + 5 TS files, added root-scope ErrorBoundary, removed hardcoded "settling" layout state.
v109 arc close — semver 0.16.0, SDK_SPEC coherence, sharp-edges
Formal close of the v109 Source Adapter Platform arc: semver 0.15.0→0.16.0, NOW.md reconcile, SDK_SPEC all questions resolved, KNOWN_SHARP_EDGES +4 entries.
CSV edge-list fixtures, E2E, arc-step docs
Fixture suite and 12 Playwright tests for the csv-edge-list adapter; v109.4 arc-step complete in NOW.md.
CSV edge-list adapter — RFC 4180 parser, header/index modes
CsvEdgeListAdapter with full RFC 4180 state-machine parser (embedded delimiters, escaped quotes, multi-line fields); header-name and numeric-index column modes; optional label→relationship; fresh registry registration adds csv-edge-list as the 11th adapter.
Local Alpha Checklist Created
Policy Scout created a v0.4.0 local alpha release-candidate checklist and classified blocking versus non-blocking release limitations.
Package-dependency fixtures, E2E, and arc docs
Fixture suite for the package-dependency adapter; 7 E2E tests all green including dual-edge react assertion; source-adapter count corrected; NOW.md marks v109.3 complete.
Package-dependency adapter, form, and registry
PackageDependencyAdapter parses package.json into a graph; config form ships with project-path input and manifest-type select; registry entry promoted from candidate to registered.
Native Dashboard Smoke Consolidated
Policy Scout consolidated the full native dashboard smoke path for the v0.4 local alpha, covering check-only interaction, reports, audit, sweeps, sandbox results, and safety boundaries.
Audit Event Surfaces Polished
Policy Scout audited and polished audit stats, event list, filters, and event detail surfaces for the v0.4 local alpha path.
Report Evidence Surfaces Polished
Policy Scout audited and polished report, evidence, redaction, and could-not-verify surfaces for the v0.4 local alpha path.
Data Paths and Empty States Hardened
Policy Scout audited local-first data locations and improved the fresh-install dashboard/data experience without expanding behavior.
CLI-First Setup Path Audited
Policy Scout documented the fresh setup path and clarified the v0.4 shipping model: CLI-first authority with an optional dogfooded desktop dashboard.
CSS lint sweep — restore CI green
Resolved 2 errors and 5 warnings across 3 CSS files using stylelint --fix. All changes are mechanical logical-property/unit substitutions and whitespace. CI lint:css now green.
v0.3 Checkpoint Documented
Policy Scout documented the v0.3 Decision Check milestone and prepared the project for v0.4 shipping hardening.
cytoscape-json fixture + E2E + v109.2 arc close
Three fixture files and 7 E2E tests verify dedup, orphan-skip, data passthrough, position passthrough, flat-array form, and Desktop-format rejection. NOW.md records v109.2 complete with all 3 SHAs.
Decision Check Smoke Documented
Policy Scout documented the native smoke path for Decision Check and captured the Audit Events render-contract issue found before push.
cytoscape-json adapter — both forms, dedup, format detection
Full Cytoscape.js JSON adapter with nested and flat element form support, node deduplication, orphan-edge skipping, and Cytoscape Desktop format rejection.
read_user_file Tauri command + SingleFileAdapter base
New Tauri command for user-supplied absolute paths with symlink rejection and regular-file validation. SingleFileAdapter gains readUserFile() for external-path adapters.
Decision Check Wired
Policy Scout wired the Decision Check card to the safe check_command adapter so users can classify commands without executing them.
Decision Check Shell Added
Policy Scout added the v0.3 Decision Check frontend shell and current-contract types without wiring backend invocation yet.
Decision Check Adapter Added
Policy Scout added a safe Tauri Rust adapter for check-only command classification without exposing command execution.
Decision Check CLI Contract Probed
Policy Scout documented the actual `check --json` CLI contract before wiring the v0.3 Tauri Decision Check UI.
Decision Check Boundary Planned
Policy Scout defined the v0.3 Decision Check + Guided FAQ feature as a check-only UI for command classification and safe operation guidance.
Tauri Dark CSS Consolidated
Policy Scout consolidated dark-mode CSS so dashboard contrast fixes no longer depend on scattered source-order overrides.
Tauri Dark Theme Contrast Fixed
Policy Scout audited dashboard color handles and fixed unreadable light-background fields so audit stats, data counts, selectors, and report/evidence surfaces fit the dark theme.
Tauri Native Smoke Checklist Added
Policy Scout added a structured native desktop manual smoke checklist for validating v0.2.x read-only dashboard behavior beyond CI.
Tauri CI Coverage Added
Policy Scout expanded CI coverage to include the Tauri desktop frontend build and Rust adapter checks alongside the existing Python validation.
Tauri Validator Unit Tests Added
Policy Scout added Rust unit tests for the private Tauri adapter validators that gate bounded UI inputs before CLI invocation.
Tauri Validation Test Plan Cleaned
Policy Scout cleaned stale validator names in the Tauri adapter validation plan and checked readiness for Rust unit tests.
Tauri Audit Event ID Helper Added
Policy Scout extracted audit event ID validation into a named Rust helper, aligning audit detail validation with the report detail validation pattern.
Tauri Adapter Validation Plan Added
Policy Scout documented the Rust-side validation boundaries and future test strategy for bounded Tauri adapter inputs.
Tauri Cleanup Target Selector Added
Policy Scout consolidated cleanup dry-run UI into one bounded target selector backed by Rust-side validation while preserving dry-run-only behavior.
Tauri List Controls CSS Shared
Policy Scout renamed report-specific selector CSS classes to shared list-control classes now used by both Reports and Audit filters.
Tauri Audit Type Filter Added
Policy Scout added a bounded Audit Event Type selector backed by Rust-side allowlist validation, keeping audit filtering read-only and CLI-authoritative.
Test Docs Updated
Policy Scout updated stale test-count docs and documented the canonical repo-root pytest invocation after confirming the full suite passes.
Tauri Docs Inventory Cleaned
Policy Scout cleaned up current Tauri v0.2 docs so wrapper counts, command tables, and operational references match the active adapter.
Tauri Report Wrapper Cleaned
Policy Scout removed the legacy unfiltered Reports List wrapper so report listing flows through the validated bounded-control path.
Tauri Report Controls Added
Policy Scout added bounded Reports List controls for limit and report type filtering, validated in Rust and based on confirmed CLI support.
Tauri Pagination CLI Audited
Policy Scout audited existing CLI list/filter support so future Tauri pagination controls can be bounded, validated, and based on real command capabilities.
Tauri Pagination Boundary Planned
Policy Scout added a boundary plan for future Tauri pagination and filtering so list controls stay bounded, validated, and read-only.
Tauri Evidence JSON Checked
Policy Scout verified the evidence-json styling hook was already applied to the audit event JSON block, so no code changes were needed.
Tauri Minor UI Styles Cleaned
Policy Scout added explicit styling for read-only labels, format badges, and evidence JSON blocks in the experimental Tauri UI.
Tauri Sandbox Detail Added
Policy Scout added read-only sandbox result detail viewing from selected Sandbox Results List items without enabling migration actions.
Tauri Sandbox Results Added
Policy Scout added a read-only Sandbox Results List card to the experimental Tauri UI, surfacing sandbox result reports without migration actions.
Tauri README Pointer Added
Policy Scout added a concise root README pointer to the experimental Tauri read-only desktop UI and its dedicated desktop docs.
Tauri Checkpoint Docs Updated
Policy Scout updated docs for the experimental Tauri v0.2 read-only UI, including current cards, wrappers, boundaries, workflow, and limitations.
Tauri Type Coverage Expanded
Policy Scout expanded frontend TypeScript coverage across remaining dashboard cards while preserving current behavior and read-only boundaries.
Tauri Frontend Types Hardened
Policy Scout added lightweight TypeScript interfaces and safer frontend data typing for the experimental Tauri dashboard without changing behavior.
Tauri Sweep Preview Shared
Policy Scout extracted shared sweep result rendering for Quick Sweep and Project Sweep while preserving manual-only read-only behavior.
Tauri Detail State Guarded
Policy Scout hardened read-only report and audit detail state so newly selected items do not show stale previous detail data while loading.
Tauri Native Smoke Passed
Policy Scout smoke-tested the experimental Tauri dashboard in the native runtime and verified live invoke-backed read-only flows.
Tauri Evidence Styling Added
Policy Scout applied redaction and evidence styling in the experimental Tauri UI so protected placeholders and uncertainty states read clearly.
Tauri Visual System Started
Policy Scout added a calm dark visual foundation for the experimental Tauri UI with shared CSS variables, card styling, and evidence-safe semantics.
Tauri Status Pills Shared
Policy Scout extracted shared status pill styling/components so dashboard health, eval, sweep, report, and detail states use consistent visual semantics.
Tauri Detail Navigation Polished
Policy Scout polished read-only Report and Audit detail navigation with clearer headers, back controls, and read-only context.
Tauri Audit Detail Added
Policy Scout added read-only audit event detail viewing from selected Audit Events List items, using validated event IDs and allowlisted audit show JSON.
Tauri Audit Events Added
Policy Scout added a read-only Audit Events List to the experimental Tauri UI using allowlisted audit list JSON output.
Tauri Report Detail Added
Policy Scout added read-only report detail viewing from selected Reports List items, using validated report IDs and allowlisted report show JSON.
Tauri Status Strip Added
Policy Scout added a compact Overview status strip that summarizes existing dashboard data without adding backend commands or new execution paths.
Tauri Quick Sweep Added
Policy Scout added a manually triggered Quick Sweep card to the experimental Tauri UI, surfacing local system findings without remediation.
Tauri Runtime Notes Added
Policy Scout documented the difference between browser/Vite preview and native Tauri runtime for the experimental desktop UI.
Tauri Runtime Fallback Added
Policy Scout made the experimental Tauri frontend handle browser preview gracefully with a friendly runtime-unavailable message instead of raw invoke errors.
Tauri Dashboard Smoke Checked
Policy Scout ran a manual smoke checkpoint for the experimental Tauri dashboard; baseline CLI checks, build, and cargo check passed with no code changes.
Tauri Eval Health Added
Policy Scout added a read-only Eval Results card to the experimental Tauri UI, showing policy eval health through allowlisted eval run JSON.
Tauri Dashboard Layout Improved
Policy Scout improved the experimental Tauri Overview with a responsive dashboard grid while preserving existing read-only cards and adapter boundaries.
Tauri Cleanup Preview Added
Policy Scout added a read-only Cleanup Dry-Run card to the experimental Tauri UI, previewing cleanup targets without deleting files.
Tauri Cargo Lock Tracked
Policy Scout added the Tauri Cargo.lock file so the experimental desktop app has reproducible Rust dependency resolution.
Tauri UI Components Extracted
Policy Scout refactored the experimental Tauri Overview into small read-only React components while preserving existing cards and adapter boundaries.
Tauri Audit Stats Added
Policy Scout added a read-only Tauri Audit Stats card backed by an allowlisted get_audit_stats command and audit stats JSON output.
Tauri Reports List Added
Policy Scout added a read-only Tauri Reports List card backed by an allowlisted list_reports command and report list JSON output.
Tauri Adapter Cleaned
Policy Scout cleaned the experimental Tauri adapter by renaming the shared CLI JSON response type and centralizing allowlisted CLI execution.
Tauri Data Status Added
Policy Scout added a second read-only Tauri card showing local data status through an allowlisted get_data_status backend command.
Tauri Doctor Card Added
Policy Scout added its first experimental Tauri scaffold with one read-only Doctor status card backed by an allowlisted get_doctor_status command.
Tauri Adapter Boundary Added
Policy Scout added a Tauri adapter boundary spec defining allowed UI backend commands, forbidden capabilities, CLI allowlists, validation rules, and first scaffold sequence.
Blocked Run JSON Expanded
Policy Scout added decision and risk details to blocked run --json responses while preserving execution blocking, exit codes, and JSON compatibility.
Eval JSON Alias Added
Policy Scout added a backward-compatible duration_ms alias to eval JSON output while preserving execution_time_ms for existing consumers.
JSON Contracts Inventoried
Policy Scout inventoried current CLI JSON output shapes and added current-contract coverage so future JSON API v1 changes can be made from tested evidence.
Datetime Warnings Cleaned
Policy Scout replaced deprecated UTC datetime usage in approval tests with timezone-aware Python 3.12-safe calls while preserving behavior and JSON contracts.
Dev Ergonomics Clarified
Policy Scout clarified local CLI invocation patterns and documented why PYTHONPATH is expected for subprocess test isolation, with no behavior or JSON changes.
JSON API Plan Added
Policy Scout added JSON API v1 planning for future stable CLI, Tauri, and local adapter contracts without changing runtime behavior or current JSON outputs.
Tauri Contract Map Added
Policy Scout added a Tauri component/data contract map linking future UI screens to CLI JSON commands, key fields, IDs, redaction states, and deferred mutation boundaries.
Tauri Wireframes Added
Policy Scout added compact Tauri screen wireframes for nine read-only UI screens with CLI JSON mappings, redaction rules, and deferred mutation boundaries.
Tauri UI Plan Added
Policy Scout added a compact Tauri UI Plan v0 defining a read-only dashboard path, CLI subprocess boundary, allowlisted wrapper model, and deferred mutation screens.
JSON Contracts Expanded
Policy Scout added JSON contract tests for run, audit show/request/type, and eval outputs, strengthening CLI machine contracts for future Tauri readiness.
Cleanup Dry-Run Documented
Policy Scout documented preview-only data cleanup planning in README and status docs, including supported temporary targets and the no-deletion safety boundary.
Report List UX Polished
Policy Scout polished report list human output: empty Created fields now show unknown, report lists include a report show hint, and JSON output remains unchanged.
Approval Test Expiration Stabilized
Policy Scout stabilized approval execution tests by replacing expired hardcoded fixture timestamps with dynamic future expirations.
Report Type Filtering Added
Policy Scout added --type filtering to report list, making large local report collections easier to browse by command, sandbox, project sweep, or quick sweep report type.
Implementation Status Aligned
Policy Scout aligned IMPLEMENTATION_STATUS.md with current alpha state: 591 tests, 44 evals, data command, npm-only sandbox execution, current migration syntax, and updated limitations.
Compressed Docs Path Aligned
Policy Scout moved compact source docs into docs/compressed to match AGENTS.md reading order and added the scenarios/evals decision source.
README Safety Diagram Added
Policy Scout added a README Mermaid safety-boundary diagram and consolidated visual/diagram guidance into a compact source doc without new render dependencies.
Sweep Redaction Metadata Aligned
Sweep JSON reports now explicitly mark redaction_applied in metadata, aligning sweep output with sandbox/report JSON contract expectations.
Local Data Visibility Added
Policy Scout added a read-only data command showing local paths, existence, and counts for audit, reports, sandbox, demo, migration, and backup state.
Sandbox Flow Polish
Policy Scout clarified sandbox install vs migration help, prints report IDs after sandbox review, and adds redaction/file-change metadata to sandbox JSON reports.
CI Test Dependency Fixed
Policy Scout now declares pytest as a dev extra and CI installs .[dev], fixing the clean GitHub Actions failure while keeping runtime dependencies minimal.
README Alpha Quickstart Added
Policy Scout README now includes alpha quickstart, doctor/demo flow, safety-gate examples, JSON mode, current test/eval status, and honest local-first limitations.
JSON Contracts and Check Redaction
Policy Scout added JSON contract tests for doctor/check/audit/report/sweep and fixed check --json command redaction so secret-like command values are replaced with canonical placeholders.
Safe Demo Harness Added
Policy Scout added a safe local demo command that creates a fixture workspace, runs allow/sandbox/deny/credential/destructive checks, and sweeps the fixture without real execution, package installs, network access, or secret reads.
Bump Classifier Documented
Policy Scout’s commit and bump gate now documents the required Project field so blog.bumper routes future PASS COMPLETE messages to the policy-scout project instead of falling back to the global default.
Agent Operating Reference Aligned
Root AGENTS.md was replaced with a Policy Scout-specific persistent agent reference. The new operating file updates the reading order to the compiled implementation docs, preserves repo-specific command/test/isolation details, and reflects the current CLI-first alpha state.
Alpha Validation and Bump Gate Added
Policy Scout now has minimal GitHub validation and a documented commit/blog coordination gate. CI checks doctor, evals, and the full test suite on push and PR to main; PRs now include safety-focused review prompts; the bump gate documents the reviewed code-plus-dev-log workflow.
markdown-vault arc close — docs + tag-node convention recorded
NOW.md records v109.1 complete with .0/.1/.2 SHAs and four v109.1 architectural notes. SDK_SPEC §6 gains the tag-node convention established by the markdown-vault adapter.
markdown-vault fixture vault + E2E spec — wikilink resolution verified
Fixture vault (13 notes incl. disambiguation triplet), E2E spec verifying exact node/edge counts, disambiguation correctness, alias resolution, and unresolved-link warnings. Includes Buffer polyfill fix for gray-matter in browser context.
markdown-vault adapter — wikilink resolution, tag-nodes, truncation
First concrete v109.x adapter. Implements two-pass wikilink resolution with closest-in-path disambiguation, frontmatter + inline tag nodes, 2000-note truncation, and a vault-root config form.
SKU Classifier — Phase 2 Close-Out with Granite 4.1 3B Substrate
Phase 2 closes at v0.1.0. Two-pass classifier (quadrant + within-quadrant), Granite 4.1 3B production substrate, temperature 0.0 deterministic backfill, Migration005 pass_count, Round 2 fixture audit (4 fixtures). Partial-credit accuracy: 65%. Full 745-record backfill complete.
Housekeeping — sharp-edge log + NOW.md mid-arc status
Docs-only pass banking the Zustand selector infinite-loop lesson and updating LUMAWEAVE_NOW.md with the v109.0 platform-complete state, v109.1–v109.5 build plan, and v110 test-hardening candidate.
SourceAdapterPanel per-adapter settings scaffolding
Adds AdapterConfigForm dispatch component + adapterConfigFormRegistry. Ships empty — no forms registered. v109.1 registers the first concrete form.
list_files + read_vault_file Tauri commands + DirectoryAdapter wiring
Adds two new Rust filesystem commands (caller-supplied root, canonicalize→starts_with validation, no symlinks, depth-capped recursion) and wires DirectoryAdapter to them.
registerSourceAdapter() API — registry + dispatch refactor
Converts const-array registry to register-based Map dispatch; simplifies loadSource to single-param; removes v109.0.1 inputPath bridge.
SDK Interfaces + Schema v93 Foundation
Introduces BaseSourceAdapter family interfaces, AdapterConfig discriminated union, and narrows SourcesSettings.configurations from loose object to typed AdapterConfig (schema v92→v93).
SKU Classifier — Two-Pass Hierarchical with Ambiguity-Aware Scoring
Phase 2 closes at v0.1.0. Two-pass classifier (quadrant + within-quadrant) replaces single-pass v1.2.0. Temperature 0.0 for reproducibility. Migration005 adds pass_count. Fixture audit marks 4 cases ambiguous with 0.5-credit scoring.
Source Adapters Tier 1 Arc Close
Closes the v108 arc — semver 0.14.0→0.15.0, NOW.md updated with v108 closed arc section, v107 table SHA fixed, Tier 1 item removed from v107 deferred block.
run_script Command, Regenerate Button, E2E Mock Shim
Adds run_script Tauri command with allowlist + path validation + 60s timeout; Regenerate button in Graph Sources tile with full state machine; __lwTauriMock shim enables E2E coverage without Tauri runtime.
read_file Tauri Command + Live Self-Graph Load
Adds read_file Tauri command with path-validation sandbox; rewires loadSelfGraph to read generated fixture from disk via invoke rather than HTTP; schema 91→92 adds sources.refreshToken for regenerate re-triggering.
Source Adapter Tier 0 Arc Close
SourceAdapterPanel gains set-active selector for registered adapters; E2E spec rewritten with full click→store→indicator flow; v107 arc closed at 0.14.0 with all deferred Tier 1+ items preserved.
loadSource Adapter-Routed Loader
Replaced loadGraphifySource with loadSource(adapterId, inputPath); now settings-driven via useSettingsStore, adapter-routed through sourceAdapterRegistry with null guard and not-implemented handling.
Source Adapter Settings Schema
Added SourcesSettings interface and sources slice to StarmapSettings with migration 90→91; default active adapter is self-graph-yaml-frontmatter; purely additive, no behavioral change.
Radial Inspector Arc Close
Landed-state audit of 4 v106 commits confirmed clean; semver bumped 0.12.0→0.13.0; LUMAWEAVE_NOW.md reconciled with v106 closed, v107 Source Adapters opening, architectural notes and all deferred items preserved.
Radial Inspector HTML/CSS Redesign
The inspector radial ring is rebuilt from SVG+physics to HTML/CSS with a viewport-clamped submenu panel, aurora gradient background, and a geometry scope picker for target-vs-global overrides.
Module Cards Now Show Completion Progress
Each module card on the bitmosh landing page now displays a color-matched progress bar in the lower-right corner of its banner image, reflecting each project's current completion percentage.
Code Spoke arc closes, enrichments deferred
v105 closes with Code spoke functional and demoable (inspect → source display → open in editor); enrichments deferred to build into new radial wheel design.
Multi-section chunking fix and config system
Fixes the critical bug where every document produced only one chunk, renames parse_warnings_json to parse_warnings, and adds a persistent config system with vault discovery, cerebra status, and a git-repo guard on init.
Phase 1 — Source Memory Foundation
Implements the full source ingestion pipeline — file discovery, type detection, markdown and text parsing, heading-based chunking with five explicit strategies, batch SQLite persistence, and idempotent re-ingest.
Phase 0 — Project Scaffolding and Governance
Establishes the governance floor for Cerebra v0.1: six Lattica primitives vendored, inspector event infrastructure, constitutional and leeway loaders, SQLite migration framework, and a working `cerebra init` command with full inspector event emission.
Get project root detects src-tauri CWD correctly
Fixed tauri dev CWD detection in get_project_root to pop src-tauri directory and return true project root, resolving absolute paths without the extra segment.
Open-in-IDE resolves absolute paths at runtime
Added runtime path resolution (Rust get_project_root + TS builder) to convert manifest's portable relative paths to absolute editor URLs, plus error visibility and editor picker UI.
HistoryTab renders overrides without race
Fixed useState+useEffect race in HistoryTab by deriving overrides via useSyncExternalStore, matching the override system's reactivity pattern.
E2E suite reconciliation — update stale specs, triage regressions, quarantine flaky
26 failing → 9. Stale tests from our own recent passes cleaned up. Flaky timing tests quarantined. 3 real regressions identified and flagged (NOT silently quarantined).
Merge IDE spoke into Code spoke (rename, delete placeholder, links under snippet)
The two-spoke redundancy is gone. IDE spoke (the real provenance/snippet feature) is now the Code spoke. Placeholder deleted. 9→8 spokes in the radial.
Sync provenance manifest (minimap targets) — parity green, Code spoke arc baseline
Provenance parity spec was RED (4 missing minimap targets). Re-ran generate-provenance — manifest went from 11 to 18 entries. Parity spec GREEN. v105 Code Spoke arc opens on a clean baseline.
Minimap arc close — bump 0.10.0 → 0.11.0, reconcile NOW.md, landed-state audit
v104 arc closed. Minimap shipped: snapshot, navigation (click-to-pan/drag-scrub/wheel-zoom), viewport rect (viewportToGraph + shared projection), Y-orientation correct across all 3 files. semver 0.10.0 → 0.11.0.
Minimap Y-flip consistent across snapshot/rect/nav (was upside-down + drag fly-off)
sigma renders Y↑ (large raw Y = top). All 3 minimap components used no-flip convention → snapshot upside-down, rect inverted, click-to-pan sent camera to garbage coordinates. Fixed with consistent Y-flip + coordinate-space-correct pan delta.
Minimap rect via viewportToGraph + snapshot projection (0.3 never landed; redo)
v104.0.3 did land viewportToGraph, but three bugs kept the rect wacky: effect deps caused constant cleanup during settle (clientWidth = 0), Y-axis inversion made rect appear off-screen below the minimap, and getDimensions() needed instead of clientWidth.
Minimap recomputes bounds during layout settle (was frozen at origin frame); snapshot + rect now cohere
Bounds were frozen at the early origin frame because afterRender only triggered on node count changes — not position changes (gwells uses setNodeAttribute("x"/"y")). Added delta-stability detection to drive recompute during settle then stop.
Minimap viewport rect — match snapshot projection, fix inverted Y, zoom-scaling, centering
All 3 viewport rect bugs (inverted Y, off-center, zoom-doesn't-resize) traced to one root cause: cam.ratio was in Sigma's normalized space, not attribute space. Rewritten to use sigma.viewportToGraph on viewport corners.
Minimap snapshot reads populated graph (was N0/E0); remove stale UI Inspector pill
Two bugs fixed. Minimap now shows the real graph (sigma readiness poll + afterRender count-change detection). Stale fixed-position inspector label removed from ThemeTargetInspectorOverlay — the status bar pill is the only one now.
Minimap navigation — click-to-pan, drag-scrub, wheel-zoom via __lwCameraController
Fills the useMinimapNavigation stub from v104.0.0. Click centers the camera on the clicked graph region (eased); drag scrubs instantly; wheel zooms. Viewport rect auto-tracks via afterRender. Snapshot doesn't redraw on camera moves.
Minimap integration — port prototype (shell, snapshot, viewport, navigation stub)
Ports the designed minimap prototype into src/. Non-interactive render layer (snapshot canvas, viewport rect, drag shell, opacity slider). Navigation ships in v104.0.1. Stale schema version in design doc corrected (88→89 → 89→90).
v103 arc close — bump 0.9.0 → 0.10.0, reconcile NOW.md, confirm tile E2E coverage
v103 arc closed. Graph theming (.0.x) + tile docking (.1.x) complete. package.json bumped 0.9.0 → 0.10.0. NOW.md reconciled to reality. Next arc: v104 Minimap.
Theme tile chrome + body via --lw tokens (was hardcoded); content inherits themed color/font
Applied the graph-rainbow lesson to tiles. Nine hardcoded rgba/hex literals across tile selectors replaced with --lw tokens; .tile-body given color+font baseline so content inherits themed text instead of bland browser defaults.
Activate docking engine — registry slot-anchors + tile mode/anchor migration
The docking engine was built correctly in v103.1.0 but had never run: it expects anchor.slot + mode:"docked", but all registry entries used anchor.offset and stored tiles had mode:undefined. Pure data/registry migration — no engine changes. Canvas tiles now dock.
Tile header UX — GripVertical handle, RotateCcw return-to-dock, popover z-index fix
Three UX fixes: (1) popover buried under tiles fixed (z-index 200→10100), (2) ⠿/⤴ unicode handles replaced with GripVertical (lucide), (3) broken anchor menu replaced with clean RotateCcw return-to-dock button.
Unified well-formed tile creation + reconcile missing default-visible tiles
Fixes two compounding bugs: tileOut was creating malformed tiles (no mode/anchor/visible), and graph-sources/graph-inspector were permanently stuck because they were added to the registry after the one-time bootstrap ran. Single creation helper + per-load reconcile fixes both.
Group neighbors reflow flush on resize release — resized tile anchors, neighbors close gap
Resizing a grouped tile left neighboring tiles static (gap/overlap). Fixed by re-snapping neighbors to the resized tile's new edges on release. The reflow is INVERTED from drag — the resized tile is the anchor; neighbors move to it.
Tile state consistency — close=hide, popover toggle fixed, group-reconcile, drag-flip seeds resolved position
Three interaction bugs silently missed by appearance-only smoke. All traced to precise lines and fixed with minimal scope. The acceptance gate is interaction smoke, not render.
Wire resolveLivePosition into render + snap/group + resize — tiles no longer strand off-viewport
The visible fix. All tile x/y reads now go through resolvedTilesArray so docked tiles use viewport-relative coords and floating/legacy tiles are clamped into bounds. Stranded tiles (x:3092 from ultrawide sessions) are pulled into view on next render without migration.
Tile docking schema + resolution layer — docked/floating model, viewport-relative, 9 unit tests, unwired
Builds the type schema and position math for a docked/floating tile model that fixes the off-viewport bug at its root. Docked tiles derive position from anchor+slot+live viewport (cannot strand). Floating tiles clamp persisted x/y on load/resize. Resolution layer is isolated — nothing rendered yet.
Accent uses WCAG 1.4.11 non-text criterion (3:1); per-criterion aggregation
Fixes over-failing of accent contrast. Accent is a UI/non-text color (WCAG 1.4.11, 3:1 bar) — it was being judged at the text criterion (1.4.3, 4.5 bar). Adds nonText option to computeWCAGResult and per-criterion aggregation, correcting void-circuit and agartha-dream from partial/AA to AAA.
WCAG badge reads single source of truth — card and top bar now agree
Safety-critical governance fix. The theme-card WCAG badge was computing a single flattering pair (textPrimary/bg — always AAA), while the top-bar StatusPill reads getAccessibilityProfile (4 pairs, honest multi-pair aggregate). Card now reads the same source as the top bar; they cannot drift.
Live recolor on theme change — no rebuild, cluster colors stay absolute, all 4 disconnects fixed
Adds useEffect([resolvedTokens]) following the active-mutate pattern. Re-applies style policy in-place on theme change — clustered nodes keep absolute color (D2), edges/no-cluster pick up new theme defaults. All 4 v103 graph theming disconnects now resolved.
Edges from theme edgeDefault — remove hardcoded literal
Replaces the hardcoded rgba(100,130,180,0.55) edge color literal with themeTokens.graph.edgeDefault (per-theme: solar=blue, obsidian=purple, midnight=amber, void=pink). Pre-flight trace revealed the style layer was already theme-derived; this fixes build-time to match.
Node color from cluster resolver — fixes the rainbow, raw.color per ownership contract
Wires the v103.0.1 resolver into buildGraphologyGraph. Replaces colorSuggestionEngine.pick("node-primary") — the arbitrary rotation that produced rainbow noise — with resolveClusterColor. Nodes are now colored by cluster/domain identity. raw.color set at build time per the ownership contract.
Cluster-color resolver — loadClusterColors + resolveClusterColor (semantic mode), unit-tested, unwired
Builds the cluster-color resolution layer in isolation. loadClusterColors() reads cluster-colors.json via direct Vite import (single source of truth). resolveClusterColor() returns the cluster's absolute hex or null. Four Playwright unit tests verify the resolver before any render depends on it.
v103 Graph Theming arc opener — color ownership contract + locked design decisions
Design-only arc opener. Re-derives and authors the GRAPH_COLOR_OWNERSHIP.md contract from real code (previously absent from the tree). Locks four design decisions (D1-D4) for the cluster-color mapping system. No code — establishes the foundation for v103.0.1+ which wire the resolver.
WCAG contrast correct-by-construction — culori parsing, no silent-black, text-size-aware levels, verified
Safety-critical fix replacing the hand-rolled WCAG impl with culori. Three defects eliminated: parse-to-black, wrong alpha math, AA-large as a normal-text level. All 3 callers reconciled; 6-pair reference table verified.
Theme card identity palette + WCAG contrast badge
Fixes Browse card palette strip to show theme identity colors (accent/bg/surface/text/border) instead of graph node-differentiation colors. Adds a per-card WCAG contrast badge (textPrimary-on-bg, level-colored AAA/AA/warn/fail).
Gitignore blog-bumper + tsconfig.tsbuildinfo; pin workspace root to silence lockfile warning
Updated .gitignore to exclude blog-bumper/ (sibling package) and tsconfig.tsbuildinfo (build artifact); configured next.config.mjs to pin outputFileTracingRoot and experimental.turbo.root to __dirname, preventing Next from inferring workspace root from stray lockfiles in ancestor directories.
Remove The System section; navbar reorg + Labs dropdown; pentagon hero graph with legible neon labels
Removed The System flow-diagram section from main page; reorganized navbar (Features removed, Labs dropdown added with Testing+Research); repositioned hero graph to pentagon layout with bright neon labels, dark strokes, always-on glow, and glitch hover.
DATAMOSH blog system — landing, workshop + personal channels, post pages, filters, CURRENTLY widget, mobile responsive
Complete /blog reimplementation with Velite collection, dual-channel architecture (workshop essays, personal off-air), static post pages, client-side filtering, real CURRENTLY widget integration, mobile-responsive layout, and dev-log breadcrumbs.
Browse card polish — themed graph thumbnail, 5-chip palette strip, wider grid, stronger sub-nav
Upgrades Browse cards from flat gradient swatches to themed SVG graph thumbnails + palette chip rows, sourced from real runtime tokens. Grid widens to 2-3 columns. Active sub-nav tab gains a 2px accent underline.
blog.bumper gets its home on the site
The site now surfaces blog.bumper as a released module with a refreshed module page, opens up the blog and dev-log navigation, and rounds out the socials — the tool that writes these posts finally has its own spot.
Theme menu missing stylesheet — Browse card grid, sub-nav tabs, Active token rows
Adds the missing CSS for v102.0.0's CategoryTheme, which shipped with correct logic but no stylesheet. Fixes Browse card grid, sub-nav tabs, Active token inspector, and stub placeholder — all using existing SettingsPanel.css token vocabulary.
Theme menu arc opener — Lucide icons, Browse+Active sub-areas, drill-collapse sidebar
Arc opener for v102. Migrates Settings category icons to Lucide, rewrites CategoryTheme with Browse (6 theme cards, double-click to apply) + Active (runtime token inspector), and adds Model-1 drill-collapse sidebar (icon rail on sub-area drill-in).
config tests cover palette and per-module color inheritance
Adds 11 tests for the palette config fields that landed in v0.3.0 but had zero test coverage — palette section, four global post_color fields, invalid hex rejection, round-trip through parseConfig, and global→per-module inheritance via resolveColors.
v101 ARC CLOSE — Tile Migration complete, 0.8.0 → 0.9.0, roadmap recanon to v102
Closes the v101 Tile Migration arc. Bumps production semver 0.8.0 → 0.9.0, recanons LUMAWEAVE_NOW to v102 (Theme Menu Integration), backfills all v101 pass SHAs, and sweeps accumulated v101 polish/security debt into the running log.
Solar Plasma tile restyle — warm purple, gold borders, Space Grotesk fonts
CSS-only palette pass replacing every hardcoded cool-slate hex in tile/group chrome with Solar Plasma tokens and warm fallbacks. Tiles now share the visual language of the top bar: purple gradient bg, gold-tinted borders and shadow, backdrop blur, Space Grotesk display font.
colorPrimary threads into the DevLogEntry card (version chip + bar)
The post's colorPrimary now reaches the MDX card — DevLogEntry's left border and version label inherit the same color as the page-header version chip, so colored posts are coherent end-to-end.
Close floating-tile click-interception — click-through E2E acceptance test added
Adds the click-through E2E test closing v101's named bug. CSS fix was already set (tile-layer { pointer-events: none }); pre-flight caught stale pass description. Uses elementFromPoint grid scan to prove click-through; tiles stay interactive.
Live group-bar preview during drag — bar drops out-of-range tile at BREAK_TOL threshold
Adds a draggingTileId signal to the context so deriveGroups excludes the dragged tile from membership and bbox when it's >BREAK_TOL from all mates. Bar drops live at the threshold; drag back and it reappears. Preview matches the real commit exactly.
pick your dev-log colors from your own site palette
Dev-log post colors — version, title, body text, and accent border — are now settable per module from your site's own palette, captured once and reused, so posts match your site on any theme.
Model-B tile drag, GroupBar snap/reconcile, fix minEdgeGap (groups now break)
Model-B drag (body-grab moves only the grabbed tile) makes BREAK reachable for grouped tiles. GroupBar release now snaps the cluster and reconciles membership. Fixes minEdgeGap with correct rectilinear hypot so groups break when dragged far horizontally at the same height.
Group-as-event, part A — explicit groupId membership, FORM/BREAK on snap drop
Replaces proximity-inferred grouping (computeGroups union-find) with event-driven membership. groupId on TileLayoutEntry is the source of truth; a group forms when a tile snaps flush on drop, breaks when dragged >BREAK_TOL away from all group mates.
Armed-only snap guide — gold edge line appears only when snap is within range
Wires the live snap guide so users can see when a snap is armed. The gold guide line appears only when findSnap returns non-null (within 15px of an adjacent edge) and vanishes the instant you're out of range. setSnapGuide is change-gated — no setState on every pointer-move.
CI repair — stylelint logical-css (warn), generate-graph step, Node 22
Fixed three CI failures: wrong stylelint plugin at ERROR severity replaced with stylelint-plugin-logical-css at warning, generate:graph step added before typecheck, actions bumped to Node 22.
Fix snap-back bug — drag handlers read live tile positions
FloatingTile.onUp read tile positions from ctx.tiles (stale render-snapshot), causing snap-back to pre-drag positions. Fixed by exposing getLiveTile/getLiveTiles on TileContextActions backed by getCurrentTiles(). SNAP_TOL bumped 9→15px.
Restore snap-on-release in FloatingTile (single tile + group bbox)
Restores snap-on-release for existing tile drags — stripped by fix/v86c-disable-snap, never re-added. onUp calls findSnap for single tiles and group bboxes, applying the per-axis result rigidly.
Per-axis edge snap engine, deduped findSnap, snap types
Replaced the broken corner-hypot findSnap (75px, Math.hypot, weighted distances) with correct per-axis edge detection (SNAP_TOL=9px). X candidates gated by Y-overlap; Y candidates gated by X-overlap. No cross-axis coupling. Updated CollapsibleSection.tsx call sites and cleaned up snap types.
Closer part B — resolve held docs + couplings, bump 0.7.0 → 0.8.0 (v100 arc close)
Four held items resolved: contract-trace matrix reclassified as data file; self-graph schema folded into SOURCE_ADAPTER.md; docPaths field dropped from SystemIndexRegistry; opt-out default documented. Semver bumped 0.7.0 → 0.8.0, v100 arc closed.
Closer part A — frontmatter normalization, archive stale state docs, relocate canonical docs
Canonical docs relocated from docs/_v100-rewrites/ to docs/canonical/; LUMAWEAVE_NOW.md moved to docs/ root. Frontmatter added to all 11 canonical docs and normalized. SESSION_AND_STACK.md archived (zero fold). All _v100-rewrites/ refs repointed to docs/canonical/ across 18 files.
Deferred + post-v1 vision docs consolidated into one canonical doc
Eighteen superseded docs archived across VGE, audio, dialect, and concept domains; replaced by DEFERRED_AND_POST_V1_VISION.md. Seven live refs repointed across QA registries, handleset taxonomy, motion safety contract, roadmap, graph intelligence, and SOURCE_OF_TRUTH.md.
Tile + layout workspace docs consolidated into one canonical doc
Two superseded tile/layout docs archived; replaced by TILE_AND_LAYOUT_WORKSPACE.md. No live ref repoints needed — only inbound refs were auto-generated indexes. Minimap_Integration.md was already absent from the repo.
Control plane + system index docs consolidated into one canonical doc
Eight superseded control-plane docs archived; replaced by CONTROL_PLANE_AND_SYSTEM_INDEX.md. Five source files repointed. CONTRACT_TO_CODE_TRACE_MATRIX.md held — validate-contract-trace.mjs reads it at runtime.
Source adapter docs consolidated into one canonical doc
Nine superseded source-adapter docs archived to prev99-archived/; replaced by the single canonical SOURCE_ADAPTER.md. Live refs in sourceAdapterRegistry.ts, QA registries, SOURCE_OF_TRUTH.md, and BACKLOG_POLICY.md updated to point to the new doc.
Gwells physics docs consolidated into one canonical doc
Fourteen superseded Gwells docs archived to prev99-archived/; replaced by the single canonical GWELLS_PHYSICS.md. Live refs in source files (engine.ts, seeder JSDoc, src/physics/gwells/README.md), three dialect docs, and SOURCE_OF_TRUTH.md updated to point to the new doc.
Graph/Sigma/Rendering docs consolidated into one canonical doc
Six superseded graph/sigma/rendering docs archived to prev99-archived/; replaced by the single canonical GRAPH_SIGMA_AND_RENDERING.md. Live refs in grammar-lens contracts, graph theme contracts, and QA registry updated to point to the new doc.
Theme & token system, one canonical doc
Consolidated the theme-system docs into one code-derived canonical doc covering the token model, the apply path, overrides, and the v87-v99 satellite modules.
Doc architecture + registry consolidation
First v100 refocus pass. Established the static/live documentation model and folded the registry and link-network docs into one code-derived canonical doc. Squared the baseline by archiving the pre-v100 historical doc pile.
config channels named, approve_channel lands as first-class field
changelog_channel replaces report_channel throughout the schema and CLI, and approve_channel joins the config as an optional field — so the bump-gate channel is declared in the config rather than looked up from a separate file.
post dates come from the Discord timestamp, not the agent's header
The post date now derives from the unfakeable Discord message timestamp in the configured timezone, instead of the date the agent writes in the report header — so evening posts stop landing under the wrong day.
the project registry becomes populatable and manageable
blog.bumper can now scan a directory of git repos, interactively enroll selected ones into a central registry, and manage them from the CLI — the groundwork that lets any developer point bumper at their own projects instead of a hardcoded module list.
module becomes a free string — registry unblock
The frontmatter module field changed from a fixed enum to a free string, so any enrolled project name is a valid module. This unblocks the project registry and lets blog.bumper tag posts for its own development.