Skip to main content

Project Management Plan

FieldValue
Document IDPMP-OCSA-001
Version1.0
StatusApproved — Phase 1 (prototype) complete
Date2026-09-12
OwnerSoftware Quality Management, OEM supplier
ClassificationInternal

1. Project overview​

Background​

As a Tier-1 supplier to automotive OEMs, we receive a Software Bill of Materials for every software release, from our own suppliers and from internal development. Our obligation is to verify that open source software is used in accordance with the OEM's software quality requirements — in particular that copyleft licenses do not create undisclosed obligations on the delivered product.

The SBOMs arrive as SPDX JSON. Reviewing them manually does not scale: a typical cockpit or IVI release contains 40–200 components with multi-level transitive dependencies, dual licensing and custom LicenseRef- entries. Manual review also produces inconsistent verdicts between reviewers, which is indefensible in an OEM audit.

Problem statement​

  1. No tooling to visualise SBOM dependency structure, so copyleft reachability is invisible.
  2. Copyleft assessment is inconsistent and depends on individual reviewer experience.
  3. No objective record linking a finding to the evidence (dependency path) that produced it.
  4. No milestone-to-milestone comparison, so license changes between releases go unnoticed.
  5. Reviews are manual and cannot gate a CI pipeline or a supplier delivery.

Objectives​

IDObjectiveMeasure
OBJ-1Automate ingestion and normalisation of SPDX 2.x JSON SBOMsParse 100 % of supplier SPDX 2.2/2.3 files without manual pre-processing
OBJ-2Produce deterministic, reproducible copyleft verdictsSame SBOM always yields identical findings
OBJ-3Visualise component dependencies and license riskReviewer identifies the risk path in under 2 minutes
OBJ-4Present findings with evidence and a concrete obligationEvery finding carries rule ID + dependency path + action
OBJ-5Enable milestone comparisonDetect added/removed components and license changes
OBJ-6Enable automated release gatingNon-zero exit code blocks a pipeline on policy violation
OBJ-7Keep supplier data confidentialNo SBOM content leaves the reviewer's machine

Success criteria​

  • Demo SBOM (42 components) analysed end-to-end with 51 findings.
  • 138 automated assertions pass (35 engine + 23 UI + 80 animation).
  • Milestone diff verified against a 4.1.0 → 4.2.0 pair.
  • Deployable as a static site (281 KB dist/) to a private corporate domain.
  • (Phase 2) Used on a real supplier delivery in a live milestone review.
  • (Phase 2) Legal sign-off on the license tier table.

2. Scope​

In scope — Phase 1 (delivered)​

AreaDelivered
IngestionSPDX 2.2 / 2.3 JSON parsing, package/relationship/extracted-license model
QualityNTIA minimum elements + 5 additional audit checks (12 total)
Classification5-tier license risk model, SPDX expression parser (AND/OR/WITH), linking exceptions
AnalysisCopyleft propagation, license compatibility, obligation derivation
ReportingFindings list, risk score, obligation checklist, NOTICE file, supplier inquiry letter
ComparisonMilestone diff (identity-based)
VisualisationDependency graph, KPI strip, license distribution, inventory tables
InterfacesBrowser UI, CLI (6 commands), MCP server (9 tools)
DeploymentStatic site build + Cloudflare Pages guide

Out of scope — Phase 1​

  • Legal validation of the license tier table (requires counsel).
  • Per-file license scanning (ScanCode / FOSSology integration).
  • Vulnerability (CVE) correlation via OSV/NVD.
  • CycloneDX format support.
  • Persistent storage, user accounts, approval/waiver workflow.
  • Hosted multi-tenant backend.
  • Commercial license inventory management.

Assumptions​

IDAssumptionRisk if false
ASM-1Suppliers can deliver SPDX 2.2+ JSONParser must handle CycloneDX or conversion
ASM-2licenseConcluded is populated by the supplierVerdicts fall back to declared/from-files; confidence drops
ASM-3Reviewers have Node.js 18+ for CLI/testingBrowser-only usage still works; CLI/MCP unavailable
ASM-4Legal can review and ratify the tier table within Phase 2Tool remains engineering triage only
ASM-5A process/executable boundary map can be obtained per ECUCompatibility conflicts stay conservative (over-reported)

Constraints​

IDConstraint
CON-1Supplier SBOMs are confidential — no third-party upload or external API calls
CON-2No budget for commercial SCA tooling in the current cycle
CON-3Must run on the reviewer's Windows workstation without admin rights
CON-4Tool output is engineering triage; it does not replace legal counsel
CON-5No server-side infrastructure available in Phase 1

