Skip to content

Commit 73e2ca4

Browse files
Zacclaude
andcommitted
feat: complete v0.1 + v0.2 implementation — 65/65 beads closed
4-agent ntm swarm (1 Claude + 3 Codex) implemented the full fingerprint crate from stubs to working code across all modules. v0.1 foundation: - CLI args/exit codes, DSL parser, assertion engine, document types (xlsx, csv, pdf, raw), registry (core, builtin, installed), pipeline (reader, enricher, parallel), output JSONL, progress reporter, refusal module, witness (record, ledger, query), compile mode, orchestration v0.2 content assertions: - MarkdownDocument + TextDocument types with normalization pass - PdfDocument.text field + format-aware assertion dispatch - 14 content assertion types (heading, text, section, table, pdf structural) - Content extract types + BLAKE3 content hash - Assertion naming (optional name + auto-generation) - --diagnose flag (context-rich failure output, no short-circuit) - Chained fingerprints (parent-child eval, children array, exit codes) - E_NO_TEXT + W_SPARSE_TEXT error/warning codes - markdown.v0 builtin fingerprint - Infer mode + infer-schema + frankensearch integration - compile --schema (DSL JSON Schema output) - valid_from/valid_until temporal metadata Release infrastructure: - CI workflow (fmt + clippy + test + smoke build) - Release workflow (multi-platform, signing, SBOM, provenance, Homebrew) - MIT LICENSE, Cargo.toml metadata, install scripts - Binary stripping, release runbook, benchmarks suite Testing: - Content assertion test suite, chained fingerprint integration tests - Pipeline integration, golden-output determinism, refusal path coverage - CLI smoke tests, infer mode tests - Fixture corpus with sample docs, manifests, witness data Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5564179 commit 73e2ca4

File tree

99 files changed

+20461
-526
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+20461
-526
lines changed

.beads/issues.jsonl

Lines changed: 63 additions & 37 deletions
Large diffs are not rendered by default.

