Replaces the copy taken earlier with the newer version from
scene-actor-extraction's traceability-tooling branch, which had moved on: it
takes per-repo settings from a traceability.toml rather than the CLI flags
added here, validates them, and names languages ("rust") rather than making
each repo spell out extensions. That is the better design, so the flags go and
this becomes the single source.
Two fixes on top:
- Config discovery searched from the working directory only, so --root pointed
at another tree found no traceability.toml and failed with
"requirement_types is empty" while a perfectly good config sat in the
directory named. That breaks both intended callers: CI passing --root, and a
wrapper running the vendored copy. Discovery now starts from --root.
- The test suite had not been migrated with the Config refactor and failed on
the branch as well as here. All 53 now pass: entry points take a Config,
ci_executable moved to the Register which owns tier policy, fixtures write a
real traceability.toml so config discovery is exercised rather than bypassed,
and the live-register tests take LIVE_REGISTER from the environment since the
project home holds no component register of its own.
The README becomes a project overview rather than a table of contents: what the
problem is, why a paused-frame answer is the wrong question, why gallery data
never leaves the instance, and why the manifest server can hold no binary.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.6 KiB
Bash
Executable File
63 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Requirement traceability gate. Run locally exactly as CI runs it, from the
|
|
# component repo root:
|
|
#
|
|
# scripts/traceability/traceability-gate.sh
|
|
#
|
|
# Writes the JSON report and the markdown matrix, prints the coverage report,
|
|
# and exits non-zero when the gate fails.
|
|
#
|
|
# This script is shared by every JRay component, so it knows nothing about any
|
|
# one repo. All repo-specific settings - requirement ID prefixes, source
|
|
# suffixes, scan roots, register path, thresholds - live in `traceability.toml`
|
|
# at the component repo root. Run
|
|
#
|
|
# scripts/traceability/extract_traces.py --print-example-config
|
|
#
|
|
# for the annotated schema. A repo whose config is wrong parses zero
|
|
# requirements or scans zero files, and the gate refuses to report rather than
|
|
# printing a misleading 0%.
|
|
#
|
|
# Environment (all optional; each overrides the config file):
|
|
# TRACES_CONFIG path to traceability.toml
|
|
# TRACES_ROOT repo root (default: nearest dir containing traceability.toml)
|
|
# MIN_COVERAGE minimum overall coverage percent
|
|
# ALLOW_ORPHANS 1 to report orphan tags without failing
|
|
# TRACES_JSON JSON report path
|
|
# TRACES_MD markdown matrix path
|
|
# SYSTEM_SPEC SPEC.md defining PR/SR; enables PR/SR orphan checking
|
|
# PYTHON interpreter (default: python3)
|
|
#
|
|
# Threshold policy belongs in traceability.toml, not here and not in the
|
|
# workflow YAML: a threshold written in two places is a threshold that will
|
|
# disagree with itself.
|
|
#
|
|
# POSIX sh, no bashisms, no jq - the extractor does its own arithmetic and
|
|
# printing, so CI needs nothing beyond python3.
|
|
|
|
set -eu
|
|
|
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
|
|
PYTHON="${PYTHON:-python3}"
|
|
command -v "$PYTHON" >/dev/null 2>&1 || {
|
|
echo "FAILED: $PYTHON not found. The traceability gate needs Python 3.9+," >&2
|
|
echo " or 3.11+ to read traceability.toml." >&2
|
|
exit 2
|
|
}
|
|
|
|
set -- --format coverage
|
|
|
|
# Explicit `if` rather than `[ ... ] && ...`, because a trailing false test in
|
|
# an && list exits under `set -e` in some POSIX shells.
|
|
if [ -n "${TRACES_CONFIG:-}" ]; then set -- "$@" --config "$TRACES_CONFIG"; fi
|
|
if [ -n "${TRACES_ROOT:-}" ]; then set -- "$@" --root "$TRACES_ROOT"; fi
|
|
if [ -n "${MIN_COVERAGE:-}" ]; then set -- "$@" --min-coverage "$MIN_COVERAGE"; fi
|
|
if [ -n "${TRACES_JSON:-}" ]; then set -- "$@" --json-out "$TRACES_JSON"; fi
|
|
if [ -n "${TRACES_MD:-}" ]; then set -- "$@" --markdown-out "$TRACES_MD"; fi
|
|
if [ -n "${SYSTEM_SPEC:-}" ]; then set -- "$@" --system-spec "$SYSTEM_SPEC"; fi
|
|
if [ "${ALLOW_ORPHANS:-0}" = "1" ]; then set -- "$@" --allow-orphans; fi
|
|
|
|
exec "$PYTHON" "$SCRIPT_DIR/extract_traces.py" "$@"
|