3. Deliverables​

IDDeliverableLocationStatus
D-01Working prototype (web application)index.html, src/, assets/Complete
D-02Headless CLItools/cli.mjsComplete
D-03MCP server (agent interface)tools/mcp-server.mjsComplete
D-04Automated test suitetools/smoke-test.mjs, tools/ui-smoke-test.mjsComplete
D-05Sample SBOM fixtures (2 milestones)samples/Complete
D-06Deployment package + guidescripts/, _headers, deployment docsComplete
D-07Requirements analysisdocs/02-requirements-analysis/Complete
D-08Conceptual designdocs/03-conceptual-design/Complete
D-09Architecture designdocs/04-architecture-design/Complete
D-10Smoke test reportdocs/05-testing/Complete
D-11Legal ratification of license tier table—Not started
D-12Waiver/approval workflow—Phase 2

4. Work breakdown structure​

1 OSS Compliance Smart Analyzer
1.1 Foundation
1.1.1 License knowledge base (tiers, obligations, exceptions) [done]
1.1.2 SPDX expression parser (AND / OR / WITH) [done]
1.1.3 SPDX 2.x document parser + dependency graph [done]
1.1.4 NTIA minimum-elements quality checks [done]
1.2 Risk engine
1.2.1 Effective license resolution [done]
1.2.2 Copyleft classification [done]
1.2.3 Transitive propagation (static vs dynamic) [done]
1.2.4 License compatibility conflicts [done]
1.2.5 Finding generation (LIC-001 … LIC-009) [done]
1.2.6 Normalised risk scoring [done]
1.3 Presentation
1.3.1 Force-directed dependency graph [done]
1.3.2 Dashboard (KPIs, distribution, quality) [done]
1.3.3 Findings and inventory tables with filtering [done]
1.3.4 Component detail panel [done]
1.3.5 Export (JSON / CSV) [done]
1.4 Interfaces
1.4.1 CLI: analyze / report / notice / inquiry / diff / gate [done]
1.4.2 MCP server over stdio [done]
1.5 Milestone comparison
1.5.1 Identity-based component matching [done]
1.5.2 Change, escalation and regression detection [done]
1.5.3 Diff rendering (markdown + UI card) [done]
1.6 Verification
1.6.1 Engine smoke test (35 assertions) [done]
1.6.2 UI smoke test (23 assertions) [done]
1.7 Deployment
1.7.1 Static build script [done]
1.7.2 Cloudflare Pages headers and guide [done]
1.8 Documentation
1.8.1 Requirements / conceptual / architecture / test report [done]
2 Phase 2 (planned)
2.1 Legal ratification of the tier table [planned]
2.2 Backend persistence + approval workflow [planned]
2.3 CycloneDX support [planned]
2.4 Per-file scanning integration [planned]
2.5 CVE correlation via OSV [planned]

5. Phasing and schedule​

Phase 1 was executed as a single intensive iteration. Durations are elapsed working time, not calendar time.

PhaseWork packageEst.ActualStatus
P0Rules definition (tier table, obligations, gate criteria)1–2 d~0.5 dComplete
P1Ingestion and normalisation0.5 d~0.3 dComplete
P2Risk engine (classification, propagation, findings, scoring)1–2 d~0.7 dComplete
P3Visualisation (graph, dashboard, tables)1 d~0.5 dComplete
P4Productisation (CLI, diff, reports, CI gate)1–2 wk~0.4 dComplete
P5Agent layer (MCP server)1 wk~0.2 dComplete
P6Verification and defect correction0.5 d~0.4 dComplete
P7Deployment package0.5 d~0.2 dComplete
P8Design documentation1 d~0.3 dComplete
Total Phase 1~4–5 wk~3.5 d (AI-assisted)Complete

The prototype was built with AI-assisted coding. The estimate column reflects conventional manual effort; the actual column is not directly comparable and should not be used as a baseline for future manual work.

Milestones​

IDMilestoneCriteriaDateStatus
M-1Prototype runs on demo SBOMDashboard renders, 42 components2026-09-12Met
M-2Engine verified headlessly35 assertions pass2026-09-12Met
M-3CLI + CI gate operationalgate exits 1 on violation2026-09-12Met
M-4Milestone diff verified4.1.0 → 4.2.0 delta correct2026-09-12Met
M-5MCP server responds9 tools callable over stdio2026-09-12Met
M-6Deployment package readydist/ 281 KB, _headers2026-09-12Met
M-7Design documentation archived5 documents2026-09-12Met
M-8Legal ratification of tier tableCounsel sign-off—Open
M-9First live supplier reviewReal SBOM assessed—Open

