Commit Graph

36 Commits

Author SHA1 Message Date
leetcrypt 1b6449b827 paper: fill RQ3 half of combined companion (post-seal, both tracks un-blinded)
Replace the HELD-BLIND RQ3 Results/Discussion + authoritative-Holm-7
placeholders in docs/stage-07-companion-methods.md with real numbers read
from the sealed record only (rq3-confirmatory-analysis.json e09c66ef…):

  RQ3-P1-perf   -0.6pp  CI[-1.58,+0.39]pp   -> H0 (no +10pp agent margin)
  RQ3-P1-latency -13.5ms CI[-52.1,+34.9]ms  -> within 100ms budget
  RQ3-P2 AUC     0.587  CI[0.458,0.703]      -> fingerprint NOT excluded
  RQ3-P3 = H0 (perf fails AND P2 fails)

Authoritative Holm-7 (family size 7, supersedes lead partial embedding, D3):
survivors RQ1-P1 / RQ2-P1 / RQ2-P3; non-survivors RQ1-P2 / RQ3-P2 /
RQ3-P1-perf / RQ3-P1-latency. RQ2-P3 slot carries the mechanism-corrected
primary p, not the lead degenerate p=1.

Calibration disclosure carried: the 0.93 RQ3 calibration AUC is regime
discrimination (churn kp30 vs kp5), distinct from the 0.587 confirmatory
selector-vs-selector fingerprint — no HARKing, detectors frozen.

RQ2-P3 half not re-litigated (kept as filled at e0d865d). Nulls reported
openly as results. Frozen lead prereg f22331a72e… and RQ2-P3 prereg
8db4e8a7… both intact. $0/offline, worktree-only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-22 08:53:50 -07:00
leetcrypt e0d865d012 docs: fill RQ2-P3 half of combined companion paper from sealed record
Post-seal, un-blinded fill of the RQ2-P3 mechanism track in the combined
companion paper (D3), matching the lead paper's post-seal discipline. RQ3
remains fully HELD-BLIND (battery still running; progress read by sidecar
count only).

- §3: FREEZE-PENDING -> FROZEN 2026-07-21 (prereg SHA 8db4e8a7...)
- §5 Results (RQ2-P3): H1 rho=+0.6244 CI[+0.5941,+0.6545]; H2 slope=+0.7052
  CI[+0.6195,+0.7903] (n=270, run-level cluster bootstrap); H3 RESOLVED=MIX;
  Holm own {H1,H2} both reject. Effect+CI, never bare p.
- §6 Discussion: shared-pool concentration RAISES anonymity (mix), refuting
  the naive funnel; honest qualification/correction of the lead RQ2-P1
  "shrink" as a unique-bridge (fresh-bridge-per-circuit) artifact, per
  note-unique-bridge-artifact.md + frozen mechanism prereg. Mandatory
  disclosure: §7 dry-pass previewed direction (rho 0->+0.838); hypotheses
  were pre-committed two-sided.

RQ3 Results/Discussion and the authoritative Holm-7 stay HELD-BLIND until
rq3-battery-results.json lands. Lead RQ2-P1 + frozen lead prereg untouched.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 21:20:03 -07:00
leetcrypt fa6a9a7edc RQ2-P3 STEP 1: FREEZE prereg (§10 signed, sidecar SHA-256)
Operator-authorized freeze sign-off (Andre delegated per-gate command
authority to the overseer 2026-07-21). Froze rq2p3-mechanism-prereg.md
AS-IS — no hypothesis or parameter changed; the §7 re-word already landed
at 7ab3466. §10 records FROZEN 2026-07-21, delegated approval, and the
locked levels B∈{2,4,8}, alpha∈{0,1.0,2.0}.

SHA convention mirrors the lead prereg: full-file sha256sum stored in a
sidecar (rq2p3-mechanism-prereg.sha256 = 8db4e8a7ac60…), not embedded
inline, to avoid the self-referential fixpoint. Lead prereg SHA
f22331a72e… re-verified intact (recomputed — unmoved).

Defensive-measurement instrument only; no confirmatory data collected in
this stone. Worktree-only on feat/sor-consent-relay.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 20:46:44 -07:00
leetcrypt 50b1701e6a docs: QA prose fix — attribute lead RQ1-P1/RQ2-P1 raw p to the lead paper
Bounded companion-methods QA (blinding / citation-grounding / FREEZE-PENDING all
clean). Prose-only clarification, no number changed: mark the stray raw p ~ 0 as
the lead paper's already-published RQ1-P1/RQ2-P1 result so it cannot be misread as
a held companion figure. HOLDING — awaiting operator freeze (RQ2-P3 §10) / GO
(RQ3 live grid).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 20:24:05 -07:00
leetcrypt 4f89a9017d docs: companion methods scaffold (BLIND) — RQ2-P3 mechanism + RQ3 churn
Draft the companion METHODS data-independent and blind, mirroring the lead-paper
SS4 discipline: methods drafted, all Results/Discussion HELD-BLIND. No confirmatory
run, no confirmatory number.

- Two standalone methods sections (paper structure left OPEN — operator editorial
  call): (A) RQ2-P3 funnelling-mechanism study, header marked FREEZE-PENDING since
  its prereg §10 is unsigned — pool instrument, B×alpha manipulated-IV design,
  two-sided H1/H2/H3, run-level cluster bootstrap, re-worded §7 gate (cites
  stage-05-rq2p3-gate-clarification.md); (B) RQ3 companion from the frozen prereg
  §3/§4 — qwen2.5:3b + reproducibility caveat, churn kp=30/steps=20, frozen
  RQ3-P1-perf/latency/RQ3-P2 gates, Holm-7-supersedes note.
- Intro/Related-Work deltas (unique-bridge/mix mechanism; churn-resilience +
  rebuild-fingerprint motivation), reusing only grounded lead citations plus
  Barton2025 from the frozen prereg's RQ3 DV.
- The only numbers written are already-produced CALIBRATION gate values, each
  labelled calibration not result (RQ2-P3 dry preview mix; RQ3 churn-bites +
  classifier calibration). Results/Discussion are HELD-BLIND placeholders.

HARD HOLDS: RQ2-P3 awaits §10 human freeze; RQ3 awaits operator-GO + live grid
(added-latency is live-only). Frozen lead prereg f22331a72e… untouched; no HARKing;
containment synthetic/offline, $0; worktree-only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 20:17:59 -07:00
leetcrypt 7ab3466878 RQ2-P3: re-word §7 calibration gate (naive→mechanical mix), re-run GREEN
Operator ruling (Andre, 2026-07-21): the STOP was correct and the diagnosis
right — §7 items 1-2 did not fail because the instrument is broken, but because
they were worded under the naive-funnel prior. Under the ratified posterior the
pool is a MIX (shared bridge → shared exit_signature → larger anonymity set →
higher H). Corrected pre-freeze, logged transparently (no HARKing).

- rq2p3-mechanism-prereg.md §7: item 1 re-anchored on the FROZEN bridge-federated
  branch (injective fresh-bridge → m_i=1 → H≈0, constant c=1/C — a pool draws with
  replacement so it cannot reproduce the zero-variance degeneracy); item 2 B=1 →
  c=1.0 AND high H (maximal mix, "low H" refuted by construction); added a §7 scope
  note (the gate validates the INSTRUMENT and must NOT pre-assert the H-vs-c sign —
  that stays the two-sided confirmatory question H1/H2). Confirmatory hypotheses
  unchanged.
- docs/stage-05-rq2p3-gate-clarification.md: dated deviation-rationale log (cites
  the dry-pass output, no number invented; records the two-sided direction-agnostic
  pre-commitment is untouched; the mix ρ 0→+0.838 is an exploratory finding that
  strengthens note-unique-bridge-artifact.md).
- rq2p3_calibration.py: item-1 teeth moved to frozen_branch_regression() on the
  untouched bridge-federated branch; item-2 now asserts c=1.0 AND high H; added
  all_pass aggregate. confirm.py/stats.py/confirm_load_rq2.py untouched.

Re-run: all four gate items PASS with real teeth (all_pass=True). Synthetic/DRY
only, no confirmatory record read. FREEZE STAYS A HUMAN GATE: §10 empty, no
confirmatory RQ2-P3 cell until operator records the SHA-256 + signs off. Lead
prereg SHA f22331a72e... untouched; worktree-only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 19:48:55 -07:00
leetcrypt 1c6063248f docs(sor): follow-up plan — RQ2-P3 mechanism prereg + RQ3 run-brief + unique-bridge artifact note
RQ2-P3 mechanism study (NEW prereg, approved-path/params-locked, not yet frozen):
pool-based willing-bridge instrument, concentration swept as a manipulated IV
(B∈{2,4,8}×α∈{0,1,2}), two-sided/direction-agnostic, run-level cluster bootstrap.
RQ3 companion run-brief (execution-freeze for the already-frozen RQ3): agent=qwen2.5:3b
local Ollama, churn kill_prob=30/steps=20, baselines + Holm-7 completion pinned.
note-unique-bridge-artifact.md: on-record analysis that the lead RQ2-P1 shrink is plausibly
a fresh-bridge-per-circuit artifact (unique exit-signature -> singleton set -> H~0), and that
realistic bridge reuse (a mix) may raise anonymity -> the mechanism study may qualify the lead
RQ2 headline. No edit to the frozen prereg or committed lead paper.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 17:54:05 -07:00
leetcrypt 9d0dc5c183 SS5: adversarial review of the filled paper — 1 mechanism defect fixed
Self red-team of the SS4-filled lead paper against the sealed SS3 results
(no new statistic, no raw-data touch, frozen prereg untouched). Documented in
docs/stage-08-adversarial-review.md.

