Skip to content

Release v0.1.30 - #16

Merged
fikrilal merged 20 commits into
mainfrom
development
Sep 3, 2026
Merged

fikrilal merged 20 commits into
mainfrom
development

Conversation

@fikrilal

@fikrilal fikrilal commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • undated historical baseline attribution for Antigravity conversations without source timestamps
  • automated profile-2 historical repair service with full ledger audit proof
  • account-safe collect-sync tombstones across all registered device accounts
  • multi-stage refresh coordination with stage-specific resumability
  • publish release metadata and notes for v0.1.30

Verification

  • pnpm architecture:check
  • pnpm release:version v0.1.30
  • pnpm release-workflow:check
  • pnpm packaging:check
  • pnpm release-artifacts:test
  • pnpm updater-metadata:test
  • pnpm verify
  • pnpm verify:runtime
  • development push CI

fikrilal and others added 20 commits August 23, 2026 14:16
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>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@fikrilal
fikrilal merged commit 2e47adb into main Sep 3, 2026
3 checks passed
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