Skip to content

feat: main — the never-crash imperative shell (parity v1 · slice 10/11)#53

Open
FabioRocha231 wants to merge 11 commits into
inbrace-tech:rust-parity-v1from
FabioRocha231:slice-10-main
Open

feat: main — the never-crash imperative shell (parity v1 · slice 10/11)#53
FabioRocha231 wants to merge 11 commits into
inbrace-tech:rust-parity-v1from
FabioRocha231:slice-10-main

Conversation

@FabioRocha231

Copy link
Copy Markdown
Contributor

Part of the parity-v1 stack for #27slice 10 of 11, bottom-up.

Stacks on #52 (the previous slice). This slice adds: stdin -> now -> cache -> render -> write -> exit(0); a panic never disturbs the host.

Merge order: #42 (bash resets_at fix) -> #43 (slice 0 · scaffold) -> then slices 1..11 in order -> this is slice 10.

⚠️ Cross-fork note: a PR into this repo must base on a branch that lives here (main). These slices are stacked on my fork, so until #52 merges this diff shows the cumulative stack; the moment #52 lands in main it auto-narrows to just this slice's files. Reviewed in order, it stays one small slice at a time.

Whole stack is green: ~31 tests (lib + golden + e2e), clippy -D warnings clean, cargo fmt clean. Render is byte-exact vs the fixed bash oracle (tests/golden.rs).

Slice 0 of the bottom-up Rust rewrite (inbrace-tech#27): the crate skeleton so every later
slice lands its module + test against a green build.

- rust/ single binary crate 'tokenline', flat src/, edition 2024, MSRV 1.85.
- deps: serde + serde_json + jiff (jiff::Timestamp for ISO-8601, lands slice 3).
- panic = "unwind" in the release profile (the final slice's catch_unwind needs it).
- main.rs is a stub; lib.rs is the module root. cargo build/run/test green (0 tests).
Slice 1 (inbrace-tech#27). Pure formatting helpers matching the bash fmt_k (awk %.1f token
compaction) and fmt_eta (human ETA from seconds). Covered by #[cfg(test)] with
the tier boundaries and the golden's 3d4h reset ETA.
Slice 2 (inbrace-tech#27). The COLOR_* / STYLE_* constants from tokenline.sh:21-30 as exact
SGR sequences (RESET is [00m, BLINK [1;5m — byte-identical so the golden oracle
diffs clean). Test asserts each against the bytes captured from bash output.
Slice 3 (inbrace-tech#27). Replaces the bash epoch_from_iso (date -d) with
jiff::Timestamp parsing -> epoch seconds; None on malformed input.
Transcripts and rate-limit resets are fixed-format UTC, so no tz database.
Tests cover exact UTC epochs, sub-second truncation, and invalid input.
Slice 4 (inbrace-tech#27). Parses the host's stdin JSON into a typed Session (model,
context, rate limits, per-turn token usage) with serde, plus the derivations
(Gemini detection, subagent/antigravity transcript-path fixups) matching
tokenline.sh. Unit-tested.
Slice 5 (inbrace-tech#27). compute(session, ttl_label) -> Option<Economics>: the per-turn
equivalent-token and saving-% math byte-identical to tokenline.sh (multipliers,
truncating eq/uncached_eq, integer saving_pct; write mult 2x on a 1h TTL). Pure
values only — coloring is render's job. None when there's no turn activity.
Slice 6 (inbrace-tech#27). compute(session, now) -> Vec<RateLimit> for the 5h/7d windows:
pct, ETA from resets_at (via jiff), 10-wide bar fill, severity + blink by pct,
and the pace heuristic (VeryFast/Fast) all byte-identical to tokenline.sh's
rl_segment. Empty for Gemini / absent windows. Values only; render applies color.
Slice 7 (inbrace-tech#27). runtime_dir() forking XDG ($XDG_RUNTIME_DIR/tokenline-$UID) on
unix vs %LOCALAPPDATA%\\tokenline on windows, chmod 0700 behind cfg(unix); the
per-session cache file (consolidated, one per session). fs only, no session
input ever persisted. Unit-tested.
Slice 8 (inbrace-tech#27). Reads the last-turn timestamp from the transcript JSONL (falling
back to the persisted cache), derives the 5m/1h TTL window, warmth and the
countdown — the stateful edge over cache. ISO parsing via jiff (crate::fmt).
Values only; render colors the HOT/COLD state. Unit-tested.
Slice 9 (inbrace-tech#27). render(raw, now, cache_dir) -> String assembles all three lines
+ divider byte-for-byte with tokenline.sh: model|ctx|cache line (ctx value in
bold 16-color, cache countdown + HOT/COLD), the per-turn economics line, and
the rate-limit bars/pace. Golden test asserts exact bytes against the fixed bash
output for healthy_claude.json at a fixed clock. Recomputes the 5-tier cache
color from remaining_secs (CacheInfo::warmth only carries 3 buckets).
Slice 10 (inbrace-tech#27). stdin -> now -> cache dir -> render -> write -> exit(0). A panic
hook + catch_unwind turn any panic into empty output and a clean exit; writes go
through write_all so a closed pipe never raises; malformed/empty stdin is a
silent no-op. e2e tests drive the real binary to prove exit 0 + no output on
garbage and empty input.
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