Ingest deeper-tool facts and run coverage into the map: Syft, OWASP Noir, Bifrost and SARIF run metadata
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start by reading internal/cli/packages.go and associate.go to understand the existing Syft association path. Then inspect dircue map --attach (#76), the golden-corpus fixtures in #75, and the map node/edge expectations in #74. Done means the specified reports produce attributed nodes and edges, preserve run coverage, and detect mismatched snapshots without importing findings.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Why
dircue should be the glue between deeper open-source analyzers, not a re-implementation of them, and not a security scanner. It takes facts from other tools (what exists, and how things relate) and run coverage (what each tool actually looked at). It does not take their findings, verdicts or severities; those stay with the producing tool and whatever system consumes them. The value lies between them:
- binding each tool's output to the exact snapshot;
- attributing its facts to components, deployables and interfaces;
- keeping what each tool reports separate from what dircue observed.
Today dircue can import native Syft JSON, but it associates packages only with the nearest ancestor project root of the legacy projects population (internal/cli/packages.go, associate.go). It never matches Syft packages or PURLs against declared requirements, and Syft artifactRelationships never become edges. There is no SARIF support anywhere in the tree.
Scope for 1.0
Ingestion of supplied reports comes first. Running tools stays an explicit, separate opt-in (#21, #69).
| Provider | What to ingest | Attach to |
|---|---|---|
| Syft JSON (existing importer) | packages, PURLs, locations (primary/supporting), artifactRelationships (contains, dependency-of), source metadata |
package nodes; packaged_in/depends_on edges to components, matched via declared requirements (npm, Go, Cargo, pyproject/uv, PackageReference, Maven, Gradle), with nearest-root as a fallback basis; vendored subtrees |
| SARIF 2.1.0 (any emitter: linters, structural/metrics tools, BCA, Noir, others) | run metadata only: tool.driver name/version, artifacts, invocations, toolExecutionNotifications, versionControlProvenance |
tool_run nodes and analyzed_by edges for the coverage ledger (#78). Results are not imported into the map; their locations can be mapped to map nodes with #82. |
| OWASP Noir JSON | endpoints (method, path, params, file/line) | interface nodes with basis provider_reported, attached to components and deployables; conflicts with declared contracts (#56) recorded as conflicts_with |
| Bifrost JSON (optional, per #24) | answers to selected structural queries (callers/callees, references) | evidence edges for specific questions, e.g. whether a handler reaches a capability; never a claim of complete call-graph coverage |
Report qualified disagreements between facts, never verdicts:
- declared but absent from the SBOM;
- in the SBOM but undeclared;
- a Noir endpoint with no declared contract;
- a declared operation with no observed route.
Rules
- Reports are untrusted input: bounded parsing, no execution, no network. Paths are normalized and confined to the map root. Host paths and credentials are redacted.
- Source binding: a report is tied to the snapshot by the supplied digest/tree identity or provider provenance. A mismatch downgrades attribution; it isn't silently accepted.
- Never re-derive what a provider reported. dircue emits no vulnerability, risk or policy conclusions of its own, and doesn't aggregate other tools' findings.
Result locations
Mapping any SARIF result's location to its component, deployable or interface is in scope as a separate, tool-neutral utility: #82 (owner decision, 2026-09-22). It annotates locations without interpreting rule semantics or severity. This issue stays limited to facts and run coverage.
Acceptance
- Fixtures from real, pinned tool runs on golden-corpus entries (#75): Syft on everything; Noir on the web-framework entries; Bifrost on a subset; at least one SARIF emitter for run-coverage metadata.
- Attribution precision/recall measured against hand-written expectations.
- A mismatched-snapshot report is detected and qualified.
- Works through
dircue map --attach …(#76) and produces map nodes/edges (#74).
Related: #20, #21, #24, #26, #57. Epic: #81.
- Lingua principale
- Go
- Stelle
- 0
- Fork
- 0
- Merge medio
- 5h 8m
- PR unite (30g)
- 54
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di war-and-code/dircue
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
war-and-code/dircue#200 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement follow-up
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
war-and-code/dircue#201 ·
I maintainer di solito rispondono entro 1 giorno
-
follow-up
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
war-and-code/dircue#179 ·
I maintainer di solito rispondono entro 1 giorno
-
follow-up
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
war-and-code/dircue#178 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement follow-up
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
war-and-code/dircue#172 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di war-and-code/dircue
Issue simili
-
bug performance scalability
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Davidjustice28/basildb#35 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rhysd/actionlint#761 ·
-
bug needs-triage P2 tier:1-mechanical
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
krakenhavoc/cmd_and_ctrl#3652 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
puppe1990/amarra-cais#345 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
limitlessprojects/Go-Hybrid#50 ·
I maintainer di solito rispondono entro 1 giorno