The last of the paused branches, from its "not for merge" checkpoint:
extraction in ledger-import (text, pages, page images; capped, caught),
journaled as attachment.text_extracted; dedup by hash with
books.find_attachment and books.consolidate_duplicates; annotations and
books.set_entry_settles; the company record categories; the two fuzz
targets; feature attachment_text. Nineteen files conflicted with the
four P4b merges, resolved as plan 8.0.2 says: P6 retakes schema 18 (it
had taken 16, which S4.3 holds; S5 holds 17); the tool table is 129 and
the destructive count 31; both sides' appends kept with their seams
restored; one B-27 paragraph naming every feature; in the old-books
fixture P6's hand-written reimbursement is entry 7 (its ids collided
with S4.3's invoice); the replay fuzzer's list gains S7's
invoice.written_off; S4.3's issued-PDF test expects the extraction
record P6 journals right after a filing.
One integration defect between S7 and P6, found by the arap property
test and fixed here: under P6's dedup, a write-off whose evidence bytes
were filed already (the same collection letter for a second write-off of
the same invoice) was refused only after its entry had been journaled,
at the final link to the invoice ("already linked"). The write-off now
resolves the dedup before anything is journaled and keeps a link the
record already has to the invoice instead of refusing it; an explicit
existing_attachment_id already on an entry is still refused (S7's
one-receipt-once rule). P6's gate never ran before the pause; it runs on
main after this merge, and its ledger-store -> ledger-import dependency
is the open review point (plan 8.0.1).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp
49 lines
1.7 KiB
YAML
49 lines
1.7 KiB
YAML
# Weekly, and on demand: the slow layers (docs/testing.md): the proofs,
|
|
# the GnuCash oracle and the fuzz targets. Mutation testing is not run in
|
|
# CI (owner, 2026-10-29, D-59): it is a local run (`just mutants-*`), and
|
|
# P12 runs it whole on the owner's desktop.
|
|
name: scheduled
|
|
on:
|
|
schedule:
|
|
- cron: "17 6 * * 1"
|
|
workflow_dispatch:
|
|
jobs:
|
|
prove:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: jdx/mise-action@v2
|
|
- run: just prove
|
|
# The Kani harnesses too slow for prove's 30 minutes on four cores
|
|
# (justfile kani_slow; docs/verification.md), on a runner of their own.
|
|
prove-slow:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: jdx/mise-action@v2
|
|
- run: just prove-slow
|
|
oracle:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: jdx/mise-action@v2
|
|
- run: just oracle
|
|
fuzz:
|
|
runs-on: ubuntu-24.04
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target: [fuzz_journal_line, fuzz_entry_validate, fuzz_op_sequence, fuzz_core_serde, fuzz_store_open, fuzz_store_replay, fuzz_settings_replay, fuzz_import_csv, fuzz_config_parse, fuzz_extract_pdf, fuzz_extract_xlsx]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: jdx/mise-action@v2
|
|
- run: just fuzz ${{ matrix.target }} 600
|
|
# A crash's input is the finding: keep it (the 2026-10-26 run found one
|
|
# in fuzz_store_replay and kept nothing, so it had to be hunted again).
|
|
- if: failure()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: fuzz-${{ matrix.target }}-artifacts
|
|
path: fuzz/artifacts
|
|
if-no-files-found: ignore
|