6. Roles and responsibilities​

RoleResponsibilityPhase 1
SQM Engineer (project owner)Domain rules, gate criteria, supplier requirements, acceptanceOwner
AI coding assistantImplementation, test authoring, documentation draftingExecutor
Legal counselRatify license tier table, review CRITICAL/HIGH findingsTo engage (Phase 2)
Supplier quality managerEmbed SBOM requirements in supplier agreementsTo engage (Phase 2)
IT / Cloudflare adminCustom domain, DNS, Zero Trust Access policyTo engage at deployment

Phase 1 had no dedicated developer, tester or DevOps resource. For Phase 2 (persistence, workflow, hosted backend) these roles must be staffed.

7. Risk register​

IDRiskLikelihoodImpactMitigationOwner
R-01License tier table is legally wrongMediumCriticalTool is labelled engineering triage; legal ratification is M-8; all CRITICAL/HIGH findings require counselSQM + Legal
R-02Suppliers deliver incomplete SBOMs (no linkage, no purl)HighHighNTIA quality check surfaces gaps; conservative "assume static link" default; supplier requirements publishedSQM
R-03False positives erode trust with suppliersMediumHighLinking exceptions modelled explicitly; findings include evidence path; deduplication per distributed unitSQM
R-04Compatibility conflicts over-reported (no process boundary map)HighMediumDocumented as a known limitation; request boundary map; isolate per-executable SBOMsSQM
R-05Tool used as a legal verdict rather than triageMediumCriticalBanner in UI, disclaimer in every generated report, limitations documentedSQM
R-06Large SBOMs (5 000+) degrade graph performanceLowMedium600-node render cap with hidden-count indicator; O(n²) layout acceptable to ~1 000 nodesDev
R-07LicenseRef- custom licenses hide copyleftMediumHighExtracted-text keyword scan (LIC-004); unresolved-reference blocker (LIC-003)SQM
R-08Cloudflare deployment exposes internal tool publiclyLowMediumZero Trust Access policy; also protect *.pages.dev URLIT
R-09Scope creep into CVE/vulnerability managementMediumMediumExplicitly out of scope for Phase 1; planned as Phase 2.5SQM
R-10Single-maintainer knowledge concentrationMediumMediumDesign documentation (this set) + 138 automated assertionsSQM

8. Quality management​

Definition of done (per work package)​

  • Functional requirement implemented and traceable to an FR ID
  • Automated assertion added and passing
  • No new defect introduced (full suite green)
  • Documented in architecture or README where behaviour is non-obvious
  • Deployable via npm run build:static without manual steps

Quality gates​

GateCriterionStatus
G-1 (code)npm run smoke exits 0Passed — 35/35
G-2 (UI)npm run smoke:ui exits 0Passed — 23/23
G-3 (build)dist/ builds and serves all assets with correct MIME typesPassed
G-4 (docs)All five design documents archivedPassed
G-5 (legal)Tier table ratified by counselNot passed — blocks Phase 2 release

9. Configuration and change management​

ItemDetail
Source locationoss-compliance-analyzer/ (workspace)
Version schemeSemantic versioning; current 0.1.0
Buildnpm run build:static → dist/
Excluded from deploytools/, scripts/, package.json, docs/, dist/
Change to license tier tableControlled change — affects every verdict; requires re-baselining all historical findings and legal re-review
Change to finding rule IDsAppend new IDs; never renumber existing ones (findings are referenced in reports)

10. Communication and reporting​

ArtefactAudienceFrequency
Design documentation set (this)Project owner, future maintainers, auditorsOnce, updated per release
Smoke test reportProject ownerPer release
Compliance report (generated)Internal review board, OEM on requestPer milestone
Supplier inquiry letter (generated)SupplierPer milestone, on blockers
Waiver registerAuditorPer milestone (Phase 2)

11. Current status and next steps​

Phase 1 is complete and verified. The prototype is functional, tested, documented and deployable.

Recommended next actions, in priority order:

  1. Engage legal to ratify the license tier table (M-8). The only gate standing between the tool and operational use. It is a table review, not a code task — likely a single workshop.
  2. Publish the supplier SBOM requirements into supplier quality agreements. Without STATIC_LINK/DYNAMIC_LINK and purls, no tool can produce a defensible verdict.
  3. Run the tool against one real supplier SBOM and compare against the current manual review. This calibrates the false-positive rate before wider rollout.
  4. Add the waiver/approval workflow (Phase 2). Auditors ask for the waiver register, not the scan.
  5. Deploy to the corporate domain behind Zero Trust Access.