Skip to content

docs: Backstage + Dependency-Track coverage portal design (spec + ADR 0035)#142

Draft
trivoallan wants to merge 2 commits into
mainfrom
tritri/eager-mccarthy-4b913d
Draft

docs: Backstage + Dependency-Track coverage portal design (spec + ADR 0035)#142
trivoallan wants to merge 2 commits into
mainfrom
tritri/eager-mccarthy-4b913d

Conversation

@trivoallan

Copy link
Copy Markdown
Owner

Overview

Brainstorm capture of the consumption surface for houba's coverage gates value thesis: a
developer-scoped Backstage (TechInsights) portal that scores per-service provenance coverage off
the houba stamp and surfaces vuln posture via Dependency-Track, with a bottom-up "onboard"
demand signal (a PR against the MirrorPolicy repo). Design only — no houba code changes.

This wires the Backstage integration that ADR 0030 deferred, and builds on the both-paths SBOM
referrer from #140 (this branch is rebased on it, so the cross-references resolve).

What changed

  • Specdocs/superpowers/specs/2026-06-17-backstage-coverage-portal-design.md (the full design).
  • ADR 00350034 is taken by the merged unify-SBOM-on-syft, so this is 0035.
  • C4workspace.dsl adds backstage + dependencyTrack as External/Downstream systems +
    relationships (Landscape/Context use include *).
  • design.md — notes them as downstream consumers of the stamp/SBOM referrer.
  • scripts/stick-test.sh — a self-contained validation harness (regctl only) demonstrating the
    referrer-propagation mechanism.

Key design decisions

  • Denominator = a base.digest chain walk, not a Dockerfile FROM parse — read the OCI
    base.* annotations buildx stamps; dissolves the ARG / multi-stage / multi-file gotcha.
  • Provenance survives Harbor's internal fan-out; OCI 1.1 referrers do not. Researched: Harbor
    ≤2.15.x does not replicate OCI 1.1 referrers (SBOM/cosign-v3) — goharbor/harbor#23210, open. So coverage follows the identical digest to the attachment site (entry namespace / Dependency-Track, both digest-keyed). (Zot's sync does propagate them — the gap is Harbor-specific.)
  • First-party images excluded via the Backstage catalog oracle — no registry convention (the org can't enforce conventions at scale).
  • The portal consumes houba audit (digest-keyed) rather than re-walking the registry — no registry credentials in Backstage.

Reviewer notes

  • This is a Later / consumption-layer bet; capturing the design now, not implementing.
  • The only houba-side footprint (each its own future spec): a digest field on audit's
    CoverageOutcome (the join key), and an --sbom audit tier (the SBOM bar).
  • Pending, not in this PR: regenerate docs/architecture/_export/*.mmd from workspace.dsl
    (Structurizr CLI; no Make target / CI drift-check today).

🤖 Generated with Claude Code

Brainstorm capture of the consumption surface for houba's "coverage gates
value" thesis: a developer-scoped Backstage (TechInsights) portal that scores
per-service provenance coverage off the houba stamp and surfaces vuln posture
via Dependency-Track, with a bottom-up "onboard" demand signal (PR against the
MirrorPolicy repo).

Key design points captured:
- Denominator = a base.digest chain walk (read OCI base.* annotations), NOT a
  Dockerfile FROM parse — dissolves the ARG/multi-stage/multi-file gotcha.
- Provenance (manifest stamp) survives Harbor's internal fan-out; OCI 1.1
  referrers (SBOM/signature) do NOT replicate on Harbor <=2.15.x (issue
  #23210), so coverage follows the identical digest to the attachment site.
- First-party images excluded via the Backstage catalog oracle (no convention).
- The portal consumes `houba audit` (digest-keyed) rather than re-walking the
  registry.

Artifacts: spec under docs/superpowers/specs/; ADR 0035 (0034 is taken by the
merged unify-SBOM-on-syft); C4 adds backstage + dependencyTrack
(External/Downstream); design.md notes them as downstream consumers;
scripts/stick-test.sh demonstrates the referrer-propagation mechanism.

Design only; no houba code. Two small houba-side asks noted (a `digest` field
on audit's CoverageOutcome; an `--sbom` audit tier).

Co-Authored-By: Claude <noreply@anthropic.com>
@trivoallan trivoallan marked this pull request as draft June 17, 2026 13:54
…t embedded card

The DT half of the coverage portal assumed a digest-keyed DT join as a settled
"Decision 8". Two facts dissolve that: the org's DT taxonomy is undecided and DT
is greenfield with no ingestion owner, and houba — by its own boundary (ADR 0032,
no HTTP layer) — never writes to DT, so it has no standing to decide DT's keying.

Reframe the vuln surface by plane, not audience: DT computes vuln posture,
Backstage presents coverage. The owner clicks through a digest deep-link to DT's
own frontend (already deployed) — no embedded card, no findings API, no DT
credentials on the FactRetriever path. houba only emits the digest as the join
key (the existing §7 CoverageOutcome ask). The keying + ingestion ownership are
org decisions, captured as OPEN with the cheapest next check named (does DT's
frontend route by name+version or only by project UUID, which would need one
read-only project/lookup). Decisions 1-7 (the coverage portal) are unaffected.

- spec §8: rewritten from "join by digest" to the deep-link/open-question framing.
- spec §7: soften the one clause asserting DT is digest-keyed.
- ADR 0035: mirror the demotion.
- workspace.dsl: the backstage -> dependencyTrack edge is now a deep-link, not an API drill-in.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant