Skip to content
Open
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
c5455db
Define Rust-owned scan-run display content and fix Python labels
evildarkarchon Aug 6, 2026
a009654
Add Ruff and clarify scan presentation test strategy
evildarkarchon Aug 6, 2026
24f0842
Withhold Reset To Default in the native CLI and Qt GUI
evildarkarchon Aug 6, 2026
012b39c
Adopt the shared vocabulary for the four remaining scan-run enums
evildarkarchon Aug 6, 2026
669035d
Demonstrate a non-blocking Qt recovery prompt path
evildarkarchon Aug 6, 2026
0edad0d
Build the classic-scan-presentation crate with wording pinned
evildarkarchon Aug 6, 2026
006f118
Migrate the TUI to shared scan-run presentation
evildarkarchon Aug 6, 2026
6ca5542
Address code review of the TUI presentation migration
evildarkarchon Aug 6, 2026
012c3c3
Carry Crash Log Scan Run display lines across the C++ bridge
evildarkarchon Aug 6, 2026
f51d6f6
Fix a line-initial role label and two CXX parity-gate bugs
evildarkarchon Aug 6, 2026
41b2c4f
Add shared run abandonment to the scanlog core contract
evildarkarchon Aug 6, 2026
b06b230
Make the continuation race tests actually race
evildarkarchon Aug 6, 2026
a9291d6
Render Crash Log Scan Run display lines in the Qt GUI
evildarkarchon Aug 6, 2026
572563e
Expose Crash Log Scan Run display lines on the Node binding
evildarkarchon Aug 6, 2026
828de01
Render core-owned display lines in the Node CLI, and unrot two eviden…
evildarkarchon Aug 6, 2026
60607a8
Render core-owned display lines in the Python binding and CLI
evildarkarchon Aug 6, 2026
652cb84
Record why the replay rejection keeps its kind attribute
evildarkarchon Aug 7, 2026
f502c19
Expose shared run abandonment across the bindings and adopt it in bot…
evildarkarchon Aug 7, 2026
1479135
Fail every frontend audit when it rewords what core said
evildarkarchon Aug 7, 2026
a490cd2
Let the Qt GUI state a completed run in core's words, and audit the N…
evildarkarchon Aug 7, 2026
b70d27a
Describe each Local Ignore recovery decision in core, with availabili…
evildarkarchon Aug 7, 2026
8d33e74
Drive every frontend's recovery prompt from core's decision descriptions
evildarkarchon Aug 7, 2026
c5b06df
Stop the recovery prompt restating the file the run render already names
evildarkarchon Aug 7, 2026
7454fac
feat(compliance): freeze evidence migration ledger (#186)
evildarkarchon Aug 15, 2026
18e36cc
Document executable cross-adapter conformance
evildarkarchon Aug 15, 2026
213dd53
feat(compliance): materialize input-only scenario runs (#187)
evildarkarchon Aug 15, 2026
11517c1
feat: map CXX parity rows to Rust capabilities (#188)
evildarkarchon Aug 15, 2026
76e8ffc
feat(compliance): validate execution receipts (#189)
evildarkarchon Aug 15, 2026
cd8192e
Implement scoped conformance coverage reports
evildarkarchon Aug 15, 2026
c1be6b3
Implement scan-run shadow conformance (#191)
evildarkarchon Aug 16, 2026
5208b1f
Run `cargo fmt --all`
evildarkarchon Aug 16, 2026
c791532
Implement native CXX scan conformance (#192)
evildarkarchon Aug 16, 2026
b1d924f
Address CXX conformance review findings
evildarkarchon Aug 16, 2026
0d149d9
Classify native toolchain environment failures
evildarkarchon Aug 16, 2026
aada4a8
Conform scan-run Local Ignore recovery (#193)
evildarkarchon Aug 16, 2026
90c2494
Address scan-run conformance review findings
evildarkarchon Aug 16, 2026
d3c72f8
feat: conform local ignore reset outcomes
evildarkarchon Aug 16, 2026
1c18683
Implement scan-run lifecycle conformance (#195)
evildarkarchon Aug 16, 2026
7a15d6c
Implement structured failure conformance (#196)
evildarkarchon Aug 16, 2026
18204c5
Emit scan consumer conformance receipts (#197)
evildarkarchon Aug 16, 2026
fa7a710
Harden consumer receipt authentication
evildarkarchon Aug 16, 2026
53e7089
Promote Crash Log Scan Run receipts to blocking
evildarkarchon Aug 16, 2026
6b241c8
Retire redundant Crash Log Scan Run positive evidence (#199)
evildarkarchon Sep 5, 2026
5146ccf
Ignore generated architecture review assets and pytest temp files
evildarkarchon Sep 5, 2026
ba430e6
Implement read-only User Settings conformance (#200)
evildarkarchon Sep 5, 2026
e79246d
Conform User Settings bootstrap and update operations (#201)
evildarkarchon Sep 5, 2026
341bdd6
test: conform User Settings migration and restoration (#202)
evildarkarchon Sep 5, 2026
00b8ab3
Make User Settings receipts and maintained consumers blocking (#203)
evildarkarchon Sep 5, 2026
49041a4
Retire migrated User Settings registry claims (#204)
evildarkarchon Sep 5, 2026
a5c132d
Migrate focused semantic analyzers and FormID conformance (#205)
evildarkarchon Sep 5, 2026
67140bf
Fix Mod Guidance exclusion conformance carrier (#205)
evildarkarchon Sep 7, 2026
2f5b3d4
Add blocking Installed YAML Data conformance (#206)
evildarkarchon Sep 7, 2026
f443102
Migrate Autoscan Report goldens to blocking conformance
evildarkarchon Sep 7, 2026
5295442
Migrate Vocabulary and Display Content transport conformance (#208)
evildarkarchon Sep 7, 2026
c223b4b
Migrate config file path and message conformance packs (#209)
evildarkarchon Sep 7, 2026
01322a0
Migrate deterministic database, version registry, and scan game confo…
evildarkarchon Sep 7, 2026
be6f42b
Share setup for domain conformance receipt tests
evildarkarchon Sep 7, 2026
cb28659
Retire fixture-backed registry evidence (#211)
evildarkarchon Sep 7, 2026
13f0aa7
Add executable aux, performance, and shared conformance packs (#212)
evildarkarchon Sep 7, 2026
7e71c20
Migrate registry settings and version conformance (#213)
evildarkarchon Sep 8, 2026
5c18e6f
Implement controlled update and web conformance (#214)
evildarkarchon Sep 8, 2026
ed2d271
Migrate XSE and installation-dependent conformance (#215)
evildarkarchon Sep 8, 2026
c5c0025
Harden repository conformance accounting and retire test activation (…
evildarkarchon Sep 8, 2026
098e6a5
Complete receipt-backed binding compliance and retire legacy claims (…
evildarkarchon Sep 8, 2026
1bb2b26
Constrain path conformance to executed binding aliases (#216)
evildarkarchon Sep 8, 2026
694ae4d
Add crashgen-check and hash-cache-controls conformance docs
evildarkarchon Sep 8, 2026
89a58ae
Remove temp files and add the pattern to .gitignore
evildarkarchon Sep 8, 2026
b8e7c07
Move issue tracking guidance to local Markdown
evildarkarchon Sep 10, 2026
7935fb5
Run binding diagnostics before enforcing participant success
evildarkarchon Sep 10, 2026
f1ac160
Normalize Windows paths in binding conformance
evildarkarchon Sep 10, 2026
f1a2a6f
Normalize Windows temp paths and preserve command diagnostics
evildarkarchon Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
30 changes: 26 additions & 4 deletions .agents/skills/classic-project-guide/references/repo-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ This file supplements `AGENTS.md`. Keep always-on architecture rules there; keep
| Rust-only crates | `cargo fmt`, `cargo clippy`, focused `cargo test`; set `PYO3_PYTHON` first if PyO3 can build | Affected `docs/api/` pages for public contracts |
| `classic-cli/` or `classic-gui/` | PowerShell wrappers in `Native C++ Wrappers` | Packaging/install output only when requested; CLI integration fixtures may require submodules |
| `cpp-bindings/classic-cpp-bridge/` or Rust APIs exposed through C++ | CXX parity gate, then CLI/GUI wrapper tests for changed consumers | `docs/implementation/cxx_api_parity/baseline/`; `docs/api/cxx-parity-gate.md` |
| `node-bindings/classic-node/` or Rust APIs exposed through Node | Node parity gate, declaration freshness, Bun and Node tests | `index.d.ts`, Node runtime coverage registry, `docs/implementation/node_api_parity/baseline/` |
| `python-bindings/` or Rust APIs exposed through Python | Python parity gate, stub validation, rebuild, pytest | `.pyi` files, Python runtime coverage registry, `python-bindings/parity-artifacts/`, `docs/implementation/python_api_parity/baseline/` |
| `node-bindings/classic-node/` or Rust APIs exposed through Node | Node parity gate, declaration freshness, Bun and Node tests | `index.d.ts`, shared conformance packs and receipts, `docs/implementation/node_api_parity/baseline/` |
| `python-bindings/` or Rust APIs exposed through Python | Python parity gate, stub validation, rebuild, pytest | `.pyi` files, shared conformance packs and receipts, `python-bindings/parity-artifacts/`, `docs/implementation/python_api_parity/baseline/` |
| `CLASSIC Data/databases/` or schema-version behavior | Schema drift guard and YAML publish validator | `docs/api/yaml-update-delivery.md` for loader, manifest, or delivery contract changes |
| `CLASSIC Data/app-notification.yaml` or notification publish tooling | Notification source validator, dry-run harness, publish-tool tests | `docs/api/app-update-notification-delivery.md` and affected update/path/error API docs |
| Linux or cloud validation | Rust-only subsets and source-only gates first | Note any skipped Windows/MSVC-native checks explicitly |
Expand Down Expand Up @@ -85,6 +85,27 @@ Use the `--group drift-guards` form when the schema drift guard or YAML publish

## Binding Parity Workflows

The canonical contributor entrypoint is the Binding Compliance Suite. Run the
source profile first; run applicable scenario launchers against built native
bindings; aggregate a directory containing every family and execution instance
only when requesting repository-wide proof:

```powershell
python tools/binding_compliance/check_compliance.py --repo-root . --profile ci
python tools/binding_compliance/run_semantic_conformance.py --family <family> --participant <rust|node|python>
pwsh -ExecutionPolicy Bypass -File tools/binding_compliance/conformance/adapters/run_cxx_conformance.ps1 -Family <family> -Compiler msvc
pwsh -ExecutionPolicy Bypass -File tools/binding_compliance/conformance/adapters/run_cxx_conformance.ps1 -Family <family> -Compiler clang-cl
python tools/binding_compliance/check_compliance.py --repo-root . --profile full --receipt-directory <receipt-directory>
```

Use the dedicated Scan Run/User Settings/consumer launchers listed in
`docs/api/binding-compliance-suite.md` for those packs. Missing or stale receipts
fail the full profile; source profiles and individual family jobs cannot certify
the repository. Preserve sibling immutable plans when moving receipt artifacts.
The old runtime registries, their loaders, claim-only summaries, and migration
ledger are removed. The commands below remain focused source diagnostics and
intentional baseline refresh tools; they do not grant runtime proof.

### CXX

Use this when bridge source, `cpp-bindings/classic-cpp-bridge/build.rs`, or a Rust public API exposed through the bridge changes.
Expand Down Expand Up @@ -120,7 +141,7 @@ bun run parity:gate:local:vsdev
bun run shell:vsdev # interactive VS dev shell in this directory
```

Use `parity:gate:local` only for intentional source-backed drift; it refreshes `index.d.ts`, updates the tracked Node baseline, and verifies declaration freshness. Commit affected files under `docs/implementation/node_api_parity/baseline/`, `node-bindings/classic-node/index.d.ts`, and `node-bindings/classic-node/__test__/fixtures/runtime_coverage_registry.json` when ownership changes. Do not commit `node-bindings/classic-node/parity-artifacts/` or generated `index.js`.
Use `parity:gate:local` only for intentional source-backed drift; it refreshes `index.d.ts`, updates the tracked Node baseline, and verifies declaration freshness. Commit affected files under `docs/implementation/node_api_parity/baseline/`, `node-bindings/classic-node/index.d.ts` when source ownership changes. Do not commit `node-bindings/classic-node/parity-artifacts/` or generated `index.js`.

### Python

Expand All @@ -143,7 +164,7 @@ uv sync --project python-bindings --inexact --group drift-guards
uv run --project python-bindings python tools/schema_version_gate.py --repo-root .
```

Commit touched `.pyi` files, runtime coverage registry changes under `python-bindings/tests/fixtures/`, tracked reports under `python-bindings/parity-artifacts/`, and affected files under `docs/implementation/python_api_parity/baseline/` when generated results legitimately change.
Commit touched `.pyi` files, shared conformance pack/adapter changes, tracked reports under `python-bindings/parity-artifacts/`, and affected files under `docs/implementation/python_api_parity/baseline/` when generated results legitimately change.

## Data Publish Workflows

Expand Down Expand Up @@ -180,6 +201,7 @@ Primary workflows:

| Workflow | Purpose |
| --- | --- |
| `ci-binding-compliance.yml` | Blocking umbrella: same-revision reusable participant workflows, then full authenticated receipt aggregation |
| `ci-cpp.yml` | CXX parity plus CLI and GUI build/test pipeline |
| `ci-rust.yml` | Rust format, lint, build, and test pipeline |
| `ci-typescript.yml` | Node parity, declaration freshness, and runtime tests |
Expand Down
30 changes: 26 additions & 4 deletions .claude/skills/classic-project-guide/references/repo-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ This file supplements `AGENTS.md`. Keep always-on architecture rules there; keep
| Rust-only crates | `cargo fmt`, `cargo clippy`, focused `cargo test`; set `PYO3_PYTHON` first if PyO3 can build | Affected `docs/api/` pages for public contracts |
| `classic-cli/` or `classic-gui/` | PowerShell wrappers in `Native C++ Wrappers` | Packaging/install output only when requested; CLI integration fixtures may require submodules |
| `cpp-bindings/classic-cpp-bridge/` or Rust APIs exposed through C++ | CXX parity gate, then CLI/GUI wrapper tests for changed consumers | `docs/implementation/cxx_api_parity/baseline/`; `docs/api/cxx-parity-gate.md` |
| `node-bindings/classic-node/` or Rust APIs exposed through Node | Node parity gate, declaration freshness, Bun and Node tests | `index.d.ts`, Node runtime coverage registry, `docs/implementation/node_api_parity/baseline/` |
| `python-bindings/` or Rust APIs exposed through Python | Python parity gate, stub validation, rebuild, pytest | `.pyi` files, Python runtime coverage registry, `python-bindings/parity-artifacts/`, `docs/implementation/python_api_parity/baseline/` |
| `node-bindings/classic-node/` or Rust APIs exposed through Node | Node parity gate, declaration freshness, Bun and Node tests | `index.d.ts`, shared conformance packs and receipts, `docs/implementation/node_api_parity/baseline/` |
| `python-bindings/` or Rust APIs exposed through Python | Python parity gate, stub validation, rebuild, pytest | `.pyi` files, shared conformance packs and receipts, `python-bindings/parity-artifacts/`, `docs/implementation/python_api_parity/baseline/` |
| `CLASSIC Data/databases/` or schema-version behavior | Schema drift guard and YAML publish validator | `docs/api/yaml-update-delivery.md` for loader, manifest, or delivery contract changes |
| `CLASSIC Data/app-notification.yaml` or notification publish tooling | Notification source validator, dry-run harness, publish-tool tests | `docs/api/app-update-notification-delivery.md` and affected update/path/error API docs |
| Linux or cloud validation | Rust-only subsets and source-only gates first | Note any skipped Windows/MSVC-native checks explicitly |
Expand Down Expand Up @@ -85,6 +85,27 @@ Use the `--group drift-guards` form when the schema drift guard or YAML publish

## Binding Parity Workflows

The canonical contributor entrypoint is the Binding Compliance Suite. Run the
source profile first; run applicable scenario launchers against built native
bindings; aggregate a directory containing every family and execution instance
only when requesting repository-wide proof:

```powershell
python tools/binding_compliance/check_compliance.py --repo-root . --profile ci
python tools/binding_compliance/run_semantic_conformance.py --family <family> --participant <rust|node|python>
pwsh -ExecutionPolicy Bypass -File tools/binding_compliance/conformance/adapters/run_cxx_conformance.ps1 -Family <family> -Compiler msvc
pwsh -ExecutionPolicy Bypass -File tools/binding_compliance/conformance/adapters/run_cxx_conformance.ps1 -Family <family> -Compiler clang-cl
python tools/binding_compliance/check_compliance.py --repo-root . --profile full --receipt-directory <receipt-directory>
```

Use the dedicated Scan Run/User Settings/consumer launchers listed in
`docs/api/binding-compliance-suite.md` for those packs. Missing or stale receipts
fail the full profile; source profiles and individual family jobs cannot certify
the repository. Preserve sibling immutable plans when moving receipt artifacts.
The old runtime registries, their loaders, claim-only summaries, and migration
ledger are removed. The commands below remain focused source diagnostics and
intentional baseline refresh tools; they do not grant runtime proof.

### CXX

Use this when bridge source, `cpp-bindings/classic-cpp-bridge/build.rs`, or a Rust public API exposed through the bridge changes.
Expand Down Expand Up @@ -120,7 +141,7 @@ bun run parity:gate:local:vsdev
bun run shell:vsdev # interactive VS dev shell in this directory
```

Use `parity:gate:local` only for intentional source-backed drift; it refreshes `index.d.ts`, updates the tracked Node baseline, and verifies declaration freshness. Commit affected files under `docs/implementation/node_api_parity/baseline/`, `node-bindings/classic-node/index.d.ts`, and `node-bindings/classic-node/__test__/fixtures/runtime_coverage_registry.json` when ownership changes. Do not commit `node-bindings/classic-node/parity-artifacts/` or generated `index.js`.
Use `parity:gate:local` only for intentional source-backed drift; it refreshes `index.d.ts`, updates the tracked Node baseline, and verifies declaration freshness. Commit affected files under `docs/implementation/node_api_parity/baseline/`, `node-bindings/classic-node/index.d.ts` when source ownership changes. Do not commit `node-bindings/classic-node/parity-artifacts/` or generated `index.js`.

### Python

Expand All @@ -143,7 +164,7 @@ uv sync --project python-bindings --inexact --group drift-guards
uv run --project python-bindings python tools/schema_version_gate.py --repo-root .
```

Commit touched `.pyi` files, runtime coverage registry changes under `python-bindings/tests/fixtures/`, tracked reports under `python-bindings/parity-artifacts/`, and affected files under `docs/implementation/python_api_parity/baseline/` when generated results legitimately change.
Commit touched `.pyi` files, shared conformance pack/adapter changes, tracked reports under `python-bindings/parity-artifacts/`, and affected files under `docs/implementation/python_api_parity/baseline/` when generated results legitimately change.

## Data Publish Workflows

Expand Down Expand Up @@ -180,6 +201,7 @@ Primary workflows:

| Workflow | Purpose |
| --- | --- |
| `ci-binding-compliance.yml` | Blocking umbrella: same-revision reusable participant workflows, then full authenticated receipt aggregation |
| `ci-cpp.yml` | CXX parity plus CLI and GUI build/test pipeline |
| `ci-rust.yml` | Rust format, lint, build, and test pipeline |
| `ci-typescript.yml` | Node parity, declaration freshness, and runtime tests |
Expand Down
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@
tests/fixtures/autoscan_report_goldens/cases/*/expected.md -text
tests/fixtures/autoscan_report_goldens/fcx-game/Fallout4.exe -text

# Recovery conformance hashes malformed bytes exactly; checkout conversion would change the oracle.
tests/fixtures/crash_log_scan_run/malformed-local-ignore.yaml -text

# Use bd merge for beads JSONL files
.beads/issues.jsonl merge=beads
97 changes: 97 additions & 0 deletions .github/workflows/ci-binding-compliance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: CI - Binding Compliance

on:
push:
branches: [classic-next]
pull_request:
branches: [classic-next]

permissions:
contents: read

jobs:
rust:
uses: ./.github/workflows/ci-rust.yml
node:
uses: ./.github/workflows/ci-typescript.yml
python:
uses: ./.github/workflows/ci-python-bindings.yml
native:
uses: ./.github/workflows/ci-cpp.yml

full:
name: Full Repository Conformance
needs: [rust, node, python, native]
if: ${{ !cancelled() }}
runs-on: windows-latest
timeout-minutes: 360
env:
RUST_BACKTRACE: 1
CARGO_TERM_COLOR: always
PYO3_PYTHON: ${{ github.workspace }}\python-bindings\.venv\Scripts\python.exe
steps:
# Reusable workflows and this default checkout share the event revision
# and Windows workspace layout. Immutable plans are never rewritten.
- uses: actions/checkout@v6

- name: Download current-run conformance artifacts
uses: actions/download-artifact@v8
with:
pattern: '*conformance*'
path: tools/binding_compliance/artifacts/downloaded
merge-multiple: false

- name: Require every retained participant job to pass
if: ${{ !cancelled() }}
env:
PARTICIPANT_RESULTS: ${{ toJSON(needs) }}
run: |
$results = $env:PARTICIPANT_RESULTS | ConvertFrom-Json -AsHashtable
if ($results.Count -ne 4 -or @($results.Values | Where-Object { $_.result -ne 'success' }).Count -ne 0) {
throw 'Every retained participant workflow must pass before repository conformance can pass.'
}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: "22"

- name: Install Bun
uses: oven-sh/setup-bun@v2

- name: Install uv
uses: astral-sh/setup-uv@v7

- name: Install conformance YAML parser
run: python -m pip install --disable-pip-version-check "ruamel.yaml>=0.18,<0.19"

- name: Install Node dependencies
working-directory: node-bindings/classic-node
run: bun install --frozen-lockfile

- name: Build Node binding for retained runtime gates
working-directory: node-bindings/classic-node
run: bun run build

# Full runs every retained gate, including the Python sync/rebuild. Failed
# or missing participant receipts cannot borrow another job's success.
- name: Run full binding compliance
if: ${{ !cancelled() }}
run: python tools/binding_compliance/check_compliance.py --repo-root . --profile full --receipt-directory tools/binding_compliance/artifacts/downloaded --output-dir tools/binding_compliance/artifacts/full

- name: Upload full binding compliance diagnostics
if: always()
uses: actions/upload-artifact@v6
with:
name: full-binding-compliance-report
path: tools/binding_compliance/artifacts/full/
if-no-files-found: warn
retention-days: 7
Loading
Loading