Skip to content

0.8.2 (part A): Activity Monitor, lint unproven state, fuzz grid thresholds, installer hint - #28

Merged
BitmapAsset merged 7 commits into
mainfrom
feat/activity-monitor
Oct 14, 2026
Merged

BitmapAsset merged 7 commits into
mainfrom
feat/activity-monitor

Conversation

@BitmapAsset

Copy link
Copy Markdown
Owner

Part A of 0.8.2. No version bump, tag or release here; CHANGELOG entries sit under ## 0.8.2 - unreleased.

1. Activity Monitor (probbit monitor STRAND --open / --serve)

A compact, read-only page for one individual: a sortable, filterable table of the persona's declared traits, moods and (when present) drive channels, event-history traces, Δ against exactly the preceding event (a gap when its document is missing), and an inspector with the full distribution, units, range, source field and the event's why. Hold/follow, and separate states for replay divergence, stale receiver age, held view, paused/retired strand, persona-confidence hold, engine-unreleased trait and lost connection. Works for any persona read from the strand. Embedded in the binary, no external assets. Additive layout metadata caps.prediction_error (from expectation.pe_cap). The terminal view is unchanged.

  • Tests: 13 monitor unit tests (monitor::tests, incl. drive_metadata_preserves_declared_scales), 10 integration tests (probbit-cli/tests/monitor.rs), real-browser suite probbit-cli/tests/monitor_browser.mjs (run by the wasm job): sort/filter/search, keyboard, generic and traits-only personas, hold vs unreleased, declared caps, append, hold/follow, stale clock, pause/retire, disconnect/reconnect, missing documents, checkpoint bounds, identity reset, narrow layout.

2. persona lint: "unproven" state (exit 3)

When prove leaves a rule unknown and the default fuzz search finds no counterexample, lint used to report ok: true and exit 0. Now the document gains "unproven": [{id, rule, seeds_unknown, searched}], ok is false, stderr says "unproven, not broken", and the exit code is 3. 0 = every rule held or proved; 1 = unresolved contradiction or a counterexample (wins over 3); 2 = bad input, as before. In-repo callers: no script, Python, npm, MCP or CI caller of persona lint; tests and docs (README, docs/agents.md, docs/persona.md §5.5/§5.6 and the command table) updated.

  • Tests: lint_reports_an_unknown_unbroken_rule_as_unproven (unknown + unbroken → 3 with the list; proved → 0 with unproven: []; broken next to unproven → 1, both reported); lint_with_rules_proves_then_fuzzes_the_unknown_ones also asserts unproven: [].

3. Fuzz grid includes the thresholds

Every number literal in the rule's when and the habits' when on a number input is added to the search grid (as a fraction of that input's max, after the given points, each once) for persona fuzz, MCP probbit_persona_fuzz and lint's search; search.grid reports it. No schema change. Personas whose rules and habits read no off-grid thresholds get the same search byte for byte (the pinned fuzz goldens pass unchanged).

  • Test: fuzz_grid_includes_the_thresholds_of_the_rule_and_the_habits. A rule in force only at stakes 0.7 to 0.8 (between the default points 0, 0.5, 1) with --beam 0: grid [0,0.5,1,0.7,0.8], counterexample [{"stakes":0.7}] (before this change: grid [0,0.5,1], none found). Also covers dedup of an on-grid threshold and a max-100 input (habit 65 and rule 42 → 0.65 and 0.42).

4. install.sh PATH hint

When the install directory is not on PATH, the hint names the rc file of the user's shell: zsh ~/.zshrc; bash ~/.bash_profile on macOS, ~/.bashrc elsewhere; any other shell ~/.profile. Still POSIX sh. install.ps1 has no rc-file hint (it offers -AddToPath), so it is unchanged.

  • Test: scripts/bench/test_install_sh.sh step 8 checks five SHELL values (passes locally under sh and dash); scripts/tests/test_install_contract.py unchanged and passing.

5. Docs

CHANGELOG ## 0.8.2 - unreleased (Added / Changed / Fixed); README monitor section keeps the no-strand demo line; cheatsheet monitor rows updated.

Local: cargo test --workspace --locked 290 passed, 0 failed, 1 ignored; release build --locked; monitor browser suite ok; Python contracts 44 OK; npm wrapper 13 pass. MSRV 1.78 is checked by the msrv job.

prove left a rule unknown and the default fuzz search found no counterexample:
lint used to say ok:true and exit 0. It now lists the rule under "unproven"
({id, rule, seeds_unknown, searched}), sets ok:false, says "unproven, not
broken" on stderr and exits 3. Exit 1 (a counterexample or an unresolved
contradiction) wins over 3. Docs: persona.md §5.5, README, agents.md.
Every number a rule's when or a habit's when reads on a number input is added
to the search grid (as a fraction of the input's max, after the given points,
each once) for persona fuzz, MCP probbit_persona_fuzz and lint's search.
search.grid reports them. A rule in force only between two default grid points
(stakes 0.7 to 0.8) is now reached by the random search. No schema change.
zsh -> ~/.zshrc, bash -> ~/.bash_profile on macOS and ~/.bashrc elsewhere,
any other shell -> ~/.profile. POSIX sh as before; test_install_sh.sh step 8
checks each case under sh and dash. install.ps1 has no such hint.
…nd cheatsheet

README keeps the no-strand tutor demo line and dates the page; the cheatsheet
rows name the Activity Monitor page, --once and --demo week|drives.
@BitmapAsset
BitmapAsset merged commit c4822dd into main Oct 14, 2026
11 checks passed
@BitmapAsset
BitmapAsset deleted the feat/activity-monitor branch October 14, 2026 09:21
@BitmapAsset BitmapAsset mentioned this pull request Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant