Repository navigation
Share commander HUD columns, grouped heartbeat and retained alarms - #3589
Merged
Merged
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
trissim
enabled auto-merge
October 29, 2026 06:03
trissim
disabled auto-merge
October 29, 2026 06:04
trissim
enabled auto-merge
October 29, 2026 06:08
|
debt-src at 04a5e0b, every finding: |
trissim
disabled auto-merge
October 29, 2026 07:04
trissim
force-pushed
the
work/commander-screen--agent-comms
branch
from
October 29, 2026 07:04
8636a6f to
40da81c
Compare
trissim
force-pushed
the
work/commander-screen--agent-comms
branch
from
October 29, 2026 08:28
40da81c to
c3c13dc
Compare
…--agent-comms # Conflicts: # tests/test_commander_notifications.py
|
debt-tools at a0ccebd, every finding: |
…--agent-comms # Conflicts: # src/agent_comms/commander_heartbeat.py # src/agent_comms/heartbeat_frame.py # tests/test_commander_notifications.py # tests/test_unit_state.py # tests/test_unowned_checkout_work.py
…--agent-comms # Conflicts: # src/agent_comms/commander/vibe_check.py # src/agent_comms/commander_heartbeat.py # src/agent_comms/commander_hud.py # src/agent_comms/heartbeat_frame.py # src/agent_comms/task_attachments/commander_pings.py # tests/test_commander_notifications.py
…mander-screen--P930 # Conflicts: # src/agent_comms/todos.py # tests/guards/test_debt_ratchet.py # tools/debt_ratchet.py
…--P930 # Conflicts: # tests/test_commander_notifications.py
trissim
enabled auto-merge
October 30, 2026 07:23
trissim
added a commit
that referenced
this pull request
Oct 30, 2026
Main (#3589/#3661) owns the commander wake on every bridge and hands the Monitor the original message, so the branch's Claude-only wake override goes, and with it WakeOnlyMonitor, the PendingMonitor family it was the second member of, the reception parameter threaded through monitor.py and shared.py, and the frame's displayed body. Their one test goes with them. CommanderUnitDetail is both the comms_commander_unit tool reply and a disclosed record, so it inherits ToolResult and DisclosedRecord. commander_pings imports the DeliveredOutcome main's notice returns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
P930, paired with OpenHCSDev/toad#1321. 31 commits; +1,942/-566 across 56 files against origin/main
62c029335647dd11381effbb99099ccce8bbd527. Pushed pair: Core078fb1d29a270e1a9233450dda31c45288548324, Toad53e8554ebdb7fd3c7ba8002cbdeeb8240bd902da(native mainc59b3766249f928c710a981e1fc40d491141e5b1). Both remote refs equal their local HEADs; previous reviewed checkpoints remain ancestors. The latest source correction deletes both description forwarders and Product, migrates every Core/native/test caller, and relocks NRA to merged #158. Both nominal alarm views, the shared health prefix, current main's ratchet deletion and individual committed publication witnesses remain. Not installed or behavior-qualified.This is a source delivery, not behavioral, typing, installed or performance acceptance. Author performed AST/source compilation and diff checks only. Root owns the combined changed-owner controls, dependency/measure repairs, Core-first landing/install and actual saved-session display acceptance.
Every new presentation family and its replaced owner
These are source deletions, not proof that the new UI has run. AST spans below count complete declarations/method bodies at the comparison base; they overlap the file diff and must not be summed as extra deletions.
disclosure_text.pyadds 390 lines.field_codec.pychanges 218 lines: 179 added, 39 deleted, not 218 net growth. The full paired native deletion is 388 lines.DisclosureKey/RecordKey/RootKey/FieldKey/EntityKey/AnonymousKey/MappingKey,DisclosureEntrydeclared_disclosure.py; deleted every native declaration, not duplicated or aliased. The whole old key/value block at native base lines20–194 is absent. This is relocation of identity ownership, not a claimed reduction in required identities.DisclosureText,StructuredText,RecordText,IdentifiedRecordText,ClassText,FamilyText,CollectionText,SequenceText,MappingTextDisclosedValue(53-line AST span),StructuredValue(9),RecordValue(13),IdentifiedRecordValue(11),ClassValue(5),CollectionValue(7),SequenceValue(9),MappingValue(9). Native file diff is +25/-191. Native no longer detects dataclasses, extracts identity fields, formats collection counts, reconstructs children or decides scalar-vs-record shapes. It consumes the prepared Core tree and retains only expansion/focus/paint.FamilyTextadds a required declared-name display rather than leaking Python class names.DisclosedRecord,ValueDescriptionDisclosedValue.ofdataclass/identity probe and singledispatch construction. Existing records explicitly inherit their disclosure capability; cached FieldPlans select identity once. The sole factory is DisclosureText; inherited handlers return Self, without a Product parameter or recursive string argument. FieldCodec.describe and DisclosureText.of are deleted rather than retained as forwarding aliases. Presentation dispatch remains separate from external decoding: no wire decoder class is replaced or copied. The earlier branch-only ValueShape/DisclosureShapes experiment was also removed, but is not counted as a deletion against main.ViewColumn,FieldPlan(ViewColumn),Projected(ViewColumn, property)FieldPlan.key_instring-name loop, 3-lineexcluded_inloop,view_namesandview_exclusionscaches; nativeRecordValue.childrenno longer copies field-label and identity interpretation. FieldPlan's AST body shrinks198→187 lines while inheriting the shared column contract.Projectedretains the original read-only property and Python descriptor lifecycle.ViewExclusionfamily extended withHudExclude,StatusExclude,ReportExclude,ArgumentsExcludeSnapshotExcludeowns itsSnapshotNamebehavior. No alternate string API survives; wire decoding is unchanged. The old deleted ratchet and its ReportExclude copy stay deleted.ViewTable,StackedViewTableCommanderUnit.line(11-line body),brief_parts(8),brief(3), framerows(17) andbrief(17), plus nativeCommanderUnitCard.brief_lines(12),fit_title(2),on_resize(2). One prepared table owns columns, original entities, cells, full text, measured widths and narrow stacking. NativeDeclaredTableconsumes layout/widths; it does not choose a second geometry policy. The older nativeHudRowTextclass (13 lines) andCommanderUnitCardclass (107) are deleted.HudToneplus Muted/Warning/Success/Accent/Error;ViewHeading.-needs-handcolour policy and uncoloured, independently assembled headings with shared declaration-owned tones/headings used by unit and alarm groups. This adds the requested five-tier colour behavior; it does not pretend five old colour implementations were deleted. NativeUnitTonebinds Core tones to existing theme colours; terminal colour encoding is not transported into the widget.ViewFacts,ViewSectionFacts,HudDisplayFactsCommanderFrame.changedas the publication baseline; disposable files no longer serve as successful-message receipts. Original identities and failures remain in comparison; ticking ages do not. No second writable fact store is introduced.presentation.pyis not another generic text/geometry system: its existingBusPresentation,ThreadRecord/View, notification windows andWireRevisioncapture canonical UI source state. P930 only changes its nominalPresenceExcludecallers (+8/-8). None of those classes supplies disclosure keys, recursive child formatting, table width allocation or commander rendering. Those answers formerly lived in nativedeclared_disclosure.pyand commander card prose; the replaced implementations are deleted. The prepared table/tree is consumed by both heartbeat text and native widgets, not a dormant parallel renderer.Source evidence:
p930-replacement-spans.txt(base/head AST declaration spans and bases),p930-new-owner-deletions.diff,p930-native-deletions.diff; follow-up owner map parses1,819 tracked Core/native Python modules with zero omissions. Dynamic aliases remain unproved.Latest hosted failure and source correction
Run
41009379844on previous Coreba3b05bf87produced real debt-src FAIL / debt-tools FAIL (unlike the older0d37 checker crash). Every grown category is retained:disclosure_text.py.Root corrected the later send-back in message a01cf5af2ec9: the accepted external Python-shape boundary stays, as do FamilyText's cached identity return and property.set_name. ClientTypeErrors +5 describes canonical-main Toad, not the already-replaced paired consumers. NRA #158 fixes cached identity-return recognition;
uv lock --upgrade-package nominal-refactor-advisor, using declared uv0.13.1, advances the lock from 595d19725 to d0667af3c2733b3de298be1af4bd69f963cb9e23. Uv also regenerates lock-format revision3→5. No NRA source, exemption or alternate dispatcher was added here.Correction fd6edbe deletes the recursive Product argument and both forwarding APIs; all paired callers now invoke inherited DisclosureText.describe. The uncommitted annotation traversal/property/base-call changes were removed before this commit, following Root's correction. Root's admitted factory domain is DisclosureText only: calling ClassText.describe(record) would not satisfy a general Self promise because it returns sibling RecordText. This excluded case is explicit, not claimed proven by compilation. Root retains exact-head typing, property-stub and behavioral qualification.
Earlier correction36d2959f3 remains an ancestor. Current-main merges retain inherited commander-fork tags and P930's keyword ServicePassFailing fixture. Source-only parsing/compilation and whitespace checks pass; no local checker, imports, tests or application run was launched. Latest established hosted outcome remains ba3b debt-src FAIL/debt-tools FAIL; new-head hosted success is not claimed.
Shared presentation and native geometry
Before: Core
brief_parts/brief()flattened records; native cards rebuilt that prose, repeated the PR and leaked Python class names. After:The record declares Unit/State/Work/Change/Next, identity, labels and exclusions. State-owned HudGroup declarations own order, tone, action and folding. No column/state/unit roster or second PR string remains. Full original detail fields remain even when an identity-only summary is displayed.
ViewTable.layout/widths, minimums, fit_widths and StackedViewTable are real production APIs used by paired Toad DeclaredTable. CommanderAlarm consumesalarm_detailfor every original ping. They remain. Only the unusedDisclosureText.viewhelper and its direct assertions were deleted.Foreign shapes: delete the mirrors
Before:
After:
The prior seven-arm isinstance ladder is deleted.
ValueDescription(MroDispatch)owns presentation dispatch separately from FieldCodec's external-decoder table: adding a presentation handler cannot become an external decoder. Concrete handlers are declared on DisclosureText for object/str/bytes, type/FamilyMeta, dict/mappingproxy and list/tuple/frozenset; there is no ABC virtual-subclass adapter or manual type roster. The inherited ValueDescription.describe is the single typed dispatch call; FieldCodec.describe and DisclosureText.of are deleted. Seventeen existing roots/records in the actual commander/detail family now declare DisclosedRecord; that base owns record/identified-record construction from its cached FieldPlans identity metadata. Ordinary unrelated foreign objects retain scalar presentation.The earlier ValueShape/seven mirror subclasses (60 lines), DisclosureShapes forwarders (30 lines), and unused view helper (seven lines) stay deleted. Toad's entire DisclosedValue/RecordValue/IdentifiedRecordValue/SequenceValue/MappingValue family is now deleted too. Core DisclosureText owns prepared child entries, semantic keys, field values and summaries; native DeclaredDisclosure only paints leaf or StructuredText capabilities. ViewTable shares each row's prepared values between identity and cells, and owns the immutable entities map and duplicate-identity rejection. Native selection and tables borrow that same map rather than recovering identity twice.
Child entries and summary strings cache only on each source description.
summaryis now a cached property to stop expansion, title resize, plain text and facts from formatting/decoding an unchanged value repeatedly—not to hide the FamilyText audit finding. Original field children remain separate from identity-only summary values and share their prepared field descriptions. No cross-source cache or original-field deletion was introduced.View identity is nominal across the complete projection call family: existing ViewExclusion classes replace view strings in Projected, FieldCodec projections/project/view_columns, ViewTable, encoded field traversal and their production/tool/test callers. Exclusion uses the selected directive's read operation; SnapshotExclude owns its SnapshotName behavior. Status/Report/Arguments now have declarations rather than free strings. No string-accepting compatibility path remains.
Projected retains native
property.__set_name__, read-only name/annotation contracts and signature-owned return annotation. FamilyText's cached summary still returns its declared identity directly. Root's NRA #158 correction is included through the upgraded dependency; exact-head audit success and the typeshed repair remain Root's qualification. No Any/cast/ignore, base-call deletion or allowlist was added.One action cut, one delivery, one HUD
Before: CommanderHud.of read previous packets and disposal evidence, then pass_body discarded that board, recaptured history and replaced the partial HUD. Open and overdue sweeps repeated the same subject queries. CommanderFrame.changed treated a disposable file as a delivery receipt, including after a failed send.
After:
No cross-beat cache or second action ledger was added. Existing failure packets retain original handled pings, ages, refusal evidence and exact commander birth.
Archived holders and retained LOST packets
Before, WorkBranches._checkout matched a registered path without consulting the registration's archive state. It now reads
snapshot.statuses[thread.name].archivedwhile preserving exact resolved-path matching, sorted names, the caller's worktree map and the BranchCheckout family. A stopped nonarchived worker remains a holder; an archived-only checkout is UnregisteredBranchCheckout. ProgressRead and the actual OrderlessPullRequest/StuckMerge consumers retain the unmerged work rather than deleting it.IMPL-4: the missing answer was which head verdict clears which subject. HeadSubject.clears delegates to verdict.decides; UnlandedHeadSubject overrides it with verdict.supersedes. The existing action_at reader and per-history memo remain the only review-evidence path. EventTime.occurred answers whether original evidence exists without fabricating a timestamp, magic cutoff or second clearance ledger. Ordinary OK/BACK/reviewing never clear LOST. No packet history was edited.
Main #3622's OwnerNotice publication path is retained, with the witness attached to the actual published task. Main #3617's CommanderLoad/ServiceReading parent owns health, completion and stale detail refusal. CommanderLoad.health_lines at commander_hud.py:289 now supplies both header and status_strip: failure/error/age, completion, then retained status before values. Native #1321 consumes only status_strip. HudDisplayFacts includes original failure records but excludes ticking completion clocks. New main wire projectors use the nominal view API. No second native header or duplicate heartbeat field was introduced.
Latest correction and current-main integration
Theorem basis: paper1 Theorems 4.6/4.7 for deleting outside copies; Theorem 4.8 for retaining distinct recipient histories while sharing board preparation. No nominal identity, geometry API or original detail capability was flattened.
Committed packet owns quiet publication
CommanderUpdate now carries PublicationFacts: explicit UnpublishedFacts by default, or PublishedFacts containing the existing FieldCodec comparison digest/TextDigest of HudDisplayFacts. The digest follows declaration comparison fields; there is no manual display-field roster.
CommanderNotice compares current facts with the latest committed packet's witness. Send attaches the witness to the actual message task. If publication fails before commit, latest() still returns the prior packet and the next identical beat retries. CommanderFrame can still display the current view on failure, but changed() and its broad ToolRefusedError-as-changed path are deleted. Historical packets receive no fabricated digest and no retained messages/inputs are rewritten or replayed. The publication witness is excluded from observation equality; suppression compares that field explicitly, and the disposable HUD is not a second receipt.
Controls authored, UNRUN
Latest correction evidence:
p930-corrected-order-source.txtparses/compiles all54 changed Core and four changed native modules with zero omissions and no product imports. It lists the actual ValueDescription/DisclosedRecord/DisclosureText/Projected declarations, preserved descriptor and cached identity behavior, and whole-src/tests/tools searches in both repositories: no DisclosureText.of, FieldCodec.describe or ValueDescription[...] callers remain. Both whitespace checks pass. No changed-owner tests, checker or real application run was launched. Dynamic aliases remain unresolved; compilation is not import or typing proof.Historical source evidence:
p930-merge-owner-map.txtretains existing refactor-audit ParsedModule/FunctionFacts maps for the changed owners at both merge-parent revisions.p930-final-source.txtparses all 1,183 tracked Core and 636 tracked Toad Python files across src/tests/tools with zero parse omissions, and compiles the 54 changed Core plus four changed Toad modules without executing them. It lists every ViewTable caller, the sole ReportExclude declaration, shared health consumers and original-history methods. Dynamic aliases remain unresolved; AST is not behavior proof. The final one-line failure-history move was separately parsed/compiled in p930-failure-cut-push.log. Whole-diff whitespace checks pass. No tests/checkers/product import probes ran. Main's old row/prose control was migrated to packet order plus declaration-owned groups; valid service-health controls remain.Earlier source evidence: retained complete source map and targeted
p930-disclosure-targeted-map.txtuse existing refactor-audit ParsedModule; zero parse omissions, dynamic aliases unresolved.p930-owner-source.logparses/compiles all 36 changed Python modules, reports zero decisions in FieldCodec.describe and no presentation handlers in FieldCodec's decoder table; diff check clean.p930-view-migration.logrecords the one-shot AST argument migration; its converter was deleted after its one successful run. Paired native source checks parse/compile four modules and find zero remaining callers of the deleted native family over src/tests/tools. No product imports, tests, checker, App/provider/install or live mutations were run.Production growth rationale against main
pyproject.toml declares the presentation annotation dependency. Uv regenerated uv.lock and advanced NRA to merged d0667af3; Root retains stack refresh/installation. Test growth is the retained real publication/native controls, not executed qualification.
Retained qualification and unresolved owners
Main
62c029335647dd11381effbb99099ccce8bbd527is included through normal merges. The final requested 22-commit main update is merge078fb1d29, changes no P930 feature delta, and its remote readback equals HEAD. The recorded source claim was made at feature checkpoint fd6edbe immediately before this requested merge; Root reconciles the claim head. The merges preserve shared-command service, NRA migration/deletions, #3622 OwnerNotice publication and #3617 shared service-health evidence. P941's complete allocated publication cut, per-remote batching, captured review timers and frozen frame.pulls ownership remain; deleted aggregate preparation and discarded home-branch comparison stay deleted. Root's P941 twelve-plus-six results and native-pin qualification remain evidence for those original cuts, not a claim about this changed head.Archived matched Core b7c7748 / Toad 56c3f1caf diagnostics are retained under
/home/ts/.cache/agent-scratch/codex-greentext/p930-matched-types-20261029-164858/. Toad's three selected files exited0 in23.149s. Core's real three stale UnitObservation.self.pulls accesses were repaired in the preceding merge. Those runs do not qualify this new head.Hosted jobs 123827933676 (debt-src) and 123827933620 (debt-tools), both for old Core 0d37, crashed on the duplicate ReportExclude and never produced a structural growth verdict. Their raw logs are retained in p930-debt-src.log/p930-debt-tools.log. Old native a131 job 123816989615 reported TypeErrors growth +12 in commander.py and +1 in each disclosure/table file; it is not a matched qualification of this pushed pair. Root owns matched typing/dependency/fresh-interpreter/codec checks, actual measure failures and the real private/copy-safe application journey. No allowlist, naming deletion, Any/cast/ignore or gate-only native patch was added. No green CI, installed display acceptance or speedup is claimed.
The allocated Core tree retains the now-untracked former refactor-audit submodule directory after main removed its gitlink. It was used read-only for the source map and is not included in this PR; no other owner's work or source was removed.
Assumed: DisclosureText is the sole admitted description factory, as Root specified; inherited factory calls through concrete result variants are outside that domain. Root runs the necessary combined changed-owner controls and fresh-interpreter/codec/typing checks, verifies the upgraded NRA's actual gate results, repairs the property stub, refreshes the stack after accepted landings, and verifies the real paired commander journey without touching human read markers or uncertain inputs.