Moves the extractor, its tests and the gate from scene-actor-extraction into the project home, so all three components run one implementation rather than each growing its own. The gate logic is unchanged; what changes is that the two repo-specific constants become arguments. Both were hard blockers rather than inconveniences. LOCAL_TYPES was fixed at the extraction set, so a register using UR/DR parsed to zero requirements; SOURCE_SUFFIXES covered C++/Python only, so a Rust or C# tree scanned zero files. The gate correctly refuses to report coverage in either state, which is how both surfaced. They are now --types, --suffixes and --scan-roots, with the extraction defaults preserved: that repo runs unchanged with no flags. traceability-gate.sh gains REPO_ROOT, REQUIREMENTS, TYPES, SUFFIXES and SCAN_ROOTS environment overrides. Its REPO_ROOT default of SCRIPT_DIR/../.. is correct when the tooling sits in the repo it checks, but resolves to the submodule itself once vendored, so a consuming repo must set it. Fixes a latent bug found while testing the override: iter_source_files bound SCAN_ROOTS as a default argument, evaluated at import, so configure_scan_roots could never affect it. 58 tests pass. The two that read a live register now take LIVE_REGISTER from the environment and skip without it — they asserted against AR-012/AR-027, which belong to scene-actor-extraction rather than to a shared tool. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
108 lines
10 KiB
Plaintext
108 lines
10 KiB
Plaintext
{
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash(python3 -c ' *)",
|
|
"WebFetch(domain:docs.turso.tech)",
|
|
"Bash(awk '/^```/{n++} END{print \"fences:\",n,\\(n%2==0?\"balanced\":\"UNBALANCED\"\\)}' SPEC.md)",
|
|
"Bash(python3 -c \"import h5py; print\\('h5py', h5py.__version__\\)\")",
|
|
"Bash(python3 scripts/make_jellyfin_gallery.py --help)",
|
|
"Bash(timeout 30 python3 -c ' *)",
|
|
"Bash(ps -o pid,etime,cmd -C cmake)",
|
|
"Bash(cargo check *)",
|
|
"Bash(cargo test *)",
|
|
"Bash(cargo clippy *)",
|
|
"Bash(cargo deny *)",
|
|
"Bash(rustc --version)",
|
|
"Bash(cargo metadata *)",
|
|
"Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\(d['packages'][0].get\\('license'\\)\\)\")",
|
|
"Bash(timeout 900 cargo install cargo-deny --locked)",
|
|
"Bash(timeout 1500 docker build -t jray-server:test .)",
|
|
"Bash(timeout 900 docker build -f /tmp/claude-1000/-home-dtourolle-Development-Jray-project/d861f764-2add-4f42-a069-0954ad1f9565/scratchpad/Dockerfile.probe -t jray-probe .)",
|
|
"Bash(docker rm *)",
|
|
"Bash(docker volume *)",
|
|
"Bash(timeout 900 docker build -t jray-server:test .)",
|
|
"Bash(docker run *)",
|
|
"Bash(xargs -I{} echo \"clippy: {}\")",
|
|
"Bash(timeout 900 docker build -q -t jray-server:test .)",
|
|
"Bash(awk '{s+=$4} END {print \"total: \" s \" passing\"}')",
|
|
"Bash(xargs -I{} echo \"clippy issues: {}\")",
|
|
"Bash(timeout 600 dotnet build Jellyfin.Plugin.JRay/Jellyfin.Plugin.JRay.csproj -v q --nologo)",
|
|
"Bash(awk '{s+=$4} END {print \"server tests: \" s \" passing\"}')",
|
|
"Bash(timeout 300 dotnet build Jellyfin.Plugin.JRay/Jellyfin.Plugin.JRay.csproj -v q --nologo)",
|
|
"Bash(cp SPEC.md /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/SPEC.md.bak)",
|
|
"Bash(perl -pi -e ' *)",
|
|
"Bash(grep -vE \"AR-|DP-|IR-|GR-|VR-|SR-|PR-|H[0-9]|[0-9]{3,}\")",
|
|
"Bash(git update-index *)",
|
|
"WebFetch(domain:github.com)",
|
|
"Bash(git -C /home/dtourolle/Development/Jray-worktrees/audio-signature status --short)",
|
|
"Bash(git -C /home/dtourolle/Development/Jray-worktrees/audio-signature branch --show-current)",
|
|
"Bash(python3 -c \"import pytest; print\\(pytest.__version__\\)\")",
|
|
"Bash(python3 -c \"import numpy; print\\('numpy', numpy.__version__\\)\")",
|
|
"Read(//usr/lib/cmake/**)",
|
|
"Read(//usr/include/**)",
|
|
"Bash(grep -n \"^#\\\\{1,3\\\\} \" JRay-public-server/SPEC.md)",
|
|
"Bash(grep -n \"^#\\\\{1,3\\\\} \" scene-actor-extraction/docs/SPEC.md)",
|
|
"Bash(cargo build *)",
|
|
"Bash(python3 gen.py tone.wav)",
|
|
"Bash(python3 ref.py tone.wav)",
|
|
"Bash(python3 -c \"import json;d=json.load\\(open\\('package.json'\\)\\);print\\(json.dumps\\({k:v for k,v in d.get\\('scripts',{}\\).items\\(\\) if 'trace' in k.lower\\(\\)},indent=2\\)\\)\")",
|
|
"Bash(python3 scripts/traceability/extract_traces.py --format json)",
|
|
"Bash(python3 scripts/test_extract_traces.py)",
|
|
"Bash(python3 -m pytest scripts/traceability/test_extract_traces.py -q)",
|
|
"Bash(python3 scripts/traceability/extract_traces.py --format coverage)",
|
|
"Bash(python3 scripts/extract_traces.py)",
|
|
"Bash(python3 scripts/extract_traces.py --format json)",
|
|
"Bash(git -C /home/dtourolle/Development/Jray-worktrees/traceability-tooling log --oneline -3)",
|
|
"Bash(python3 /home/dtourolle/Development/Jray-worktrees/traceability-tooling/scripts/traceability/extract_traces.py --root /home/dtourolle/Development/Jray-project/JRay-public-server --requirements /home/dtourolle/Development/Jray-project/JRay-public-server/docs/requirements.md --system-spec /home/dtourolle/Development/Jray-project/SPEC.md --format coverage)",
|
|
"Bash(python3 scripts/traceability/test_extract_traces.py)",
|
|
"Bash(sh scripts/traceability/traceability-gate.sh)",
|
|
"Bash(python3 -c \"import pyflakes; print\\('pyflakes', pyflakes.__version__\\)\")",
|
|
"Bash(timeout 300 dotnet build -v q --nologo)",
|
|
"Bash(git check-ignore *)",
|
|
"Bash(rm -rf /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full)",
|
|
"Bash(cmake -S . -B /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full -DSAE_BUILD_TESTS=ON)",
|
|
"Bash(pkg-config --cflags opencv4)",
|
|
"Bash(pkg-config --cflags opencv)",
|
|
"Bash(awk '{s+=$4} END {print \"tests: \" s}')",
|
|
"Bash(python3 -m pyflakes scripts/validation/min_face_size.py)",
|
|
"Bash(python3 -m flake8 --select=F scripts/validation/min_face_size.py)",
|
|
"Bash(git -c user.name=\"Duncan Tourolle\" -c user.email=\"duncan@tourolle.paris\" commit -q -F -)",
|
|
"Bash(cmake -S . -B /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full -DSAE_BUILD_TESTS=ON -DSAE_GEMM_BACKEND=CPU)",
|
|
"Bash(python3 -c \"import h5py, numpy, requests, PIL; print\\('deps ok'\\)\")",
|
|
"Bash(python3 -m py_compile scripts/validation/min_face_size.py)",
|
|
"Bash(git remote *)",
|
|
"Bash(python3 et.py --root /home/dtourolle/Development/Jray-project/jRay --requirements /home/dtourolle/Development/Jray-project/jRay/docs/requirements.md --system-spec /home/dtourolle/Development/Jray-project/SPEC.md --format coverage)",
|
|
"Bash(git -C /home/dtourolle/Development/Jray-worktrees/traceability-tooling status --short)",
|
|
"Bash(git -C /home/dtourolle/Development/Jray-worktrees/traceability-tooling log --oneline -2 -- scripts/traceability/)",
|
|
"Bash(timeout 240 python3 scripts/stamp_gallery.py --gallery /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/g_plain.h5 --show)",
|
|
"Bash(cp /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/g_plain.h5 /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/g_mig.h5)",
|
|
"Bash(python3 scripts/stamp_gallery.py --gallery /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/g_mig.h5 --arcface /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/fake.onnx)",
|
|
"Bash(timeout 590 cmake -S . -B /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/bt -DSAE_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release)",
|
|
"Bash(grep -n \"^#\\\\{1,3\\\\} \\\\|^| ID \\\\|^| Requirement \\\\|^|---\" jRay/docs/requirements.md)",
|
|
"Bash(./build-full/tests/sae_tests)",
|
|
"Bash(ls /usr/include/catch2/catch_test_macros.hpp 2>/dev/null && echo \"catch2 system\"; ls /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/ 2>/dev/null | head; ls /usr/lib/libCatch2* 2>/dev/null | head)",
|
|
"Read(//usr/lib/**)",
|
|
"Bash(find /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/catch2-build -name libCatch2*)",
|
|
"Bash(timeout 590 g++ -std=c++20 -O1 -I/home/dtourolle/Development/Jray-worktrees/gallery-model-binding/src -I/usr/include/opencv5 -I/tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/nlohmann_json-src/single_include -I/tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/catch2-src/src -I/tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/catch2-build/generated-includes '-DSAE_MODELS_DIR=\"/home/dtourolle/Development/Jray-worktrees/gallery-model-binding/models\"' -o gallery_tests /home/dtourolle/Development/Jray-worktrees/gallery-model-binding/tests/test_gallery_store.cpp /home/dtourolle/Development/Jray-worktrees/gallery-model-binding/src/gallery/gallery_store.cpp /home/dtourolle/Development/Jray-worktrees/gallery-model-binding/src/gallery/embedder_stamp.cpp /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/catch2-build/src/libCatch2Main.a /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/build-full/_deps/catch2-build/src/libCatch2.a -lhdf5_cpp -lhdf5 -lopencv_core)",
|
|
"Bash(./gallery_tests)",
|
|
"Bash(grep -viE \"^\\\\[gallery\\\\]|^ |^$|WARNING \\\\\\(GR-004\\\\\\)|\\\\*\\\\*\\\\*\\\\*\")",
|
|
"Bash(python3 scripts/traceability/extract_traces.py --root jRay --requirements jRay/docs/requirements.md --system-spec SPEC.md --types JR --suffixes .cs,.js --scan-roots Jellyfin.Plugin.JRay --format coverage)",
|
|
"Bash(python3 scripts/traceability/extract_traces.py --root /home/dtourolle/Development/Jray-project/jRay --requirements /home/dtourolle/Development/Jray-project/jRay/docs/requirements.md --system-spec /home/dtourolle/Development/Jray-project/SPEC.md --types JR --suffixes .cs,.js --scan-roots Jellyfin.Plugin.JRay --format coverage)",
|
|
"Bash(cp -r /home/dtourolle/Development/Jray-project/scene-actor-extraction/external/KPN/. external/KPN/)",
|
|
"Bash(rm -rf external/KPN/.git)",
|
|
"Bash(rm -rf /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/bt)",
|
|
"Bash(timeout 590 cmake -S . -B /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/bt -DSAE_BUILD_TESTS=ON -DSAE_GEMM_BACKEND=CPU -DCMAKE_BUILD_TYPE=Release)",
|
|
"Bash(python3 scripts/traceability/extract_traces.py --root scene-actor-extraction --requirements scene-actor-extraction/docs/requirements.md --format coverage)",
|
|
"Bash(timeout 590 cmake --build /tmp/claude-1000/-home-dtourolle-Development-Jray-project/de7e497c-da04-462d-a971-d0fcd36bda2a/scratchpad/bt --target sae_tests -j8)",
|
|
"Bash(sh -n scripts/traceability/traceability-gate.sh)",
|
|
"Bash(cd /home/dtourolle/Development/Jray-project *)"
|
|
],
|
|
"additionalDirectories": [
|
|
"/home/dtourolle/Development/Jray-worktrees/gallery-model-binding/src/gallery",
|
|
"/home/dtourolle/Development/Jray-worktrees/min-face-study/scripts/validation",
|
|
"/home/dtourolle/Development/Jray-worktrees/audio-signature/tests",
|
|
"/home/dtourolle/Development/Jray-worktrees/traceability-tooling/scripts/traceability"
|
|
]
|
|
}
|
|
}
|