Skip to content

Spec: the Console, a web page for each machine's Commands - #842

Open
JacobStephens2 wants to merge 79 commits into
mainfrom
issue-776
Open

JacobStephens2 wants to merge 79 commits into
mainfrom
issue-776

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Summary

Closes #776

Each machine now serves its own authenticated Console. The seven pages and CLI share Command observations, Inbox grouping, Silent/Slow health, stage Usual ranges and exact log ownership. CI watch and Self-merge emit waiting lines; Setup offers the Console and an owner-run installation script.

Command records + Activity / Command / Session logs
  shared blocking reader
    status / show / logs / stop
    Console on localhost
      Inbox · Lanes · Stages · Waterfall · History · Logs · Security
      email/password accounts · Stop/Requeue · machine-wide Themes
Setup → console install → owner-run service + reverse proxy

Includes live conversation readers for Claude/Codex, keyboard navigation and peeks, authenticated Stop/Requeue, durable accounts and email password codes, the Console log, six built-in Theme families, custom Theme import/export and confined local fonts. Assets are embedded; the release build needs no Node or CDN. Console updates re-exec the replaced binary. The page writes only Stop, its own look and Theme files.

Evidence

Seams under test:

  • The CLI binary reading fixture Command records and logs, with observable status JSON and text.

  • The running Console over HTTP, including authenticated actions and appended log batches.

  • The Console in Playwright, including DOM preservation and recovery when streaming fails.

  • Before: a ready Run dispatched by a Pass had no top-level Ready for review row. After: the retained CLI/HTTP reproduction passes; the complete Pass tree remains in History and show.

  • Before: a Session reader stayed frozen for the reproduction's 12-second wait when SSE failed. After: finite offset-based polling appends lines while preserving existing DOM nodes. Both recovered-SSE and pending-poll overlap reproductions changed from two copies of a line to one.

  • Before: the seven-page header reproduction failed on Logs. After: shared PageContext and header markup keep the machine and other-Console links on all seven pages, log readers and Stop.

  • Removed source-regex parity and invented-markup CSS checks, retaining registered-router parity and served-page coverage.

  • Validation: 35/35 Console Playwright tests, ready/header reproductions, three standalone streaming regressions, formatting and Clippy pass. The full Rust run passed units (1,081 passed, two ignored) and all binaries before status, then found one outdated row-count assertion. After correcting it and checking the promoted child tree, all 26 status tests and the four remaining binaries passed; Clippy passed again. The full command was not restarted after this test-only correction.

Unaddressed findings

Standards

  • J2, browser fixture lifecycle duplication — declined judgment. console/tests/accounts.test.cjs:12, console/tests/logs.test.cjs:14 and the per-test custom-Theme setup own different authentication, process/log and configuration lifetimes. The implementation decision is to keep those fixture owners explicit rather than introduce a generic lifecycle interface. No behavioral defect was asserted; the independent followup accepted this rationale.
  • J3, common Entry facts — declined judgment. src/logs/reading/inbox.rs:109 computes readiness/cause for grouping; src/logs/status/inbox.rs:92 computes repository/outcome filters; src/logs/status/time.rs preserves unknown historical stage evidence. These policies remain with their presenters. The ready-row fix reuses the existing Observation interface where behavior is shared. The independent followup accepted this rationale.

The page-context/data-clump judgment was addressed with PageContext and header.html. A universal HTML base remains optional: shared nav/chrome already own controls; Inbox's htmx/attention head and time/log heads load different resources and metadata.

Spec

Security review outcome

  • Security review refused: Codex's cybersecurity safeguard refusal

Review coverage

Both independent reviewers inspected all 153 original changed paths across the whole Spec, including vendor text, licenses and lockfiles. The 15 WOFF2 assets received metadata inspection; font outlines were not source-reviewed. No generated-output exclusions were taken.

Standards also read all three added review-fix files. The independent Spec reviewer did not inspect src/console/header.html and console/reproductions/header-machines.py: these two paths remain unread on that axis. Both were read by Standards and the primary reviewer, and their served-page reproduction passes. No other changed path remains unread. Final files-read inventories and dispositions are written to .thirdshift-review-C0SjsM/standards.md and .thirdshift-review-C0SjsM/spec.md in the review workspace.

Merge Danger

Door: two-way

The binary can be rolled back. Accounts, Console log and custom Themes persist beside the User config. Stop interrupts real Commands and changes issue labels.

Blast Radius: machine

Adds a persistent Console behind the owner's proxy and changes machine-wide status grouping, health, Setup and waiting-line behavior.

Built with codex · gpt-6.1-sol · high

Tickets

Keep CI watch and Self-merge waiting lines active
Show Silent and Slow Runs with repository Usual ranges
Show the machine’s Inbox in thirdshift status
The copied executable could fail to spawn with ETXTBSY when a concurrent test child inherited fs::copy's write handle. Copy in a separate cp process, as the existing replacement-test helper does, and wait for it to finish before launching the Console.

Validated the exact failure with a forced inherited-writer reproduction before the fix and its passing result after it; cargo test, cargo fmt --check, and cargo clippy --all-targets -- -D warnings pass.
Serve the localhost Console Inbox with Focus
Add Console log inventory and live conversation readers
Preserve the live Inbox alongside the Console log inventory and readers. Keep stable row identities, heartbeat observations, CLI route parity, and shutdown of both Inbox and log streams during binary replacement.

Validated with cargo check --locked, cargo test --locked, cargo fmt --check, cargo clippy --all-targets -- -D warnings, and all 14 Console browser tests.
Set Console passwords by email code
Preserve Console Stop and Requeue alongside email-code password setup. Register both sets of routes and HTTP tests, retaining shared-path CLI parity accounting.

Validation: cargo test --locked; cargo clippy --all-targets -- -D warnings; cargo fmt --check; all 27 Console browser tests.
Add Console service and proxy installation scripts
Preserve the Console installation entry alongside the expanded Console Stop implementation and test references.
Ask about the Console during Setup
Stop live Commands from the Console
Preserve the Theme routes and authenticated Stop routes. Use the shared Command watcher for Inbox, time-page and peek updates, retaining Theme activity and polling recovery. Apply the saved Pause motion preference on the Stop page and cover it alongside reduced motion.

Validated with cargo test --locked --quiet, cargo clippy --all-targets -- -D warnings, cargo fmt --check, and all 32 Console browser tests.
Add Console Themes, saved look settings and activity motion
@JacobStephens2
JacobStephens2 marked this pull request as ready for review October 20, 2026 15:56
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.

Spec: the Console, a web page for each machine's Commands

1 participant