Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
49aea3d
docs(adr,sprint-1): adopt ADR-023 tooling baseline before first code
tachyon-beep Apr 18, 2026
50df042
feat(wp1): workspace skeleton + ADR-023 tooling baseline
tachyon-beep Apr 18, 2026
04e8fdb
chore(wp1): apply Task 1 code-review fixes
tachyon-beep Apr 18, 2026
c7630f1
feat(wp1): L2 entity-ID assembler per ADR-003 + ADR-022
tachyon-beep Apr 18, 2026
06dda78
chore(wp1): apply Task 2 code-review fixes
tachyon-beep Apr 18, 2026
1623514
feat(wp1): L1 SQLite schema migration framework
tachyon-beep Apr 18, 2026
f7e990d
chore(wp1): apply Task 3 code-review fixes
tachyon-beep Apr 18, 2026
55f6551
feat(wp1): reader pool for concurrent read connections
tachyon-beep Apr 18, 2026
021ae60
chore(wp1): apply Task 4 code-review fixes
tachyon-beep Apr 18, 2026
1e294b3
feat(wp1): clarion install subcommand; author ADR-005
tachyon-beep Apr 18, 2026
09b54fe
chore(wp1): apply Task 5 code-review fixes
tachyon-beep Apr 18, 2026
ff8d233
feat(wp1): L3 writer-actor (tokio::task) with per-N transaction batch
tachyon-beep Apr 18, 2026
cbed355
chore(wp1): apply Task 6 code-review fixes
tachyon-beep Apr 18, 2026
10005e8
feat(wp1): clarion analyze skeleton (plugin wiring deferred to WP2)
tachyon-beep Apr 18, 2026
535c599
chore(wp1): apply Task 7 code-review fixes
tachyon-beep Apr 18, 2026
eb76459
feat(wp1): LlmProvider trait stub for WP6
tachyon-beep Apr 18, 2026
d8588b0
test(wp1): end-to-end smoke test
tachyon-beep Apr 18, 2026
4611c99
docs(sprint-1): tick WP1 sign-off and stamp L1/L2/L3 lock-ins
tachyon-beep Apr 18, 2026
ad8d4ce
Merge WP1: Sprint 1 scaffold + storage
tachyon-beep Apr 18, 2026
5bcd3d3
docs(wp2): apply plan-review findings before implementation
tachyon-beep Apr 18, 2026
c2cb07a
feat(wp2): L5 plugin manifest parser and validator (ADR-021 §Layer 1 …
tachyon-beep Apr 18, 2026
4b20244
feat(wp2): L4 JSON-RPC Content-Length transport
tachyon-beep Apr 18, 2026
f3ca3ab
fix(wp2): L4 transport correctness and DoS hardening
tachyon-beep Apr 18, 2026
b27594d
feat(wp2): in-process mock plugin test harness
tachyon-beep Apr 18, 2026
bd56cd5
feat(wp2): pre-Task-4 hardening — plugin_id split, String paths, mock…
tachyon-beep Apr 18, 2026
1002d53
feat(wp2): L6 core-enforced minimums — path jail, ceilings, prlimit (…
tachyon-beep Apr 18, 2026
a7b1465
fix(wp2): Task 4 review findings — CapExceeded semantics, FINDING_* r…
tachyon-beep Apr 18, 2026
28f5676
feat(wp2): L9 plugin discovery convention (PATH + neighboring manifest)
tachyon-beep Apr 18, 2026
c4f2a85
fix(wp2): Task 5 review findings — distinguish EACCES from NotFound i…
tachyon-beep Apr 18, 2026
fcebf8a
feat(wp2): plugin-host supervisor with ADR-021 enforcement + ADR-022 …
tachyon-beep Apr 18, 2026
26b5920
fix(wp2): Task 6 review findings — mock compliant entity, dead varian…
tachyon-beep Apr 18, 2026
19e541b
feat(wp2): crash-loop breaker
tachyon-beep Apr 18, 2026
68658a4
fix(wp2): Task 7 review findings — expect() format string + state() doc
tachyon-beep Apr 18, 2026
95ecd33
feat(wp2): wire clarion analyze to plugin host
tachyon-beep Apr 18, 2026
e95219b
test(wp2): end-to-end smoke with mock plugin
tachyon-beep Apr 18, 2026
de13838
fix(wp1+wp2): 11 defects from post-delivery review
tachyon-beep Apr 19, 2026
5c5c3ee
fix(wp2): bound RawEntity string fields to 4 KiB — close RAM DoS
tachyon-beep Apr 22, 2026
0fcc57f
fix(wp2): reap child on PluginHost::spawn handshake failure
tachyon-beep Apr 22, 2026
37b56d9
fix(wp2): clarion analyze exits non-zero on FailRun
tachyon-beep Apr 22, 2026
a1cc3be
fix(wp2): wire crash-loop breaker; one plugin crash no longer tanks run
tachyon-beep Apr 22, 2026
4817f84
docs(wp2): phase-1 scrub findings triage
tachyon-beep Apr 22, 2026
b30638c
fix(wp2): convert spawn_blocking JoinError to crash reason, not bypass
tachyon-beep Apr 22, 2026
7f8fc9a
test(wp2): E2E crash-loop breaker trip via clarion analyze
tachyon-beep Apr 22, 2026
3e0ea44
test(wp2): host-level EntityCapExceeded coverage (T9)
tachyon-beep Apr 22, 2026
ad054bd
fix(wp2): scrub parent PATH in analyze_without_plugins skipped test
tachyon-beep Apr 22, 2026
669e89e
fix(wp2): downgrade protocol::make_{request,notification} to pub(crate)
tachyon-beep Apr 22, 2026
d890a73
fix(wp2): log + count per-entry I/O errors in source walk
tachyon-beep Apr 22, 2026
483db6e
test(wp2): tighten host test assertions — pin counts; cover all overs…
tachyon-beep Apr 22, 2026
26f14aa
test(wp2): rename t9 subprocess test to match what it actually asserts
tachyon-beep Apr 22, 2026
288defe
fix(wp2): gate ContentLengthCeiling::unbounded() behind #[cfg(test)]
tachyon-beep Apr 23, 2026
855803e
fix(wp2): cap plugin.toml file size and [integrations.*] entry count
tachyon-beep Apr 23, 2026
7d97c66
fix(wp2): bound ProtocolError.message and .data at deserialise time
tachyon-beep Apr 23, 2026
7b5db34
fix(wp2): bound RawEntity.extra and RawSource.extra by serialised siz…
tachyon-beep Apr 23, 2026
84b5778
docs(wp2): clarify DiscoveredPlugin.executable is raw-PATH, not canon…
tachyon-beep Apr 23, 2026
6b0fa3a
fix(wp2): structural double-shutdown guard on PluginHost (T8f)
tachyon-beep Apr 23, 2026
5fb5666
fix(wp2): fail loud on non-UTF-8 paths at analyze_file wire boundary …
tachyon-beep Apr 23, 2026
1ac32b1
fix(wp2): validate and retain ontology_version at handshake (ADR-007 …
tachyon-beep Apr 23, 2026
769a177
fix(wp2): drain stale frames while waiting for response id match
tachyon-beep Apr 23, 2026
eb0a41d
fix(wp2): spawn uses discovered executable; refuse manifest path trav…
tachyon-beep Apr 23, 2026
bd92600
fix(wp2): apply RLIMIT_NOFILE + RLIMIT_NPROC to plugin child
tachyon-beep Apr 23, 2026
89b2da0
test(wp2): close 4 test-coverage gaps on host.rs
tachyon-beep Apr 23, 2026
b4eca5b
fix(wp2): deserialise analyze_file response via typed AnalyzeFileResult
tachyon-beep Apr 23, 2026
b3c91a7
fix(wp2): pipe plugin stderr into bounded ring buffer, don't inherit
tachyon-beep Apr 23, 2026
7c0e396
fix(wp2): refuse world-writable $PATH directories during discovery
tachyon-beep Apr 23, 2026
c0999a7
docs(wp2): handoff prompt for post-scrub session
tachyon-beep Apr 23, 2026
1b127df
docs(wp2): lock A.2 signoffs; close WP2 umbrella
tachyon-beep Apr 23, 2026
665b685
feat(wp3): Python plugin package skeleton + ADR-023 tooling baseline
tachyon-beep Apr 23, 2026
54adc5d
feat(wp3): L4-compatible JSON-RPC server + stdout guard
tachyon-beep Apr 23, 2026
a92bd24
feat(wp3): L7 qualname reconstruction matching __qualname__ semantics
tachyon-beep Apr 23, 2026
5bc5fed
feat(wp3): function extractor with L2 EntityId production
tachyon-beep Apr 23, 2026
69dcfcf
test(wp3): shared EntityId fixture — cross-language L2 byte-for-byte …
tachyon-beep Apr 23, 2026
b398c35
feat(wp3): L8 Wardline REGISTRY probe with version pinning
tachyon-beep Apr 23, 2026
d6e7e54
feat(wp3): plugin.toml manifest + analyze_file wired to extractor
tachyon-beep Apr 23, 2026
fa749ea
test(wp3): round-trip self-test against plugin's own source
tachyon-beep Apr 23, 2026
7e7a85b
test(sprint-1): walking-skeleton end-to-end demo script + entity shap…
tachyon-beep Apr 23, 2026
a5444de
docs(wp3): lock A.3 + A.4 signoffs; resolve UQ-WP3-*; close WP3 umbrella
tachyon-beep Apr 23, 2026
553239c
docs(sprint-1): close Tier A — A.5 cross-product + A.6.1 plan narrowing
tachyon-beep Apr 28, 2026
be7fa60
fix(ci): green Rust + walking-skeleton jobs on GHA ubuntu-latest
tachyon-beep Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: CI

on:
push:
branches: [main]
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"

jobs:
rust:
name: Rust
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt, llvm-tools-preview

- uses: Swatinem/rust-cache@v2

- name: fmt
run: cargo fmt --all -- --check

- name: clippy
run: cargo clippy --workspace --all-targets --all-features -- -D warnings

- name: install cargo-nextest
uses: taiki-e/install-action@cargo-nextest

# Ensure all workspace binaries (notably clarion-plugin-fixture) are built
# before nextest runs. wp2_e2e tests need the fixture binary on disk and
# nextest's CARGO_BIN_EXE_* propagation is not reliably set for cross-package
# dev-dep binaries (deferred issue clarion-adeff0916d).
- name: build workspace bins
run: cargo build --workspace --bins

- name: test
run: cargo nextest run --workspace --all-features --no-tests=pass

- name: doc
run: cargo doc --workspace --no-deps --all-features

Comment on lines +48 to +50

Copilot AI Apr 28, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI's doc step runs cargo doc without denying warnings, but the PR description/test plan calls out cargo doc -D warnings. RUSTFLAGS=-D warnings does not apply to rustdoc lints; use RUSTDOCFLAGS=-D warnings (or equivalent) so doc warnings fail the build as intended.

Copilot uses AI. Check for mistakes.
- name: install cargo-deny
uses: taiki-e/install-action@cargo-deny

- name: deny
run: cargo deny check

python-plugin:
name: Python plugin
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
cache-dependency-path: plugins/python/pyproject.toml

- name: install plugin (dev extras)
run: python -m pip install -e 'plugins/python[dev]'

- name: ruff check
run: ruff check plugins/python

- name: ruff format check
run: ruff format --check plugins/python

- name: mypy
run: mypy --strict plugins/python

- name: pytest
run: pytest plugins/python

walking-skeleton:
name: Sprint 1 walking skeleton (end-to-end)
runs-on: ubuntu-latest
needs: [rust, python-plugin]
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2

- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
cache-dependency-path: plugins/python/pyproject.toml

- name: install sqlite3 cli
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends sqlite3

- name: run walking skeleton
run: bash tests/e2e/sprint_1_walking_skeleton.sh
23 changes: 22 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,22 @@
.filigree/
.filigree/
/target
**/*.rs.bk
Cargo.lock.bak

# SQLite working files (project-level .clarion/ is tracked per ADR-005)
*.db-journal
*.db-wal

# Rust-analyzer / IDE caches
/.idea
/.vscode

# Python (plugins/python/)
.venv/
__pycache__/
*.egg-info/
.mypy_cache/
.pytest_cache/
.ruff_cache/
.coverage
htmlcov/
21 changes: 21 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.11
hooks:
- id: ruff
args: [--fix]
files: ^plugins/python/.*\.py$
- id: ruff-format
files: ^plugins/python/.*\.py$
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.20.2
hooks:
- id: mypy
files: ^plugins/python/(src|tests)/.*\.py$
# Run mypy against the whole plugin tree (not just staged files in
# isolation) so intra-package imports resolve. The files: pattern
# above triggers the hook; args: names the actual target.
pass_filenames: false
args: [--strict, --config-file=plugins/python/pyproject.toml, plugins/python]
additional_dependencies:
- pytest>=8.0
Loading
Loading