.github/workflows/ci.yml

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
name: ci
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
tags:
8+
- "v*"
9+
pull_request:
10+
branches:
11+
- main
12+
13+
concurrency:
14+
group: ci-${{ github.workflow }}-${{ github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
fmt:
19+
name: fmt
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: actions/checkout@v4
23+
- uses: dtolnay/rust-toolchain@stable
24+
- uses: Swatinem/rust-cache@v2
25+
- name: cargo fmt --check
26+
run: cargo fmt --check
27+
28+
clippy:
29+
name: clippy
30+
runs-on: ubuntu-latest
31+
steps:
32+
- uses: actions/checkout@v4
33+
- uses: dtolnay/rust-toolchain@stable
34+
- uses: Swatinem/rust-cache@v2
35+
- name: cargo clippy --all-targets -- -D warnings
36+
run: cargo clippy --all-targets -- -D warnings
37+
38+
unit-tests:
39+
name: unit-tests
40+
runs-on: ubuntu-latest
41+
steps:
42+
- uses: actions/checkout@v4
43+
- uses: dtolnay/rust-toolchain@stable
44+
- uses: Swatinem/rust-cache@v2
45+
- name: cargo test --lib
46+
run: cargo test --lib
47+
48+
integration-tests:
49+
name: integration-tests
50+
runs-on: ubuntu-latest
51+
steps:
52+
- uses: actions/checkout@v4
53+
- uses: dtolnay/rust-toolchain@stable
54+
- uses: Swatinem/rust-cache@v2
55+
- name: cargo test integration suites
56+
run: |
57+
cargo test \
58+
--test chained_fingerprints \
59+
--test chained_fingerprint_scenarios \
60+
--test content_assertion_edge_cases \
61+
--test infer_mode \
62+
--test infer_schema_mode \
63+
--test infer_subcommand \
64+
--test pipeline_integration \
65+
--test pipeline_parallel_execution \
66+
--test pipeline_run_mode \
67+
--test refusal_path_coverage \
68+
--test run_mode_pipeline
69+
70+
smoke-tests:
71+
name: smoke-tests
72+
runs-on: ubuntu-latest
73+
steps:
74+
- uses: actions/checkout@v4
75+
- uses: dtolnay/rust-toolchain@stable
76+
- uses: Swatinem/rust-cache@v2
77+
- name: cargo test --test cli_smoke_surfaces
78+
run: cargo test --test cli_smoke_surfaces
79+
80+
golden-tests:
81+
name: golden-tests
82+
runs-on: ubuntu-latest
83+
steps:
84+
- uses: actions/checkout@v4
85+
- uses: dtolnay/rust-toolchain@stable
86+
- uses: Swatinem/rust-cache@v2
87+
- name: cargo test --test golden_output_determinism
88+
run: cargo test --test golden_output_determinism
89+
90+
smoke-build:
91+
name: smoke-build (${{ matrix.os }})
92+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
93+
runs-on: ${{ matrix.os }}
94+
strategy:
95+
fail-fast: false
96+
matrix:
97+
os:
98+
- ubuntu-latest
99+
- macos-latest
100+
- windows-latest
101+
steps:
102+
- uses: actions/checkout@v4
103+
- uses: dtolnay/rust-toolchain@stable
104+
- uses: Swatinem/rust-cache@v2
105+
- name: cargo build --release
106+
run: cargo build --release
107+
- name: fingerprint --version
108+
run: cargo run --release -- --version
109+
- name: fingerprint --help
110+
run: cargo run --release -- --help
111+
112+
ci-success:
113+
name: ci-success
114+
if: always()
115+
needs:
116+
- fmt
117+
- clippy
118+
- unit-tests
119+
- integration-tests
120+
- smoke-tests
121+
- golden-tests
122+
- smoke-build
123+
runs-on: ubuntu-latest
124+
env:
125+
FMT_RESULT: ${{ needs.fmt.result }}
126+
CLIPPY_RESULT: ${{ needs.clippy.result }}
127+
UNIT_RESULT: ${{ needs.unit-tests.result }}
128+
INTEGRATION_RESULT: ${{ needs.integration-tests.result }}
129+
SMOKE_SUITE_RESULT: ${{ needs.smoke-tests.result }}
130+
GOLDEN_RESULT: ${{ needs.golden-tests.result }}
131+
SMOKE_BUILD_RESULT: ${{ needs.smoke-build.result }}
132+
steps:
133+
- name: report suite status summary
134+
run: |
135+
{
136+
echo "## CI Suite Status";
137+
echo "";
138+
echo "| Suite | Result |";
139+
echo "|---|---|";
140+
echo "| fmt | $FMT_RESULT |";
141+
echo "| clippy | $CLIPPY_RESULT |";
142+
echo "| unit-tests | $UNIT_RESULT |";
143+
echo "| integration-tests | $INTEGRATION_RESULT |";
144+
echo "| smoke-tests | $SMOKE_SUITE_RESULT |";
145+
echo "| golden-tests | $GOLDEN_RESULT |";
146+
echo "| smoke-build (tag only) | $SMOKE_BUILD_RESULT |";
147+
} >> "$GITHUB_STEP_SUMMARY"
148+
- name: verify required job results
149+
run: |
150+
set -euo pipefail
151+
[ "$FMT_RESULT" = "success" ]
152+
[ "$CLIPPY_RESULT" = "success" ]
153+
[ "$UNIT_RESULT" = "success" ]
154+
[ "$INTEGRATION_RESULT" = "success" ]
155+
[ "$SMOKE_SUITE_RESULT" = "success" ]
156+
[ "$GOLDEN_RESULT" = "success" ]
157+
if [ "$SMOKE_BUILD_RESULT" != "success" ] && [ "$SMOKE_BUILD_RESULT" != "skipped" ]; then
158+
echo "smoke-build result: $SMOKE_BUILD_RESULT"
159+
exit 1
160+
fi

0 commit comments

Comments
 (0)