Release SIA 1.8.1: cockpit fixes and reviewable commitments - #20
AnubisQuantumCipher wants to merge 16 commits into
Conversation
Verify issue omacom/omarchy-plugin-marketplace#7719 targets the current main HEAD. Nothing may move main until that commit is verified or the issue is retargeted; this declaration is what the CI freeze gate reads. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QVs5R2j9MoP6nstKodmyk2
After the maintainer machine moved back to the released lane, `sia status`
kept printing the retired lane's last generation ("retained pulse 13620")
from the cockpit's cached view, which retirement had left in place beside
the moved live generation and candidate. The cached view now moves under
the same receipt.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
…its boundaries On the released lane, with the opt-in off and nothing retained, `sia status` printed "live refused · live-view-cache-unavailable" followed by seven boundary lines: an absence described as a failure. It now prints one line saying the lane is off. A retained lane, a pending live loop, an enabled opt-in or a cached view still report through the live view, refusals included, and `sia live` is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
… is off Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
A take whose claim is "--help" (registered before `sia take --help` was refused; two such takes are due on the maintainer machine) made the engine's CLI print its usage text instead of a result list, admission refused "grading recall response could not be admitted", and the take stayed due on every nightly run. Such a claim is not recalled at all: a completed recall with no admitted evidence is the documented path on which the judge grades UNRESOLVABLE and closes the take. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
siatakes reads config.json with its own top-level key roster and fails closed to no judge on any unknown key. The shipped config.example.json carries a "mind" section (the controller-source opt-in) that the roster never learned, so on the maintainer machine, and on any machine started from the example config, `sia grade` reported "judge unavailable" with a working Claude CLI and a configured judge, and grading never ran. The roster now admits every key the runtime's own loader admits; a test holds it to the example config and to sialib's roster. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
…clock, rest when settled A 40 ms Timer drove both the graph physics and the twelve-second growth reveal, and the JavaScript canvas it repainted is software-rendered on many machines: the timer fired late, so the replay stretched well past twelve seconds and every frame landed off the display's own beat, which is what "the little thoughts come down slow and choppy" looks like. The physics now steps on FrameAnimation with every per-tick quantity scaled by the real elapsed fraction of a tick (trajectory checked against the 40 ms tick at 8 and 17 ms frames), the reveal advances by elapsed time so it takes twelve seconds at any frame rate, and once nothing moves the loop stops; a ten-frame-per-second breath keeps the fresh-memory glow and the root halo alive. Hover, a new graph, a replay, a resize or a kind toggle wake it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016YDGn1w6rSYf91XfQsEcsx
…f running forever With the cockpit open and the graph sitting still, the shell used about 64% of a core (2% closed). The physics was tuned per 40 ms tick and scaled by the elapsed frame time, capped at 2.5 ticks. Fed the 100 ms frames a software renderer routinely delivers, the explicit integrator overshot its own springs and never crossed the settle threshold, so the frame loop ran at full rate forever; it dipped to 4% only when frames happened to be short, and every pulse's graph reload restarted it. The elapsed time is now spent in sub-ticks of at most one tuned tick, so a 100 ms frame settles in the same wall time as a 17 ms one (about six seconds on the maintainer graph at every rate) and the breath timer takes over. The regression test uses a graph shape on which the old integrator provably never settles at 100 ms; the label test's literal follows the frame-clock call shape. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QVs5R2j9MoP6nstKodmyk2
…reathe on a glow layer Measured on the shell with the cockpit open (per-thread /proc sampling, a probe timer writing the frame loop's state every two seconds): - 63% of a core whenever a graph was on screen, 2% during the window a pulse rewrites graph.json ahead of status.json, forever. The layout was never settling: its first seed ran when the canvas reported width 1040 and height 0, so every memory sat on one point at the top edge (a ring of radius zero), and escaping that took 392 ticks of violent repulsion. Under the shell's 220 ms software frames, clamped to one 40 ms tick each, that is 86 seconds, and every pulse interrupted it. Model.syncGraph now refuses a zero-size canvas; the resize handlers seed once both dimensions exist. The first real-size seed settles exactly as a fresh one (139 ticks on the live 260-memory graph). - A tick keyed L.pos by string inside the all-pairs loop: two strings per pair, 67,340 per tick on that graph. Keys are built once per node; the trajectory is bit-identical (verified on 300 mixed-length frames) and a tick costs 13x less in Node. - A slow frame advances the layout by the time it took, up to 250 ms in sub-ticks, instead of one tick, so a 220 ms frame moves 220 ms of wall clock. The 100 ms case in the settle test is unchanged. - The breath (fresh glow, root halo) moved to its own canvas above the graph, following every graph paint through onPainted, at 5 Hz. A settled graph never repaints its 260-node canvas to breathe: on a software renderer at 2x scale that canvas costs about 89 ms a frame (40% of a core at the 4.5 fps the surface delivers here, all of it in QRasterPaintEngine stroke). After: a settled open cockpit is 5% main thread + 6% render thread; the layout settles about 6 s after opening and 2-10 s after a pulse, then rests. Verified end-to-end by restarting the shell (an edited plugin file is NOT reloaded by "Local plugin changed, reloading" nor by setPluginEnabled) and sampling 95 s across two pulses. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QVs5R2j9MoP6nstKodmyk2
… waits The brainstem republishes graph.json up to five times a pulse (two partial scans, the complete generation, its post-source rebuild) and names the final one in status.json about eleven seconds after the first write. The cockpit withdrew the graph the instant the file changed and, once reread, refused the newer generation because no status named it yet, so the center card said "current graph unavailable" for a quarter of every minute and the entries list flashed a red boundary once a pulse. The combined-claim contract is unchanged — the displayed graph is always the one the displayed status names — but the cockpit now remembers that graph (admittedGraph) and keeps it on screen while a newer publication waits for the status that will name it, saying so in the snapshot line. A rejected or vanished resident graph still withdraws it; a status naming neither generation withdraws it. An unnamed generation never touches the layout, so hover, neighbourhoods, a locked selection and a running replay survive the republish. One rename can arrive as a burst of change events (the probe saw the second event find `graph` already withdrawn), so both pending boundaries keep the admitted generation. The remaining beat is the status reread itself: settle waits drop from 150–200 ms to 60 ms, the returning graph and entry stream fade in over 140 ms (the shell's PopupCard timing), "current graph unavailable" is only said after 400 ms of absence, the cockpit fades in when summoned, and boundaries that name a routine revalidation render muted instead of urgent. Measured on this box with a 4 fps capture of the graph card correlated with the snapshot files' mtimes: before, 11 s blank per 60 s pulse; after, one sub-second dip at the status rename. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…uarter Measured 11.1 s per 60 s pulse (JACKAL exact: 11112/1000/60 = 463/2500). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 25 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Repository: AnubisQuantumCipher/sia/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (29)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughChangesCockpit commitment review and graph presentation
Priority: ➖ Normal Estimated code review effort: 4 (Complex) | ~60 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant Cockpit.qml
participant sia-intent-review
participant bin/sia
Cockpit.qml->>sia-intent-review: launch review with full intent id
sia-intent-review->>bin/sia: request full commitment JSON
bin/sia-->>sia-intent-review: return id, text, due, holder, created
sia-intent-review->>bin/sia: submit outcome after confirmation
bin/sia-->>sia-intent-review: return close result
Merge Risk: ⚪ Minimal · up to No concrete merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 16.07% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 56 functions across 16 files. (13 skipped: 13 unsupported.) ✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
SIA's published main branch lacks the accumulated cockpit, commitment-review, and resident-status fixes. This prepares SIA 1.8.1, consolidating the fixes on
fix/perception-integrityinto one reviewable maintenance update.The cockpit paints its graph before presentation, avoids redundant entry animation and idle graph work, preserves the named graph generation during refresh, and no longer flashes the first-install gate during routine revalidation. Commitments show full text and due dates and provide a terminal review that records an outcome before explicit closure. The resident CLI exposes the full commitment and copyable ID. The branch also includes the accumulated live-status cleanup and option-shaped claim/configuration fixes.
Validation: targeted/release suite passed (259 tests); the full sequential run executed 3799 tests and identified two test-maintenance issues, both corrected (old text-length fixture and explicit isolation import). Corrected modules passed (55 tests), followed by final CLI/review/options/pulse/isolation checks (180 tests). The real-gbrain lane passed; the compiled-render lane was explicitly NOT EXERCISED without its independently pinned artifacts. QML syntax, shell syntax, pinned ShellCheck, and whitespace checks passed. GitHub CI is the final branch gate.
Release coordination: the operator explicitly requested that SIA 1.8.1 replace the older marketplace review target. Retire marketplace issue #7719 before merging; the ROADMAP records that deliberate replacement and ends the old pending declaration. Merge only after required checks pass. Establish a final frozen main HEAD, tag/build the release from that exact commit, and submit fresh marketplace verification for it. No old scan or approval carries over. Standard-installation approval remains a separate marketplace decision; this PR does not claim that the Install button is enabled.
The straight-down compositor rule is documented in the manual and remains a scoped desktop preference. Closing a commitment records an operator outcome; it does not verify a prediction or repair the underlying system.
Release preparation: manifest, runtime, MCP, QML, and documentation now agree on 1.8.1. Version/setup/cockpit checks passed (94 tests). Aggregate GitHub traffic archiving is available as a maintainer-only script; it adds no installer telemetry, preserves raw rolling windows, and does not equate clones/downloads with installations. Collector tests and isolation/version checks passed. The final full GitHub CI run must pass before merge. Source archives and checksums will be uploaded to the release after the final main commit is known; the local candidate archive is not a published release.
Summary by CodeRabbit
New Features
Improvements
Documentation