Transparent dependency-risk scoring engine for AI coding agents.
Attach Open Score is the public, Apache-2.0 scoring method and deterministic engine that supports Attach Guard's dependency-install decisions.
Start here:
docs/SOURCES.md— allowed source families, banned sources, attribution posture, and legal review gates.docs/IMPLEMENTATION_LAYOUT.md— Go-first implementation language/package layout and attach-guard integration posture.docs/SCORE_SCHEMA.md— v0 score/verdict shape, package identity, reasons, source refs, and TTL semantics.docs/DECISION_SEMANTICS.md— ALLOW / ASK / DENY / UNKNOWN behavior and policy profiles.docs/REASON_CODES.md— v0 deterministic reason-code taxonomy.docs/LIMITATIONS.md— what v0 can and cannot guarantee.spec/v0/score.schema.json— machine-readable JSON Schema draft.docs/plans/local-dogfood-score-walkthrough.md— offline local dogfood walkthrough for inspecting synthetic ALLOW / ASK / DENY / UNKNOWN fixture verdicts.docs/plans/2026-05-07-language-and-layout-decision.md— ADR recording the Go-first core + JSON schema as the cross-language contract (retroactive).
Initial tooling:
go test ./...
go run ./cmd/attach-open-score --root .
go run ./cmd/attach-open-score score --input request.jsonfixtures/v0/— synthetic public-safe example verdicts.score --inputevaluates a local, offline v0 request JSON. The request shape is intentionally separate from fixture verdict JSON:- top-level
packageis required and uses the package identity fields fromdocs/SCORE_SCHEMA.md; - top-level
evidenceis required for CLI scoring and must contain one or more normalized evidence items; - each evidence item contains a deterministic
reasonand, when the reason depends on source data, matchingsource_refand/orsource_refsentries preserving attribution and terms metadata; - unknown JSON fields,
mode, and verdict-shaped fixture inputs are rejected; - experimental
X_*reasons with blocking/non-informational effects must carry source-ref provenance; --policy-profileacceptsdefault,local-dev-default,ci-strict, oraudit-only.
- top-level
Minimal local request example:
{
"package": {
"ecosystem": "npm",
"name": "synthetic-package",
"version": "1.0.0",
"purl": "pkg:npm/synthetic-package@1.0.0",
"resolved": true
},
"evidence": [
{
"reason": {
"code": "NO_KNOWN_VULNERABILITIES",
"severity": "INFO",
"decision_effect": "NONE",
"message": "Synthetic local evidence for scorer CLI smoke tests.",
"source_ref_ids": ["synthetic-source"]
},
"source_ref": {
"id": "synthetic-source",
"source": "synthetic-fixture",
"url": "https://example.invalid/attach-open-score/synthetic-source",
"retrieved_at": "2026-05-06T11:50:00Z",
"ttl_seconds": 86400,
"license_or_terms_url": "https://example.invalid/terms",
"attribution": "Synthetic fixture data for Attach Open Score examples.",
"attribution_required": false,
"redistribution": "allowed",
"public_display": "allowed"
}
}
]
}Status: draft public spec with a first OSV adapter. Source policy, schema, fixtures, and adapter behavior must stay reviewed together.