PASS: number fidelity (every §5 figure matches stage06-results.json), Holm
arithmetic (family=7, multipliers 7/6/5/4, only RQ1-P1+RQ2-P1 survive @ .05),
spin/over-claim (no-leak framing for the below-chance AUC, honest-negative
reported with equal prominence, lab-scope disclaimers), blinding integrity
(§5-6 filled once post-seal), method faithfulness (bit-faithful --verify).

Defect fixed (prose only, ZERO numbers changed): RQ1-P1's marginally
below-chance AUC was incorrectly attributed to a bridge "padding stream
flattening" the profile. assembler.py sets padding_applied=(bridge==
"on+padding"), so the RQ1-P1 bridge-on NO-PAD arm carries no cover stream.
Corrected docs/stage-06-analysis.md and paper §5.2/§6 to state the offset is
an unexplained pooled-correlator artifact, explicitly not a padding effect.
Point estimate, CI, gate decision, and Holm outcome are unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 01:02:02 -07:00
leetcrypt f4e1975daa SS4: fill lead-paper Results/Discussion from the frozen §6 pass
Populate docs/stage-07-paper-draft.md §5 Results + §6 Discussion ONCE, after
the battery sealed, from the single SS3 inferential pass — the blind-authored
§1–4/7 are unchanged. Abstract + §1 contributions updated to the honest
double-null/negative headline.

- §5.1 calibration gate PASS (known-linked AUC 1.0000, unlinked 0.5036).
- §5.2 RQ1-P1 AUC 0.466 [0.452,0.480] = anomaly-below-chance (NO leak);
  RQ1-P2 ΔAUC +0.011 [−0.002,+0.023] padding-ineffective (moot).
- §5.3 RQ2-P1 ΔH −0.96 bits [−1.06,−0.86] SHRINK, reported with equal
  prominence (not reframed as "helps"); RQ2-P3 ρ=0 degenerate/inconclusive.
- §5.4 Holm table (family=7, report-4); only RQ1-P1 + RQ2-P1 survive @ .05.
- §6 honest interpretation; §7 adds the funnelling-degeneracy limitation;
  §8 marks the RQ2 posterior + RQ1-P2 pairing ratified and notes the
  bit-faithful RQ1 bootstrap.

No spin, no re-slicing, no post-hoc subgroups. Frozen prereg SHA intact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 00:58:50 -07:00
leetcrypt 33b82b39ca SS3: frozen §6 confirmatory pass on real 180/180 — honest null/negative
One auditable, deterministic run of the four lead-paper §6 tests on the
frozen raw battery. Calibration gate PASS (linked AUC 1.0000, unlinked
0.5036 on §5 fixtures) → AUCs reportable.

- RQ1-P1 (bridge leak): AUC 0.4660 CI[0.4523,0.4798] = anomaly-below-chance.
  NO measurable leak; Holm-sig but in the WRONG direction (not evidence of
  linkability).
- RQ2-P1 (federation): ΔH −0.9587 bits CI[−1.056,−0.864] = SHRINK. Holm-sig
  HONEST-NEGATIVE — federation reduces the anonymity set (opposite of RQ2's
  motivation); reported with equal prominence per §6 two-sided framing.
- RQ1-P2 (padding): ΔAUC +0.0113 CI[−0.0025,+0.0234] padding-ineffective
  (raw p 0.091, Holm adj-p 0.456, not rejected).
- RQ2-P3 (funnelling): Spearman ρ=0, zero-variance concentration =
  as-instrumented degeneracy flagged in advance; inconclusive.

Holm family=7 report-4 (multipliers 7,6,5,4); only RQ1-P1 + RQ2-P1 survive.
Ran ONLY the pre-registered tests — no re-slicing, no post-hoc subgroups.

Method faithfulness: RQ1-P1/P2 CIs use a bit-faithful fast numpy bootstrap
(frozen O(n²)-per-fold jackknife intractable at n=75000); stage06_run.py
--verify proves both == frozen stats.bootstrap_ci bit-for-bit (point/lo/hi/
method within 1e-12, incl the average-rank tie path). RQ2-P1/P3 stay on the
frozen confirm.* paths (tractable). Frozen prereg SHA INTACT.

Artifacts: docs/stage-06-analysis.md (methods-faithful narrative, Holm table,
CONFIRMATORY/EXPLORATORY labels, nulls reported honestly) + force-added
output/…/analysis/stage06-results.json (regenerable via stage06_run).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-21 00:55:44 -07:00
leetcrypt a7c5eb221d SS3(RQ1-P2): freeze-derived run_index paired bootstrap + loader wiring
Pairing ruling (docs/stage-05-rq1p2-pairing-clarification.md, RATIFIED-by-
derivation, made while BLIND): the frozen §6 L197-198 "paired" bootstrap pairs
the bridge-on (no-pad) and bridge-on+padding arms BY RUN INDEX — the only
balanced pairing the R=30 (§4 L111) interleaved (§3 L97) design supports; the
§4 L108 RQ1 unit is AUC over the (entry,exit) pair set, so the pairable unit is
the run, not the circuit. Prereg SHA untouched (f22331a72e…).

confirm_load.collect_rq1_p2_paired feeds one confirm.PairedCircuit per shared
run_index into the FROZEN confirm.rq1_p2_padding (§6 arm-level ΔAUC preserved);
per_run_delta_aucs exposes the auditable per-run ΔAUC_i; missing-arm indices are
unpaired (frozen R not redefined). Unit-tested on SYNTHETIC pcaps only
(prereg §2 blinding — unblocks CODE not RESULTS); full SOR suite 176 passed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-20 09:14:12 -07:00
leetcrypt bd7e3764dc SS3: RQ2 rule RATIFIED + offline sender-posterior loader (synthetic-tested)
Flip docs/stage-05-rq2-posterior-clarification.md PROPOSED->RATIFIED (operator
Andre, 2026-07-20, ratified while BLIND to RQ2 data — honest prereg-completion of
a gap the freeze left, not HARKing). Substance of the construction unchanged.

Add cmd_chat/sor/analysis/confirm_load_rq2.py: reconstructs each circuit's spec
OFFLINE from the persisted per_circuit_seeds via deterministic assemble(), derives
the observation-consistent anonymity set A_i (uniform / max-entropy -> [1]*m_i),
per-circuit Miller-Madow H_i, and the willing-bridge concentration series — the
exact inputs confirm.rq2_p1_delta_h (ΔH, two-sided) and rq2_p3_funnel (Spearman ρ)
consume. Grounded only in the ratified rule ([Serjantov2002]/[Diaz2002]).

BLINDING preserved (prereg §2): ratification unblocks CODE, not results. The
collect_* real-data entrypoints are BLIND-GATED and NOT run; the reconstruction is
unit-tested on SYNTHETIC specs/seeds only (test_sor_confirm_load_rq2.py, 6 passed;
full SOR suite 172 passed). Frozen prereg untouched; no RQ2 statistic computed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-20 08:49:51 -07:00
leetcrypt 4976aed3e5 SS4: data-independent lead-paper draft (G4+RQ1+RQ2), written blind
docs/stage-07-paper-draft.md — Abstract skeleton, Intro (consent-gate novelty
G4 + RQ1 bridge-leak / RQ2 funnelling motivation), Related Work, full Methods
from the frozen prereg §2-§6, Limitations §7, References. Results/Discussion are
HELD-BLIND placeholders (battery still running, zero confirmatory numbers seen);
RQ2 subsections additionally gated on the pending posterior-construction
ratification. Frozen prereg untouched; no RQ2 statistic computed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-20 00:20:30 -07:00
leetcrypt a254267e1a docs(sor): PROPOSED stage-05 RQ2 per-circuit posterior clarification (blind)
Overseer ruled DIRECTION=A: fill the specification gap the frozen prereg
left on RQ2's per-circuit adversary sender-posterior, rather than
silently redefine the DV (B) or relabel a confirmatory test (C).

Proposes: adversary observes a circuit's exit-bridge/house and forms a
uniform posterior over the observation-consistent anonymity set A_i;
per-circuit H_i = Miller-Madow(log2 m_i), with S=2^H [Serjantov2002] and
d=H/log2 N [Diaz2002] as the cited normalizations. Makes RQ2-P1 (two-
sided ΔH) and RQ2-P3 (Spearman) computable OFFLINE from the immutable raw
records (per_circuit_seeds + deterministic assemble()).

