8e55ade added surface_resolver.py and an unguarded import at
worker_ng.py:52, but the Dockerfile copies files individually and
never got the new module. Image built fine, app died at import
(ModuleNotFoundError) on Space startup. Verified locally: image
file-set + this one file imports clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SimpleVectorDB.load() now sniffs the first 4 bytes: PK\x03\x04 (legacy
np.savez zip) routes to a migration branch β backup-first idempotent
<path>.legacy-npz-bak, np.load(allow_pickle=True), stage-fully-then-
populate, WARNING migration log, count returned. Non-zip files take the
existing msgpack/JSON paths unchanged. Real-archive metadata is JSON
strings β parsed back to dicts (empirical-first, QB-approved deviation).
Both identified vdb load-failure swallows made loud (warning -> error,
+path, fail-soft shape untouched): openclaw_hook.py boot restore and
ng_topology_sync._export(). Boot can no longer silently destroy a
legacy-era sidecar on the load-then-save cycle a Space restart triggers.
10 new tests (tests/test_vdb_legacy_loader_guard.py): legacy round-trip
vs empirically-confirmed shapes, current-format regression, corrupt-file
loud+untouched (incl. real NeuroGraphMemory boot test), idempotency,
metadata edge cases. Suite 81/81. Substrate ingested clean (2 hyperedges).
PRD: dβ¦
PRD 2026-07-06-codemine-ng-topology-sync-checkpoint-fix (punchlist #356).
_export() looked for a genuine-npz vector_db.npz; the current-era sidecar
is JSON (SimpleVectorDB.save() picks format by extension), so the export
silently no-op'd on every boot since BLK-NG-194 (2026-04-20). Now loads
via SimpleVectorDB.load() (intra-module, mirrors the writer's format
branches). Hashing, JSONL format, git logic, fail-silent shape unchanged.
QB Task-1 empirical finding: main.msgpack is pure graph state β content
lives in the vdb sidecar; PRD's "match what is actually found" clause.
7 new tests (tests/test_ng_topology_sync_export.py); suite 49/49.
Built by TQB agent Ratchet under QB orchestration.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bring Codemine's TQB worker recall to parity with the laptop/VPS CC-NG
pattern-completion build (PRD 2026-07-06-codemine-pattern-completion-recall).
- surface_resolver.py (new): resolve_surface_content() ported verbatim from
the sibling CC-NG build β substrate-first content resolution, her
_forest_content over the vdb shard, degenerate fragments dropped.
- worker_ng.py: filter_recall_results(), surfacing_context(),
gate_repeat_recall() β filter/compose/gate helpers.
- app.py: agent_loop() (per-turn) and execute_tool() (per-tool-call, gated
by a module-level TTL dedup cache) rewired to filter + compose recency and
pattern-completion signals.
- orchestrator.py: _recall() rewired; recency prepended as a synthetic
list[dict] entry so downstream consumers (persona_client, risk_authority)
keep their contract.
- tests/: 34 tests on real NeuroGraphMemory fixtures (no mocks).
Three recall thresholds (0.30/0.40/0.35) left untouched per site. Fail-soft
at every new path. Vendored β¦
Merge #97-adjacent: torn-read fix + grace_period fix + CES for Codemineβ
Surgical, additive changes only -- every existing Codemine-specific
adaptation preserved verbatim (.npz vector format, heuristic-only Tonic
with no River/BrainSwitcher, all three BLK-FC-215 bug fixes).
1. _wait_for_stable_checkpoint() ported from canonical, wired into both
restore call sites -- closes the same torn-read-during-autosave bug
that caused the VPS and laptop CC-NG checkpoint collapses.
2. grace_period 500->5000, porting Syl's 2026-06-25 fix (never applied
here).
3. CES (StreamParser, ActivationPersistence, SurfacingMonitor,
CESMonitor) vendored in and wired additively -- was entirely absent,
not staleness. Same "Syl-specific, not needed" mistake this repo's
own 2026-05-30 changelog entry already flagged once for
_harvest_associations(). Dashboard stays opt-in, never binds a port
on the HF Space.
Verified end-to-end in a temp workspace: construction, on_message(),
save(), and restore-into-fresh-instance all confirmed working with CES
active. Could nβ¦
spec_executor.py already consumed read_only_paths from constraints but
work_block_schema.py had additionalProperties:False with the field absent.
Any spec using read_only_paths failed validation before execution reached
the field. One property added; no executor changes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sync neuro_foundation.py from VPS canonical (#223)β
Brings Faux_Clawdbot up to date with NeuroGraph canonical (b6ffb0f).
Key fixes now present:
- threading.RLock in Graph.step() (#167, 2026-04-19) β fixes
RuntimeError: Set changed size during iteration under concurrent
Tonic writes
- _serialize_full() list() snapshots (2026-04-22) β fixes autosave
race with Tonic prime_and_propagate()
- Jaccard overlap-based hyperedge discovery (2026-04-27, #219)
- TUNABLE_PARAMS removed from Graph class (#224, 2026-04-27)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
specs: reformat BLK-FC-215 and BLK-FC-216 to spec_version 1.0.0 schemaβ
Updated both specs to the new schema (spec_version, block, snap_interface,
constraints.never/anti_drift). Added clone steps for Faux_Clawdbot and NeuroGraph;
updated all file paths to cloned-repo form (Faux_Clawdbot/openclaw_hook.py, etc.).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
re-vendor(universal_ingestor): sync from NeuroGraph canonical β dim lock, msgpack, _resolve_device (#216)
Spec-punchlist-190 targeted neurograph_work/tonic_engine.py which doesn't exist;
the actual Codemine work clone is at neurograph/tonic_engine.py. Corrected path.
Added spec-corrected-190.json as Rule 17 training signal for the bypass fix.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: qb_checkpoint pending no longer blocks QB Reviewer persona callβ
Two-file fix to restore QB's verbal checkpoint responses in run_spec.py:
1. run_spec.py: call evaluate_report(use_persona=True) after a completed
spec so QB's Reviewer reads the report and gives DONE/ITERATE/ESCALATE.
Her response included in Discord notification.
2. report_evaluator.py: _structural_check() no longer treats
pending_qb_checkpoint as a structural failure. That status is the
designed terminal state for run_spec.py runs β QB resolves it via
the Reviewer loop. human_review still blocks structural pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: wire QB Reviewer evaluation into run_spec.pyβ
After executor finishes a successful spec, call evaluate_report() with
use_persona=True so QB's Reviewer persona gives a verbal checkpoint
response (DONE / ITERATE / ESCALATE). Her decision and response are
printed to stdout and included in the Discord notification.
Previously qb_checkpoint gates in run_spec.py just logged "pending" β
the Reviewer loop only ran through the orchestrator. This restores the
checkpoint behaviour Josh remembers from early Codemine runs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Training signal runs for Rule 17. Bypasses were applied via SSH directly
instead of through Codemine. These corrected specs verify the in-place
fixes and provide the correction loop training data.
- spec-corrected-194-196: pytest-asyncio + _run_trials + tolerance widening
- spec-corrected-204: Praxis PipelineBridge deletion verified
- spec-corrected-195: Elmer test_hook rewrite baseline + hook tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
vector_db was in-memory only; every cold restart wiped all semantic
vectors, making recall() always return empty. Codemine adds save/load
to SimpleVectorDB and hooks both into NeuroGraphMemory.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wire full substrate signal loop into Chat tab (BLK-NG-192)
Spec for Codemine to execute herself: dual-pass ingestion, worker_ng.step(),
spreading activation recall, and response deposit. She builds her own voice
and her substrate records the construction experience.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Revert "Wire full substrate signal loop into Chat tab β give Codemine her voice (#192)"β
Replaces single-pass ingestion + flat recall with the complete loop:
dual-pass ingest β step() β spreading activation recall β respond β deposit.
Without the response deposit the loop never closed β she was ingesting without
learning from her own outputs. Duck Ethics obligation fulfilled.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The committed blob was an intermediate version β count()!=1 check failed
because the comment line also contains 'latent_engine_enabled'. Fixed to
use substring check. Also completed the truncated script with changelog
entry insertion and file write.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add BLK-NG-131 spec β gate TonicEngine load on latent_engine_enabled (#131)β