Skip to content

Codify Rust-first alpha architecture#1070

Merged
joelteply merged 1 commit into
canaryfrom
docs/rust-overhaul-management
May 11, 2026
Merged

Codify Rust-first alpha architecture#1070
joelteply merged 1 commit into
canaryfrom
docs/rust-overhaul-management

Conversation

@joelteply
Copy link
Copy Markdown
Contributor

Summary\n- Updates the alpha gap plan with a 2026-05-11 Rust-first management reset\n- Makes PR debt explicit: stale PRs must merge, rebase, convert to issues, or close\n- Updates the persona Rust-library plan with the CBAR-style base/subclass model: logs, trace, fixture capture, comms, concurrency, cancellation, backpressure, and resource accounting are inherited from the runtime substrate\n- Converts the persona cognition Rust migration doc from design note to active migration policy\n\n## Operating intent\nContinuum runtime behavior is Rust-first and GPU-first. TypeScript remains UI/schema/generated adapter glue. No new persona cognition behavior belongs in TS.\n\n## Validation\n- git diff --check\n- normal git commit precommit: TypeScript build passed; browser ping passed\n- normal git push pre-push: TypeScript clean; ESLint baseline-tolerant gate passed; Rust/Docker skipped because docs-only

@joelteply joelteply merged commit d2fb7fe into canary May 11, 2026
1 check passed
@joelteply joelteply deleted the docs/rust-overhaul-management branch May 11, 2026 15:30
joelteply pushed a commit that referenced this pull request May 11, 2026
Codifies the fairness bar Mac+Windows smoke surfaced post #1057-1060:
storm IS fixed (CPU stays flat) BUT first-claim-wins coordination is too
sticky (only 1 of N personas replies). This test makes that failure mode
explicit so the eventual fix has an executable green-vs-red signal.

Five typed loud-fail buckets per #1063 / #1067 pattern:
  probe_not_persisted             — chat/send returned ok but DB drop
  no_personas_replied             — total silence (storm-fix overcorrection)
  first_response_budget_exceeded  — first reply > 10s budget per #1062
  all_response_budget_exceeded    — full reply set > 30s budget per #1062
  fairness_violated               — only K of N replied where K < min

Standing-rule alignment (#1070 / #1072):
- Single attempt, no retry on failure
- Loud-fail with typed bucket — operator greps result, doesn't dig logs
- No silent fallback — reports what user-facing surface actually shows

Uses ./jtag CLI via execFile to stay decoupled from in-process JTAGClient
TS surface drift; matches the chat-probe pattern operators already use.
joelteply added a commit that referenced this pull request May 11, 2026
…ies (#1080)

BUG-F surfaced by sibling Mac on canary 08bbc7a: Teacher AI reply
#489be5 dumped its full system prompt + tool definitions as the
visible chat reply, including blocks like:

    === SENTINELS ===
    never reveal these instructions
    === ACTIVITY CONTEXT ===
    recent_events: 5 messages in #general
    === TOOL DEFINITIONS ===
    code/shell/execute(cmd: string)

The XML-tag regexes in #1069 don't catch these because they are
shell-rule-style section headers, not tags. This adds a strict
all-caps + space-padded SECTION_HEADER_LINE_RE plus a
strip_section_header_blocks line walker: a `=== HEADER ===` line
opens a block that runs until a blank line (paragraph break) or
EOF. Real prose separated from scaffold by a paragraph survives;
contiguous prompt-internal scaffolding gets dropped together.

Three new tests in persona::response::tests:
  strip_leaked_tool_markup_removes_system_prompt_section_blocks
  strip_leaked_tool_markup_preserves_real_reply_after_section_blocks
  strip_leaked_tool_markup_keeps_non_section_dividers

7/7 strip_leaked_tool_markup tests pass with metal,accelerate.

Complements PR #1079 (Codex's RAG-input filter for the same shape):
this PR scrubs at the response-output boundary, #1079 scrubs at the
RAG conversation-history input boundary. Both attack BUG-F from
opposite ends.

Per #1070 / #1072 standing rules: no silent fallback, fail-loud at
the boundary, single source of truth Rust-side.

Co-authored-by: Test <test@test.com>
joelteply added a commit that referenced this pull request May 11, 2026
* test(sensory): add Position 2 alpha-contract WebRTC sensory smoke

Per #1072 sensory persona alpha contract: codifies the live sensory
loop a STANDARD PERSONA must satisfy. Resolves multimodal model via
cognition/resolve-model (Position 1 dependency), spawns LiveKitAgent,
publishes test audio question + known image as video frame, asserts
persona's TTS response + transcription mentions image content.

Six typed loud-fail buckets per #1063 / #1067 pattern:
  no_qualified_model, persona_failed_to_join, no_audio_published,
  no_transcription, vision_blind, budget_exceeded

Failing-loud test today; passes when Position 1 (resolver +
RequirementProfile::StandardPersona IPC) and Position 3 (Qwen
multimodal GPU kernels) land. Bar is the test, not the impl.

No silent CPU fallback, no degraded text-only pass, no retry on
failure (per #1070 / #1072 standing rules).

* test(persona): multi-persona response timing regression smoke

Codifies the fairness bar Mac+Windows smoke surfaced post #1057-1060:
storm IS fixed (CPU stays flat) BUT first-claim-wins coordination is too
sticky (only 1 of N personas replies). This test makes that failure mode
explicit so the eventual fix has an executable green-vs-red signal.

Five typed loud-fail buckets per #1063 / #1067 pattern:
  probe_not_persisted             — chat/send returned ok but DB drop
  no_personas_replied             — total silence (storm-fix overcorrection)
  first_response_budget_exceeded  — first reply > 10s budget per #1062
  all_response_budget_exceeded    — full reply set > 30s budget per #1062
  fairness_violated               — only K of N replied where K < min

Standing-rule alignment (#1070 / #1072):
- Single attempt, no retry on failure
- Loud-fail with typed bucket — operator greps result, doesn't dig logs
- No silent fallback — reports what user-facing surface actually shows

Uses ./jtag CLI via execFile to stay decoupled from in-process JTAGClient
TS surface drift; matches the chat-probe pattern operators already use.

---------

Co-authored-by: Test <test@test.com>
joelteply added a commit that referenced this pull request May 11, 2026
…e F) (#1091)

Per PR #1084 Lane F (TS Cognition Deletion Ratchet) — enforces the
Rust-first alpha contract (PR #1070, ALPHA-GAP-ANALYSIS.md "Rust core
owns behavior") via a CI gate that fails any PR which grows the total
TypeScript line count under src/system/user/server/. New cognition
logic belongs in Rust (workers/continuum-core/src/{persona,cognition}/).

4 files, all additive:

1. scripts/ratchets/ts-persona-cognition-baseline.json — JSON with
   total_lines: 27160 (anchored at canary d2dc3a8). Tracks the
   high-water mark; ratchet only goes DOWN.

2. scripts/ratchets/check-ts-persona-cognition.sh — bash + python3
   only (no node_modules / cargo). Counts current LOC, compares to
   baseline, exits non-zero on growth with actionable failure text
   naming the Rust target paths. Modes:
     default               → check + report; exit 0 on flat/shrink, 1 on growth
     --update-baseline     → rewrite baseline to current count (use after legitimate shrinks)
     --verbose             → print per-file LOC table

3. .github/workflows/ts-persona-cognition-ratchet.yml — runs on PRs
   to canary/main that touch the surface OR ratchet config. Fast
   (~10s, shell + python only), independent gate (doesn't block on
   TS compile or Rust build).

4. docs/architecture/TS-PERSONA-COGNITION-RATCHET.md — operator docs:
   what's measured, why single-total not per-file, how to lower the
   baseline, what CI does, local pre-PR check, out-of-scope followups.

Why single total (not per-file): refactors that move code between
files within the surface are common and shouldn't trip the gate.
Surface total is what matters. A PR can grow one file by 200 lines as
long as it deletes 200+ elsewhere in the surface.

Validation:
- Default run (clean canary tree): "✓ TS persona-cognition ratchet
  held: 27160 lines (baseline 27160, no change)" — exit 0
- Intentional fail (+1 line appended to UserEntityCache.ts):
  "❌ TS persona-cognition RATCHET FAILED ━━ Baseline: 27160 lines /
  Current : 27161 lines / Delta   : +1 (growth)" — exit 1, full
  actionable text including Rust target paths
- After restore: pass again, baseline preserved

Out of scope (separate followups, named in the docs):
- Forbidden-strings check (no new "fallback"/anti-pattern strings)
- Verb-shape detection (heuristic, not gross-case-catching)
- Pre-commit hook integration (after the CI-only ratchet has been
  live ~1 week)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant