Release v0.1.30 - #16
Merged
Merged
Conversation
The tray header claimed "Some sources failed" when collection succeeded but today's usage was merely partial-quality (inferred timestamps, cumulative recovery). The read model collapsed refresh outcome, usage quality, and availability into one OverviewDataStatus. - Narrow tray data availability to current/stale/empty and derive it only from token/model availability. - Add TraySummaryDataQuality (complete/partial) mapped independently from the existing has_partial_data fact. - Expose the persisted latest refresh status as its own read-model field instead of flattening failed/cancelled/partial into data status; partial usage no longer masks a failed refresh. - Extend the tray summary IPC response with dataQuality and latestRefreshStatus wire fields. - Add application combination tests and real-SQLite adapter fixtures proving refresh outcome and usage quality survive independently, including the Antigravity case (succeeded refresh + partial row). - Extend the desktop bridge evidence to assert the serialized fields stay separate on an empty database and after a partial-quality seed. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
- Regenerate the TypeScript contract with the new tray summary fields. - Require and validate dataQuality and latestRefreshStatus in the Zod schema; dataStatus narrows to current/stale/empty and unknown enum values are rejected. - Keep test-only React component suites on the development export condition: React 19.2.7's production build omits `act`, which broke every vitest component test (React.act is not a function). Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Replace the overloaded freshnessState helper with one pure tray header
precedence function over the three independent response dimensions:
query error, active refresh, failed/cancelled latest refresh, partial
refresh, partial usage quality ("Some usage is estimated"), then
availability. A partial refresh outranks estimated usage.
- Add the estimated presentation state with accurate copy; "Some
sources failed" is reserved for an actual partial refresh.
- Keep empty content derived only from dataStatus and keep previous
metrics visible during background refresh.
- Cover the full precedence decision table at the helper layer and
assert visible copy in tray component tests, including mutual
exclusivity for the successful partial-quality case.
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
TraySummaryResponse.dataStatus changed meaning and lost the partial and failed variants while two required fields were added. Per the IPC contract design, changed field meaning is a breaking change and must increment the major contract version so the bootstrap compatibility guard identifies mixed old/new runtime and frontend pairs. - Set CONTRACT_VERSION to 2 in response.rs; update the registry test. - Update the harness assertion, generated template, and IPC fixtures. - Update bootstrap service tests and the frontend mismatch test (runtime 3 vs frontend 2). Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Move the execution plan to completed/ with recorded verification outcomes, including the IPC contract v2 bump. Preserve the uncommitted handoff document that diagnosed the false "Some sources failed" report. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
A Fedora report showed Burnly rejecting a healthy OpenCode database because a residual V2 session_message table existed without session_v2: inspect_schema proved V1 complete, then the fatal V2 probe discarded the proven V1 capability, and the adapter collapsed the failure into source.invalid_location. Both OpenCode projections failed. - Inspect V1 and V2 independently; an incomplete generation is a bounded reason (missing session/detail table), never fatal while another generation is complete. - Record per-generation message counts and require the ignored generation's residue to be covered by the selected generation's cumulative counters before ignoring it; uncovered residue fails closed with collector.incompatible_envelope instead of silently understating totals. - Make PRAGMA table_info and COUNT(*) query failures fatal (OpenCodeSchemaError::QueryFailed); a query failure can indicate corruption or authorization problems and is never treated as ignorable residue. - Classify store failures by variant: schema/configure/snapshot/query to collector.incompatible_envelope; open failures probe read access for source.permission_denied vs source.invalid_location. - Emit a bounded, redacted informational diagnostic when an incomplete generation is ignored; never read part or broaden the usage allowlist; keep profile version 2 with no migration or frontend change. - Add regression coverage: production-shaped mixed schema (complete V1 plus residual session_message), uncovered-residue fail-closed, missing-column fatal, permission and missing-path classification, idempotent repeated refresh, and no-duplication of residual rows. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Move the focused execution plan to active/ with verification outcomes, including the review remediation for residual-coverage proof, error classification, and fatal schema-query failures. Preserve the mixed-generation tolerance proposal and the pre-existing macOS/Antigravity baseline remediation proposal that the focused plan supersedes for its OpenCode section. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Second review round found two defects in the mixed-generation fix: 1. The row-count coverage heuristic was unsound: an incomplete generation was ignored when its message-row count was no greater than the selected generation's, but row counts do not prove the rows represent the same usage. A separate V2 row with a new ID could pass the check and its usage was silently discarded. Replace the count comparison with an identity-level proof: every residual detail row must share its stable message ID with the selected generation's detail table (the cross-generation deduplication key). The snapshot runs an anti-join; if any ignored row has no matching selected row, collection fails closed with collector.incompatible_envelope instead of understating totals. 2. Missing required columns were misclassified as SQLite query failures, so a structurally incomplete secondary generation failed the whole database. A successfully executed PRAGMA that reveals a missing column is structural incompleteness: map it to Incomplete(MissingRequiredColumn) so a complete generation is still selected and the incomplete one is ignored diagnostically. Only actual SQLite execution errors remain fatal QueryFailed; a missing column is fatal only when no complete generation exists. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Update the mixed-generation schema tolerance plan to reflect the second review round: identity-level redundancy proof replaces the row-count heuristic, and missing required columns are structural incompleteness rather than fatal query failures. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
…precedence Third review round found two defects in the mixed-generation fix: 1. The redundancy proof ran in a short snapshot that was dropped before collection's per-page snapshots, so a unique row added to the incomplete detail table mid-collection could be ignored with a Complete result. Re-run the proof after all collection reads and before building the result, so it must hold at the end of collection. Also correct an inverted result: redundancy_exceeded returns true when residue is NOT redundant, and the helper now maps that to a fail-closed outcome instead of accepting the database. 2. The column-verification tuple match let a QueryFailed on one table be downgraded to structural incompleteness when the other table reported a missing column. Extract combine_column_results so a genuine query failure on either table is always fatal and wins over a missing column, with direct unit coverage of every combination. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Update the mixed-generation schema tolerance plan with the third review round: the redundancy proof is re-run after collection to close the mid-collection TOCTOU, and genuine schema-query failures take precedence over structural missing columns when combining the two verifications. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
…e lifecycle (chunk 04)
…g, and coordinator orchestration (chunk 05)
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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
Verification
pnpm architecture:checkpnpm release:version v0.1.30pnpm release-workflow:checkpnpm packaging:checkpnpm release-artifacts:testpnpm updater-metadata:testpnpm verifypnpm verify:runtime