tracegen-matrix — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited tracegen-matrix (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate / update <app_folder>/context/TRACEABILITY.md — a per-application matrix linking every PRD requirement ID (and bug code) to the source code that implements it. Two layers per module: module-level (every ID of a module → that module's implementing code, complete coverage) and symbol-level (specific ID → the specific file/symbol that implements it, where derivable).
This skill is codebase-memory-OPTIONAL. It resolves links from in-source traceability comments and source scanning, and only uses the codebase-memory MCP for extra precision when present. It must NEVER fail or produce an empty file just because codebase-memory is not installed.
conductor-feature-develop (after all modulesfor a version are implemented) and conductor-defect (after all bugs for a version are fixed).
<app_folder>/context/PRD.md — tagged requirement IDs (run util-ustagger first if untagged).<app_folder>/context/specification/<module>/SPEC.md — per-module specs with a Traceabilitysection listing the module's requirement IDs (and, for backends, the implementing package).
<app_folder>/ (or the resolved source: path). If no source codeexists yet, the skill still produces a forward-traceability stub (see Workflow step 6c).
Before starting any work, resolve the application folder first (see Input Resolution), then check CHANGELOG.md in the application folder (<app_folder>/CHANGELOG.md):
<app_folder>/CHANGELOG.md does not exist, skip this check (first-ever execution).## vX.Y.Z headings and determine the highest version via semanticversion comparison.
version: argument was provided and the requested version < highest version → **STOPimmediately**. Print: "Version {requested} is lower than the current application version {highest} recorded in <app_folder>/CHANGELOG.md. Execution rejected."
version: argument was provided (regenerating against the current state), skip the gate./tracegen-matrix <application> [version:<version>] [module:<module>] [source:<source-code-path>]| Argument | Required | Description |
|---|---|---|
<application> | Yes | Application name OR an already-resolved <app_folder> path. Matched against root-level application folders. |
version:<version> | No | Single version (e.g. version:v1.2.0). Used for the Version Gate and to label the changelog row and the file header. Does NOT filter which IDs are linked — the matrix always reflects the full current PRD + code. |
module:<module> | No | If provided, (re)generate ONLY that module's section in TRACEABILITY.md, preserving all other sections. If omitted, regenerate the whole file. |
source:<path> | No | Path where source code resides. Defaults to <app_folder> (same convention as the conductors). |
<application> is already a path to an existing folder containing a context/ subfolder,use it directly as <app_folder> (this is how the conductors pass it).
<number>_ prefix; match theprovided name case-insensitively (accept snake_case, kebab-case, or title-case).
| Item | Resolved Path |
|---|---|
| PRD.md | <app_folder>/context/PRD.md |
| Specifications | <app_folder>/context/specification/<module>/SPEC.md |
| Develop tracking | <app_folder>/context/develop/<module>/IMPLEMENTATION_MODULE.md |
| Source code | <source-code-path>/ (defaults to <app_folder>/) |
| Output | <app_folder>/context/TRACEABILITY.md |
Pick code references for each requirement ID using the following cascade. Combine the layers — do not stop at the first that yields a hit.
conductor-feature-develop stamps every source file it creates with a top-of-file comment listing the requirement codes it implements, and conductor-defect appends bug codes:
Implements: USHM00003, USHM00006
NFR: NFRHM0003
Constraints: CONSHM003
Bug fixes: [BUG-024]For each requirement / bug code, scan the source tree for that exact code. Every file whose top-of-file comment contains the code is an implementer of it. Map file → symbol using the primary declared type/function in that file (class/interface/component name, usually = filename).
context/, build output, dependencies,and tests — e.g. search the codes within the first ~20 lines / comment blocks of each file.
When a module's IDs produce NO comment hits (e.g. legacy code authored before the traceability- comment rule, as in pre-existing applications), resolve at module granularity instead:
SPEC.md Package (e.g. my.app.module.foo) and locate thematching source directory; collect its controller / service / repository / entity / mapper / DTO files.
SPEC.md named pages/components/hooks/api and Mockup Screens,then locate the matching source files by name under the app's src/. Every ID of the module links to this resolved set (module-level layer).
If the codebase-memory MCP tools (search_graph, search_code) are available in this session, resolve each matched file to its exact graph qualified_name for precise, navigable anchors, and use the graph to discover additional same-module symbols. If the MCP is NOT available, skip this step entirely and use file-path references instead (see Reference Format). The matrix content and structure are identical either way; only the anchor precision differs.
Hard rule: never invent a reference. A reference must come from a real comment hit, a real source file located on disk, or (when present) a real codebase-memory node. If a specific symbol cannot be resolved, leave the symbol-level cell as —; the module-level layer still covers it.
qualified_name (exact node anchor).path/to/File.java#ClassName (or src/features/foo/pages/FooPage.tsx#FooPage).
Record which mode was used in the file header so readers know how to interpret the anchors.
Apply the Version Gate.
carry in-source traceability comments? (sample a few known IDs). These two booleans select the active resolution layers and the Reference Format.
<app_folder>/context/specification/*/SPEC.md. If module: wasprovided, restrict to that module.
SPEC.md Traceability section: User Story,NFR, and Constraint IDs with their version tags. Also collect the module's Package (backend) or named components (frontend), and any [BUG-XXX] codes recorded for the module in PRD.md's ### Bug section. Cross-check <app_folder>/context/develop/<module>/IMPLEMENTATION_MODULE.md when present for explicit ID→symbol hints.
pins a specific file/symbol. Mark symbol-level links inferred when derived from naming rather than an explicit comment hit.
module: filter.module: is given — replace only that module's ## <Module>section, preserving every other section and the file header/summary (recompute the summary).
inventory with all symbol cells —, plus the module's intended SPEC-named symbols as plain (non-anchor) references, and a prominent NOT-YET-IMPLEMENTED banner. This preserves forward traceability and is regenerated to real anchors once code exists.
count, resolution mode used (comments / name-based / graph-enriched), and any unresolved IDs.
A single file: <app_folder>/context/TRACEABILITY.md.
# Traceability — <Application Display Name>
> **Purpose**: links every PRD requirement ID (User Stories, NFRs, Constraints) and bug code from
> `context/PRD.md` + `context/specification/*/SPEC.md` to the source code that implements it.
> **Resolution mode**: <in-source comments | name-based scan | graph-enriched> — anchors are
> <codebase-memory qualified_names | repo-relative file paths>.
> **Two layers**: _module-level_ — every ID of a module maps to that module's implementing code
> (complete); _symbol-level_ — specific ID → the specific file/symbol where derivable (partial,
> `(inferred)` when from naming rather than an in-source comment).
> **Maintenance**: regenerated by `tracegen-matrix` at the end of `conductor-feature-develop` and
> `conductor-defect`; re-run manually after significant code moves.
---
## <Module Name> · prefix `<PFX>` · package `<package or n/a>`
**Module-level code** (every ID below maps to these):
- `<reference>` — <role e.g. Controller / Page>
- `<reference>` — <role e.g. ServiceImpl / Hook>
- …
**Requirement links:**
| ID | Type | Ver | Symbol-level implementation |
|----|------|-----|-----------------------------|
| USHM00003 | US | v1.0.0 | `<reference>` |
| NFRHM0003 | NFR | v1.0.0 | — |
| CONSHM003 | CON | v1.0.0 | `<reference>` (inferred) |
| BUG-024 | BUG | v1.0.1 | `<reference>` |
---
(repeat per module)
## Summary
- Modules: <N>
- IDs linked: <N> (US <a>, NFR <b>, CON <c>, BUG <d>)
- Symbol-level links: <N>
- Resolution mode: <comments | name-based | graph-enriched>
- Unresolved: <short list or "none">Type abbreviations: US = User Story, NFR = Non-Functional Requirement, CON = Constraint, BUG = bug fix code.
After the matrix is successfully written, append an entry to <app_folder>/CHANGELOG.md:
<app_folder>/CHANGELOG.md does not exist, create it with the standard CO2 changelog header.version: argument if provided, else the highest version inthe changelog, else v1.0.0.
## {version} heading. If it exists, append a new row; if not, insert a new sectionafter the --- below the header and before any existing ## vX.Y.Z section (newest-first).
| {YYYY-MM-DD} | {application_name} | tracegen-matrix | {module or "All"} | Regenerated TRACEABILITY.md — {N} IDs linked ({fine} symbol-level), mode: {resolution-mode} |when the codebase-memory MCP is absent, using in-source comments and source scanning. Treat the graph purely as an enrichment for anchor precision.
on disk, or a real graph node. Unresolved symbol-level cells are —.
module: filter, only that module's section may change.TRACEABILITY.md and appends one CHANGELOG.md row.
util-ustagger codes and [BUG-XXX]codes exactly as they appear; never reformat or invent codes.
code or requirements).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.