Status PROPOSED — operator ratification pending. Pre-specified BLIND
(2026-07-20, battery running, zero RQ2 statistics computed) so this is
honest pre-registration completion, not HARKing. Frozen prereg untouched;
sign not presumed (honest-shrink reported with equal prominence).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-20 00:14:32 -07:00
leetcrypt 6d61c53152 RQ1+RQ2 start-line: live per-cell condition assembler + guarded launcher + Holm ratification
Wire the live per-cell condition assembler (cmd_chat/sor/assembler.py): compose
the existing R1/R4/R5/R6 pieces into a condition-encoding CircuitSpec per frozen
§2 cell, so a cell_id maps to a genuinely distinct, ForwarderPlan-gated
(engine != local) isolated circuit rather than the plain 3-hop control:
  - RQ1 bridge-on / on+padding insert a live bridge hop (+ R1 PADDING stream);
  - RQ2 bridge-/directory-federated genuinely span >= 2 houses
    (federation.select_federated_path, split-knowledge).
Plans only: opens no socket, moves no traffic, stands up no engine.

battery.assembler_dry_check validates on FIXTURES (6/6 cells distinct
fingerprints, all isolation-gated, same (cell,seed) reproduces, RQ1 bridge +
padding arms live, RQ2 federation >= 2 houses); write-once, kept out of any
confirmatory data dir. confirmatory_run preflight now runs it; the --operator-go
path no longer refuses cells as "not wired" — triple-lock + green preflight HOLD
on grid completion, then surface the operator's immutable data-run gate. No
confirmatory cell is ever fabricated.

Start-line instrument-validation gate (cmd_chat/sor/gate.py), grid + containment
pin (grid.py), and the guarded launcher (confirmatory_run.py) land alongside.

Holm: hold family_size = 7, report the 4 RQ1/RQ2 tests -> multipliers 7,6,5,4.
This is the pre-registration, not a deviation (prereg §6 [APPROVAL] size-7 family
+ D6 disclosure in the lead paper); docs/stage-05-holm-clarification.md marked
RATIFIED. RQ3-fold and alpha-split declined.

Containment intact; prereg untouched (SHA f22331a72e...); worktree-only. output/
gitignored (runtime artifacts, never source). Full SOR suite 156 passed. No
confirmatory data collected — the live data run remains the human gate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-19 20:49:12 -07:00
leetcrypt c9aa4a68ad merge: fold benchmark + pseudonymous-attribution into main
CI / rust client (hh) (macos-latest) (push) Has been cancelled
CI / rust client (hh) (ubuntu-latest) (push) Has been cancelled
CI / rust coverage (push) Has been cancelled
CI / python server (3.10) (push) Has been cancelled
CI / python server (3.11) (push) Has been cancelled
CI / python server (3.12) (push) Has been cancelled
CI / headless e2e smoke (push) Has been cancelled
CI / dependency audit (push) Has been cancelled
CI / secret scanning (push) Has been cancelled
Integrate the laptop feature branch (multi-language capability benchmark,
model picker, and ESA-style pseudonymous file attribution) onto the current
church main (native AI harness, podman/vbox sandboxes, † theme). Only conflict
was the help/status line — kept the newer podman grammar + /help, spliced in
/export-signed, and aligned attribution strings to the † sigil.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-11 11:22:58 -07:00
Claude (hack-house) f4180edf61 feat(attribution): pseudonymous file attribution (ESA-style)
Adapt Princess_Pi's Encrypt-Share-Attribution scheme so shared files are
anonymous but provably attributable.

A. In-session: a persistent Ed25519 persona key (~/.config/hack-house/
   persona_ed25519) signs every /send and /sendroom offer over the content
   hash; receivers verify it and see the persona fingerprint. Optional
   --attest <passphrase> attaches a revealable SHA-512(pass||sha256)
   commitment. Additive JSON — wire-compatible with the Python client.

B. Portable: /export-signed <dir> packages a directory into Princess_Pi's
   exact ESA 7z (fresh per-round Ed25519 sig over an inner 7z, SHA-512
   checksums, bundled verify scripts). Builder embedded from
   hh/tools/esa/esa_build.sh; verifiable with just bash+7z+ssh-keygen.

