Skip to content

Commit 36f1f6f

Browse files
Merge pull request #2 from justinlietz93/02-experimental
02 experimental
2 parents 7f72f34 + c023f5b commit 36f1f6f

48 files changed

Lines changed: 9773 additions & 329 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ venv/
99
runs/
1010
*.log
1111
.DS_Store
12-
reports
1312
.arachnid_scans
1413

1514
# Experiments

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ python -m vdm_rt.run_nexus --neurons 800 --hz 10 --domain biology_consciousness
5454
Artifacts land in `runs/<timestamp>/` by default:
5555

5656
```text
57-
events.jsonl structured runtime logs
58-
utd_events.jsonl explicit motor-event audit records when a motor port emits
59-
phase.json optional external control-plane input when present
60-
state_<step>.h5 checkpoint when --checkpoint-every is enabled
57+
events.jsonl.zst internal runtime dynamics as compressed JSONL
58+
motor_traces.jsonl.zst UTE, efferent, afferent, actuator, witness, and UTD trace rows
59+
phase.json optional external control-plane input when present
60+
state_<step>.h5 checkpoint when --checkpoint-every is enabled
6161
```
6262

6363
## Runtime boundaries

config/README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ Current files:
2424
- `learning.toml` - experimental REVGSP/GDSP adapter controls; the default SparseConnectome path does not yet satisfy their required substrate contract.
2525
- `scouts.toml` - void-walker scout budgets and per-scout enable flags.
2626
- `io.toml` - receptor queue, HTTP status, and Redis status output.
27-
- `logging.toml` - JSONL and zip spool limits. `events.jsonl` uses the
28-
`events_*` limits, names containing `utd` use `utd_*`, and other JSONL files
29-
use `log_*`; `roll_check_every = 1` enforces active-file caps after each write.
30-
`zip_spool = true` instead selects the zip-buffer strategy and uses
31-
`zip_buffer_bytes` and `zip_ring_bytes` for those standard writers.
27+
- `logging.toml` - JSONL-in-zstd runtime log limits. `events.jsonl.zst` uses
28+
the `events_*` limits, `motor_traces.jsonl.zst` uses `motor_trace_*`, and
29+
other compressed JSONL files use `log_*`; the MiB caps are enforced against
30+
the uncompressed JSONL payload size.

config/logging.toml

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
1-
# Runtime file logging and spool limits.
1+
# Runtime file logging and compressed JSONL segment limits.
22

33
[logging]
4-
# Choose the active-file strategy for standard event and UTD writers.
5-
# true: use zip_buffer_bytes/zip_ring_bytes and append rotated buffers to a zip.
6-
# false: use the category-specific rolling limits below and archive old lines.
7-
zip_spool = true
4+
# Runtime logs are JSONL records compressed immediately with zstd. Active files
5+
# use the .jsonl.zst suffix; archived rotated segments keep the same suffix.
6+
# Runtime records use tick for endogenous model time, and wall_time_s plus
7+
# run_elapsed_s for external clock time.
8+
compression = "zstd"
9+
zstd_level = 3
810

9-
# Rolling JSONL caps, in MiB where the name says mb. Zero line caps mean
10-
# "unset; use byte caps". Active files are checked after every write by
11-
# default, so small diagnostic runs honor these limits immediately.
11+
# Active compressed streams rotate when their uncompressed JSONL payload reaches
12+
# the configured MiB cap. Zero line caps mean "unset; use byte caps".
1213
#
13-
# Category selection is filename-based: events.jsonl uses events_*, files whose
14-
# names contain "utd" use utd_*, and all other JSONL files use log_*.
14+
# Category selection is filename-based: events.jsonl uses events_*,
15+
# motor_traces.jsonl uses motor_trace_*, and all other JSONL files use log_*.
1516
events_max_mb = 256
1617
events_max_lines = 0
18+
motor_trace_max_mb = 256
19+
motor_trace_max_lines = 0
20+
log_max_mb = 256
21+
log_max_lines = 0
22+
23+
# Retained for the plain JSONL debug writer only; the default zstd writer checks
24+
# rotation after every record.
1725
events_archive_segment_mb = 512
1826
events_archive_segment_lines = 0
19-
utd_max_mb = 256
20-
utd_max_lines = 0
21-
utd_archive_segment_mb = 512
22-
utd_archive_segment_lines = 0
23-
log_max_mb = 128
24-
log_max_lines = 0
27+
motor_trace_archive_segment_mb = 512
28+
motor_trace_archive_segment_lines = 0
2529
log_archive_segment_mb = 256
2630
log_archive_segment_lines = 0
2731
roll_check_every = 1
28-
29-
# Zip spooler byte caps. Values are exact positive byte limits; use a small
30-
# value for a quick local rotation test and a larger value for normal runs.
31-
zip_buffer_bytes = 1048576
32-
zip_ring_bytes = 65536

docs/contracts/runtime-cleanup-classification.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ entries:
197197
evidence:
198198
- The mapping skipped repeated symbols before creating indices.
199199
- The file was deleted from the importable runtime tree.
200-
- runtime/helpers/ingest.py no longer maps text into connectome indices.
200+
- runtime/helpers/ingest.py no longer maps text into connectome indices; it accepts only explicit receptor/stimulation node-index fields.
201+
- runtime/loop/main.py records successful explicit-index stimulation under trace_kind="stimulation" in motor_traces.jsonl.zst.
201202
- The source authority requires sequential, repetition-preserving receptor slices.
202203
follow_up: Replace with a bounded receptor-slice port when implementing the receptor rewrite; do not preserve the unique-symbol mapping.
203204

@@ -214,10 +215,11 @@ entries:
214215
- path: io/utd.py
215216
class: port
216217
state: motor_event_boundary_only
217-
role: Explicit motor-event audit boundary.
218+
role: Explicit UTD actuation producer for the sensorimotor trace.
218219
evidence:
219220
- Text emission, macro registration, macro persistence, and input echo behavior were removed.
220-
- UTD now records explicit motor events only.
221+
- UTD now records explicit actuation rows only, under trace_kind="utd_actuation" in motor_traces.jsonl.zst.
222+
- runtime/loop/main.py can forward emitted attached-actuator witness events through UTD; no default actuator implementation is installed here.
221223
- The source authority requires fixed actuator primitives and actuator events, not a text decoder.
222224
follow_up: Replace with an actuator-transducer contract during the motor rewrite.
223225

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Definitions
2+
3+
<!-- TODO: Definitions are stale here and should be expanded with links to the code files each metric is defined at -->
4+
5+
| Metric | Role in the runtime | Current source |
6+
| --- | --- | --- |
7+
| `active_edges` | structural load / active synaptic edge count | events, dashboard, H5-derived analyses |
8+
| `active_synapses` | structural activity proxy closely related to `active_edges` | events |
9+
| `connectome_entropy` | graph-distribution entropy / structural disorder metric | events, dashboard |
10+
| `vt_coverage` | traversal coverage fraction | events, dashboard |
11+
| `vt_entropy` | traversal/topic entropy | events, dashboard |
12+
| `b1_z` | boundary pulse / motor-gate proxy | events, dashboard, UTD `why` |
13+
| `adc_territories` | active hierarchy/territory count | events, dashboard, H5 `adc_json` |
14+
| `adc_boundaries` | boundary count in ADC summary | events |
15+
| `cohesion_components` | topological integration/fragmentation state | events, UTD `why` |
16+
| `sie_total_reward` | SIE-v1 aggregate reward-like signal | events |
17+
| `sie_valence_01` | normalized SIE-v1 valence | events, UTD `why` |
18+
| `sie_td_error` | SIE-v1 TD-like error channel | events |
19+
| `sie_v2_reward_mean` | SIE-v2 reward mean | events |
20+
| `sie_v2_valence_01` | normalized SIE-v2 valence | events, dashboard, UTD `why` |
21+
| `a_mean` | mean `a`/alpha-like field term | events |
22+
| `omega_mean` | mean omega-like field term | events |
23+
| `homeostasis_pruned` | number pruned in current step | events |
24+
| `homeostasis_bridged` | number bridged in current step | events |
25+
| `phase` | runtime phase label in event/UTD output | events, UTD `why` |
26+
| `ute_in_count` / `ute_text_count` | ingress counts | events, UTD |
27+
| `did_say` | offline say-event marker from UTD alignment | derived tick table |

docs/pages/getting-started/runtime-quickstart.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ PYTHONPATH=. pytest -q vdm_rt/tests
3333
A run directory contains structured runtime artifacts such as:
3434

3535
```text
36-
events.jsonl
37-
utd_events.jsonl
36+
events.jsonl.zst
37+
motor_traces.jsonl.zst
3838
phase.json
3939
state_<step>.h5
4040
```

docs/roadmap/motor-learning-system/IO_AUDIT.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ they must not be hidden by decoder removal.
2727
| `runtime/helpers/speak.py`, lexical state in `nexus.py`, and the lexicon save call in `runtime/loop/main.py` | deleted or removed | These callers made the prohibited decoder live. The release gate no longer composes content. |
2828
| `io/actuators/macros.py`, `runtime/emitters.py`, `runtime/helpers/macro_board.py`, and macro smoke output | deleted from the live output path | The macro registry and its canned text emitters were not an actuator basis. |
2929
| `io/actuators/thoughts.py` and thought smoke output | deleted | It had no runtime producer beyond optional smoke material and was not required provenance logging. |
30-
| `io/cognition/stimulus.py` and the text portion of `runtime/helpers/ingest.py` | deleted or disabled | The unique-symbol mapping is removed. `process_messages()` now counts messages only; it does not stimulate the connectome or echo through UTD. |
30+
| `io/cognition/stimulus.py` and the text portion of `runtime/helpers/ingest.py` | deleted or disabled | The unique-symbol mapping is removed. `process_messages()` does not map text. It accepts only explicit receptor/stimulation node-index fields, which the loop can pass to `SparseConnectome.stimulate_indices()`, and it does not echo through UTD. |
3131
| `io/ute.py` | boundary port only | UTE now exposes an explicit queue and no stdin, chat-inbox, or synthetic ticker source. |
32-
| `io/utd.py` and `runtime/helpers/emission.py` | boundary port only | The status/text/macro emission helper is deleted. UTD has no text or macro API and records only explicit motor events. |
32+
| `io/utd.py` and `runtime/helpers/emission.py` | boundary port only | The status/text/macro emission helper is deleted. UTD has no text or macro API and records only explicit `utd_actuation` rows in `motor_traces.jsonl.zst`. |
3333
| `io/logging/rolling_jsonl.py` | keep | Bounded external audit logging is allowed when it does not feed cognition or stand in for reafference. |
3434

3535
## Static Reachability
@@ -54,7 +54,11 @@ authoring under live runtime roots. It proves:
5454
1. No live output path imports the composer, speaker, lexicon, phrase bank, or macro emitter.
5555
2. The runtime has no release-time sentence composition or `say` macro path.
5656
3. Input receipt never causes outbound UTD emission.
57-
4. The remaining UTE and UTD surfaces are documented as incomplete receptor and actuator ports, not compliant motor-learning implementations.
57+
4. Explicit receptor-node indices can stimulate the connectome without restoring text mapping.
58+
5. The remaining UTE and UTD surfaces are documented as incomplete receptor and actuator ports, not compliant motor-learning implementations.
5859

5960
This audit does not claim that the future motor actuator, articulation trace,
60-
or sequential receptor is implemented. Those remain roadmap work.
61+
or sequential receptor is implemented. The live loop now records stimulation,
62+
efferent observation-node summaries, and optional attached-actuator witness/UTD
63+
handoffs into `motor_traces.jsonl.zst`; a default actuator implementation
64+
remains roadmap work.

0 commit comments

Comments
 (0)