Tests: 45 pass (3 new persona). ESA archive build + verify-everything.sh +
passphrase reveal verified end-to-end.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 12:28:07 -07:00
leetcrypt 0c04ac74ee chore(theme): swap ⛧ sigil for † across UI, scripts, docs
CI / rust client (hh) (macos-latest) (push) Waiting to run
CI / rust client (hh) (ubuntu-latest) (push) Waiting to run
CI / rust coverage (push) Waiting to run
CI / python server (3.10) (push) Waiting to run
CI / python server (3.11) (push) Waiting to run
CI / python server (3.12) (push) Waiting to run
CI / headless e2e smoke (push) Waiting to run
CI / dependency audit (push) Waiting to run
CI / secret scanning (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-09 15:44:55 -07:00
leetcrypt 0b1d09f0b5 feat(ai): visible native harness — PTY mirror + readable chat
Display-mirror hybrid (docs/plan-harness-visibility.md §2): native tool
calls now show up in the shared sandbox terminal again via inert `# `-
prefixed comment lines (comment-prefix = anti-double-run/anti-escape),
mirroring only each command. Chat de-flooded to opener + final summary.
write_file mkdir -p parent dir so relative/absolute paths both work
(fixes the regression where script creation silently failed). ui.rs
fmt_line returns Vec<Line> splitting on \n so multi-line agent output
renders as an indented block instead of one garbled row.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-09 15:44:40 -07:00
leetcrypt e49dbca451 refactor(ai): strip Goose harness (Phase 1) — native/simple host-side only
CI / rust client (hh) (macos-latest) (push) Waiting to run
CI / rust client (hh) (ubuntu-latest) (push) Waiting to run
CI / rust coverage (push) Waiting to run
CI / python server (3.10) (push) Waiting to run
CI / python server (3.11) (push) Waiting to run
CI / python server (3.12) (push) Waiting to run
CI / headless e2e smoke (push) Waiting to run
CI / dependency audit (push) Waiting to run
CI / secret scanning (push) Waiting to run
Remove the Goose agentic harness across the codebase per
docs/spec-native-harness.md §3. Goose made N sequential model calls inside the
sandbox (slow on CPU-only hardware) and forced an in-container→host Ollama
gateway that tripped the rootless-Podman slirp4netns loopback bug.

- bridge.py: delete _run_goose/_goose_argv/_goose_present + GOOSE_* consts and
  the present-cache; __init__ now takes harness="simple"/max_turns=5; granted
  !task runs _run_simple until the native loop lands (Phase 2).
- __main__.py: --harness {native,simple} (was {goose,simple}); drop
  --goose-max-turns, add --max-turns; default harness simple.
- app.rs: /ai start accepts native|simple (plain aliases simple) instead of a
  bare plain flag; refresh harness comments.
- sbx.rs: remove the in-container Ollama gateway (Docker host-gateway / Podman
  slirp4netns host-loopback) and the dk_bootstrap OLLAMA_HOST env — kills the
  slirp4netns loopback bug; drop Goose comments.
- bootstrap.sh: drop goose from the prereq probe.
- bootstrap-ai.sh: remove the entire Goose install block, --no-goose flag,
  GOOSE_INSTALLER_URL, host config writer, and goose_bin helper.
- sandbox-bootstrap.sh: remove the in-sandbox Goose binary install + config.
- spec-goose-harness.md: banner — harness portion superseded; Podman stays.

cargo check + py_compile clean. No Goose refs remain (headroom/ untouched).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-08 13:03:41 -07:00
leetcrypt cf6b0b5b73 fix(ai): agent reconnects instead of vanishing; spec the native harness
CI / rust client (hh) (macos-latest) (push) Waiting to run
CI / rust client (hh) (ubuntu-latest) (push) Waiting to run
CI / rust coverage (push) Waiting to run
CI / python server (3.10) (push) Waiting to run
CI / python server (3.11) (push) Waiting to run
CI / python server (3.12) (push) Waiting to run
CI / headless e2e smoke (push) Waiting to run
CI / dependency audit (push) Waiting to run
CI / secret scanning (push) Waiting to run
The /ai agent held a single, un-shielded websocket with no retry. Any
close — server restart, ping/idle reap, laptop sleep, a transient blip —
ended the serve loop, so run_async returned and the process exited
silently: the agent dropped from the roster with no /ai stop and no
goodbye.

- run_async now wraps the connection in a backoff-reconnect loop (1s→30s,
  resets after a healthy ≥30s session). The server frees our session+name
  on drop, so each attempt re-runs SRP to mint a fresh token. Only Ctrl-C
  / process kill (KeyboardInterrupt / CancelledError, how /ai stop ends
  us) breaks the loop.
- _serve shields each frame via _handle_frame so one malformed/poisoned
  frame — or a handler error — can't unwind the loop; ConnectionClosed
  and cancellation propagate up to the reconnect loop.
- Forgiving keepalive (ping_interval=20, ping_timeout=60) so a heavy
  CPU-only Ollama generation doesn't trip a false drop.

Also adds docs/spec-native-harness.md: replace the heavyweight Goose
harness with a lightweight host-side Ollama-native tool-calling loop
(model runs host-side, only commands exec in the sandbox — the
slirp4netns→host-Ollama bug disappears), and a file-by-file plan to strip
all Goose integration. Supersedes the harness portion of
spec-goose-harness.md (Podman backend stays).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-08 12:49:04 -07:00
leetcrypt ad13ec14ba docs(sandbox): specs for goose harness + GUI distros, command ref, themes
Add the goose-harness and sandbox-distros-GUI design specs, a consolidated
command reference and demo-reels plan, the AI-harness planning note, and
two new client themes (blue-orange, pink-red-gray).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-08 10:38:36 -07:00
leetcrypt eec1714735 feat(layout): input-bar + chat/clergy resize, masked sudo-for-docker, edit-mode unlock
Make the message-input bar part of the F5 resize cycle so its height is
adjustable without a sandbox (multi-line/wrapped inputs are now readable),
and let chat/clergy borrow height from the compose box when no terminal is
present. Add Option C masked sudo prompt that feeds `sudo -S` over stdin to
install/start Docker — the password never reaches chat, the PTY, or outbound
frames, and Docker Desktop on Linux is detected so no sudo is requested.

Fix a freeze where clicking the compose box entered layout-edit mode and
silently swallowed every keystroke: clicking the input bar no longer enters
edit mode, and typing any printable char now drops out of edit mode and types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-07 16:10:27 -07:00
leetcrypt 2ae4adfde4 docs(layout): spec for BSP pane tree (resize panes in both dimensions)
Design for replacing the two-scalar layout (pty_pct + roster_width) with a
binary space-partition pane tree so every pane is resizable on both axes,
fixing the "only roster width adjusts" limitation. Rolls a small in-repo tree
(no new dep) and drives the PTY grid from the terminal pane's actual Rect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-07 14:07:05 -07:00
leetcrypt 1fa8c332ed chore: consolidate all shell scripts into hh/scripts/
CI / rust client (hh) (macos-latest) (push) Waiting to run
CI / rust client (hh) (ubuntu-latest) (push) Waiting to run
CI / rust coverage (push) Waiting to run
CI / python server (3.10) (push) Waiting to run
CI / python server (3.11) (push) Waiting to run
CI / python server (3.12) (push) Waiting to run
CI / headless e2e smoke (push) Waiting to run
CI / dependency audit (push) Waiting to run
CI / secret scanning (push) Waiting to run
Move the 14 hack-house scripts (bootstrap, lets-hack, host-room, smoke,
demo/film harnesses, connect/join, ensure-docker/vbox) into hh/scripts/
and fix their path resolution for the deeper location. Update cross-refs:
sbx.rs script consts, app.rs hints, CI, direnv .envrc, README, and docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-06 17:49:32 -07:00
leetcrypt 9222fa8ad7 feat(ai): name agents after their model, not hardcoded "oracle"
Agents now join under their model tag (e.g. "qwen2.5:3b" — model name +
parameter size) or profile label, derived at /ai start and tracked on
App.agent_name, so the roster shows what's actually answering. Updates the
broker re-grant + /ai stop revoke paths, the Python --name default
(falls back to provider.model), and the demo/bootstrap/README/docs refs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-06 17:26:17 -07:00
leetcrypt ca1666fbbb docs(sbx): VirtualBox backend spec, crypto pay-gate, save/load PoC
Add the VirtualBox sandbox design spec (headless 4th backend + share-an-
appliance GUI mode with detect-first install), the crypto pay-to-join gate
design, and the save/load PoC writeup with its demo/film driver scripts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-03 10:10:44 -07:00
leetcrypt 69bce5ead8 feat(ai): stream agent replies token-by-token to the room
Closes the cross-language half of token streaming (perf-plan A3). On the
CPU-only box perceived latency is time-to-first-token, so showing the reply
as it generates makes a slow model feel live.

- Agent: OllamaProvider.stream() runs on a worker thread; bridge relays
  cumulative previews as throttled (~5/sec) `_ai:"stream"` control frames,
  then a `done` frame clears the preview as the final persisted chat message
  is posted. Providers without stream() fall back to blocking complete().
- Rust client: new Net::AiStream variant + parse_ai branch; App.ai_stream
  map holds the in-progress text per agent; draw_chat renders it as a dim,
  italic preview bubble below history. Cleared on done and on agent leave.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 22:42:08 -07:00
leetcrypt 26c651e9ac perf(ai): CPU-tuned local inference + qwen2.5-coder sandbox path
Tier A/B/C wins for the CPU-only Ollama box (no GPU → optimize TTFT and
tokens/sec, not VRAM):

- Separate qwen2.5-coder provider for the sandbox `!task` path; chat keeps
  the general model. Auto-selected when chat is Ollama and a coder build is
  present, override with --code-model.
- OllamaProvider num_ctx default 8192→4096 (8192 was a GPU-mindset default
  that inflates prefill/TTFT on CPU); expose num_thread; add --num-ctx,
  --num-thread, --num-predict. token_budget default 3000→2000 to fit.
- OllamaProvider.stream() generator over Ollama's stream=True chat endpoint
  (provider half of token streaming; agent/Rust rendering is a follow-up).
- Few-shot request→shell exemplars in SANDBOX_SYSTEM to anchor the small
  model's fenced-command output.
- Matryoshka embedding truncation: OllamaEmbedder truncate_dim=256 (--embed-dim)
  for faster pure-Python cosine and less RAM; query+stored share the dim.
- docs/ai-perf-plan.md records all 8 items with status and the server-side
  env (OLLAMA_NUM_PARALLEL=1, keep_alive) that must be set where ollama serve runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 22:37:59 -07:00
leetcrypt e5e1ad8dee feat(ai): in-RAM semantic recall (RAG) for conversation context
Give the agent recall of things said beyond the verbatim window, without
breaking the RAM-only philosophy — nothing is persisted to disk.

- MemoryIndex: a capped, in-memory pool of embedded messages with pure-Python
  cosine search (no numpy). Retains far more than the rolling transcript so old
  lines can be surfaced on demand; oldest evicted past the cap to bound RAM.
- OllamaEmbedder: local embeddings via nomic-embed-text, on by default and
  independent of the chat provider (reuses the Ollama host when chat is Ollama).
- Bridge: captured room messages (live + backfilled) are embedded on a
  background worker so a slow embedder can't stall frame draining. On a /ai
  question the agent retrieves top-k relevant lines, drops weak (<min_score) and
  windowed-duplicate hits, and prepends them as a clearly-fenced "recalled
  context" preamble — kept at user role, never elevated to system, so untrusted
  room text informs without instructing. Falls back to recency-only if the
  embedder is unreachable.
- CLI: --no-rag, --embed-model, --embed-host, --rag-top-k.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 17:59:01 -07:00
leetcrypt bbb9e82425 docs: plan for AI agent context + local-perf improvements
Roadmap for deepening the /ai agent's conversational context while keeping
the RAM-only philosophy, plus Ollama latency wins. Marks Tier 1 (backfill,
token-budget window) and the perf tuning as in-scope now; RAG and in-RAM
compaction staged next. Grounded in public Anthropic docs, not leaked source.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 17:43:02 -07:00
leetcrypt 5e8a409ec2 docs: higher-quality demo GIF (1280px, 15fps)
Bump from 960px/12fps to 1280px/15fps with floyd-steinberg dithering
for crisper, retina-legible terminal text — 7.4MB, under GitHub's 10MB
inline-render limit. Exceeds the upstream example.gif (800px/15fps).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-01 15:56:01 -07:00
leetcrypt 40c9a72186 docs: embed demo GIF (multipass sandbox share) in README
4.7MB looping GIF rendered from the latest demo capture (alice+bob
sharing a multipass box: summon, drive, per-user sudo).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-01 15:27:29 -07:00
leetcrypt 65df12de9e feat(ai): model profiles, capability discovery, and agentless /ai list|models
Make connecting any model a config step, not a code change:
- models.toml named profiles (api_key_env names an env var, never the key)
- providers gain available_models(); add preflight + --list-models/--check
- /ai list and /ai models in-room; client probes local Ollama for
  /ai models when no agent is running, and /ai list hints to summon one
- docs/providers.md provider guide + examples/echo_provider.py
- README: command table, AI section, layout updated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-01 15:25:07 -07:00
leetcrypt 700e33e3b1 docs: AI agent bridge spec (model-agnostic, /ai command, owner-gated ops)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-01 01:24:48 -07:00
leetcrypt 82a04f3e12 feat(coven): SRP/Fernet crypto parity + multi-user coven foundation ⛧
Begin the coven evolution of cmd-chat (see docs/spec-collaborative-sandbox.md):
a Rust/ratatui client for the unchanged Python Sanic server, plus the
multi-user + zero-knowledge groundwork.

P0 — crypto parity (the spec's #1 risk), proven three ways:
- Hand-rolled SRP-6a (NG_2048, SHA-256, rfc5054 padding) matching pysrp
  byte-for-byte, incl. the fixed b"chat" SRP identity and minimal-vs-256B
  width quirks. Golden-vector unit test + offline selftest.
- Live handshake against the running server (H_AMK verified).
- Cross-language E2E: Python client decrypts a Rust-encrypted Fernet message.

P2 — multi-user coven (server):
- CMD_CHAT_MAX_USERS capacity cap (default 4, infra-for-more).
- Authoritative roster + user_joined broadcasts.
- Free the slot/username on ws disconnect (was held until 1h stale sweep).

Also: fix requirements.txt (was UTF-16, unparseable by pip).

coven/ : Rust crate (crypto.rs proven; main.rs spike CLI: selftest/handshake/srpm)
docs/  : full feature spec for the 6 requested features.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 11:47:25 -07:00