{"id":48835157,"url":"https://github.com/groupsum/ssot-registry","last_synced_at":"2026-04-24T22:04:11.863Z","repository":{"id":351408761,"uuid":"1209253832","full_name":"groupsum/ssot-registry","owner":"groupsum","description":"Repository-agnostic Python CLI for single-source-of-truth traceability from features to evidence-backed releases.","archived":false,"fork":false,"pushed_at":"2026-04-21T08:39:38.000Z","size":1234,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-21T08:40:56.736Z","etag":null,"topics":["certification","claims-monitoring","feature-traceability","features","governance","json-schema","python-cli","quality-assurance","release-management","requirements-tracing","single-source-of-truth","software-verification","ssot","traceability"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/groupsum.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-13T08:40:02.000Z","updated_at":"2026-04-21T08:39:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/groupsum/ssot-registry","commit_stats":null,"previous_names":["groupsum/ssot-registry"],"tags_count":142,"template":false,"template_full_name":null,"purl":"pkg:github/groupsum/ssot-registry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groupsum%2Fssot-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groupsum%2Fssot-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groupsum%2Fssot-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groupsum%2Fssot-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/groupsum","download_url":"https://codeload.github.com/groupsum/ssot-registry/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groupsum%2Fssot-registry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32242315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certification","claims-monitoring","feature-traceability","features","governance","json-schema","python-cli","quality-assurance","release-management","requirements-tracing","single-source-of-truth","software-verification","ssot","traceability"],"created_at":"2026-04-14T23:02:33.937Z","updated_at":"2026-04-24T22:04:11.845Z","avatar_url":"https://github.com/groupsum.png","language":"Python","readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e🔷 ssot-registry\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eSingle Source of Truth for features, claims, tests, releases, ADRs, and specs.\u003c/strong\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/ssot-registry/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/ssot-registry?label=PyPI%20version\" alt=\"PyPI version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/ssot-registry/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/ssot-registry?label=Python\" alt=\"Supported Python versions\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pepy.tech/project/ssot-registry\"\u003e\u003cimg src=\"https://static.pepy.tech/badge/ssot-registry\" alt=\"Downloads\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://hits.sh/github.com/groupsum/ssot-registry/\"\u003e\u003cimg src=\"https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square\" alt=\"Hits\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n`ssot-registry` is a portable, repository-agnostic single-source-of-truth system built from [ssot-core](https://pypi.org/project/ssot-core/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-contracts](https://pypi.org/project/ssot-contracts/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-tui](https://pypi.org/project/ssot-tui/), and [ssot-codegen](https://pypi.org/project/ssot-codegen/).\n\n- GitHub: https://github.com/groupsum/ssot-registry\n\nIt provides a canonical registry for:\n\n- features\n- tests\n- claims\n- evidence\n- issues\n- risks\n- frozen boundaries\n- releases\n- ADRs\n- specs\n\nThe canonical machine-readable artifact is:\n\n```text\n.ssot/registry.json\n```\n\nEverything else is derived from it.\n\n## Core model\n\n- Features are the only targetable units.\n- Features carry planning horizon and target claim tier.\n- Claims assert properties of features.\n- Tests verify claims.\n- Evidence supports claims and is linked to tests.\n- Issues and risks are plannable and can block certification, promotion, or publication.\n- Boundaries freeze scope.\n- Releases bundle claims and evidence against a frozen boundary.\n\n## Canonical format\n\n`.ssot/registry.json` remains the canonical machine-readable registry.\n\nADR and SPEC companion documents are canonically authored as YAML for readability, and may also be stored as JSON when a repository prefers machine-oriented document files. Markdown, CSV, DOT, SQLite, and reports are derived projections.\n\n## Schema 4\n\nSchema `4` introduces first-class ADR and spec sections in `.ssot/registry.json`:\n\n- `tooling`\n- `document_id_reservations`\n- `adrs`\n- `specs`\n\nPackaged SSOT documents are manifest-driven, immutable, and synced into reserved SSOT-owned ranges. Repository-local ADRs and specs are created in separate non-overlapping ranges so local numbering cannot collide with SSOT-managed documents.\n\n## Install\n\n```bash\npython -m pip install ssot-registry         # [ssot-core](https://pypi.org/project/ssot-core/) + [ssot-cli](https://pypi.org/project/ssot-cli/)\npython -m pip install \"ssot-registry[tui]\"  # add optional [ssot-tui](https://pypi.org/project/ssot-tui/)\npython -m pip install ssot-core             # runtime only\npython -m pip install ssot-cli              # primary CLI distribution\npython -m pip install ssot-tui              # Textual TUI only\n# or for local development\npython -m pip install -e pkgs/ssot-core\n```\n\n`ssot_registry` remains the canonical import package. The runtime now ships from [ssot-core](https://pypi.org/project/ssot-core/), while CLI entry points ship from [ssot-cli](https://pypi.org/project/ssot-cli/), including both `ssot` and the compatibility alias `ssot-registry`.\n\nThe repository root is workspace tooling only. Canonical release artifacts are built from package roots under `pkgs/`, and the canonical Python runtime release target is `pkgs/ssot-core`.\n\nIf you already have a repository initialized on schema `3`, upgrade it explicitly after installing the new package:\n\n```bash\nssot upgrade . --sync-docs --write-report\n# compatibility alias\nssot-registry upgrade . --sync-docs --write-report\n```\n\n## Community\n\nPlease review [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) before contributing.\n\n## CLI quick reference\n\nInstall `ssot-cli` for the primary command surface. You can invoke the CLI with `ssot`, and `ssot-registry` remains supported as a compatibility alias.\n\n```bash\nssot --help\nssot-cli --help\nssot-registry --help\nssot-registry init --help\nssot-registry validate --help\nssot-registry upgrade --help\nssot-registry adr --help\nssot-registry spec --help\nssot-registry feature --help\nssot-registry test --help\nssot-registry issue --help\nssot-registry claim --help\nssot-registry evidence --help\nssot-registry risk --help\nssot-registry boundary --help\nssot-registry release --help\nssot-registry graph --help\nssot-registry registry --help\n```\n\n## Screenshots\n\nCLI screenshots from [ssot-cli](https://pypi.org/project/ssot-cli/):\n\n![ssot top-level help](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-cli/assets/ssot-cli-help.png)\n\n![ssot boundary help](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-cli/assets/ssot-cli-boundary-help.png)\n\nTUI screenshots from [ssot-tui](https://pypi.org/project/ssot-tui/):\n\n![SSOT TUI browser](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-tui/assets/ssot-tui-browser.png)\n\n![SSOT TUI ADR browser](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-tui/assets/ssot-tui-adrs.png)\n\n![SSOT TUI spec browser](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-tui/assets/ssot-tui-specs.png)\n\n![SSOT TUI validation status](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-tui/assets/ssot-tui-validated.png)\n\n---\n\n## CLI conventions\n\n- Most commands accept `[path]` as an optional positional argument. Default is current directory (`.`).\n- Prefer `ssot ...` in new documentation and automation; `ssot-registry ...` is a compatibility alias.\n- IDs are normalized prefixed identifiers (for example: `feat:*`, `clm:*`, `tst:*`, `evd:*`, `iss:*`, `rsk:*`, `bnd:*`, `rel:*`).\n- Commands emit JSON by default; use `--output-format {json,csv,df,yaml,toml}` for alternate renderings.\n- Use `--output-file PATH` to save rendered command output to disk.\n- Non-zero exit code indicates an operation failure or failed checks.\n\n---\n\n## Command surface (all commands, subcommands, and flags)\n\n### Top-level commands\n\n- `init`\n- `validate`\n- `upgrade`\n- `adr`\n- `spec`\n- `feature`\n- `test`\n- `issue`\n- `claim`\n- `evidence`\n- `risk`\n- `boundary`\n- `release`\n- `graph`\n- `registry`\n\n### `init`\n\n```text\nssot-registry init [path]\n  --repo-id REPO_ID\n  --repo-name REPO_NAME\n  --version VERSION\n  --force\n```\n\n### `validate`\n\n```text\nssot-registry validate [path]\n  --write-report\n```\n\n### `upgrade`\n\n```text\nssot-registry upgrade [path]\n  --target-version VERSION\n  --sync-docs\n  --write-report\n```\n\n### `adr`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `sync`\n- `reserve create`, `reserve list`\n\n```text\nssot-registry adr create [path]\n  --title TITLE (required)\n  --slug SLUG (required)\n  --body-file BODY_FILE (required)\n  --number NUMBER\n  --status {proposed,accepted,superseded,retired}\n  --origin {repo-local}\n  --reserve-range RANGE_NAME\n\nssot-registry adr get [path]\n  --id ID (required)\n\nssot-registry adr list [path]\n\nssot-registry adr update [path]\n  --id ID (required)\n  --title TITLE\n  --body-file BODY_FILE\n  --status {proposed,accepted,superseded,retired}\n\nssot-registry adr delete [path]\n  --id ID (required)\n\nssot-registry adr sync [path]\n\nssot-registry adr reserve create [path]\n  --name NAME (required)\n  --start START (required)\n  --end END (required)\n\nssot-registry adr reserve list [path]\n```\n\n### `spec`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `sync`\n- `reserve create`, `reserve list`\n\n```text\nssot-registry spec create [path]\n  --title TITLE (required)\n  --slug SLUG (required)\n  --body-file BODY_FILE (required)\n  --number NUMBER\n  --origin {repo-local}\n  --kind {normative,operational,repo-local}\n  --reserve-range RANGE_NAME\n\nssot-registry spec get [path]\n  --id ID (required)\n\nssot-registry spec list [path]\n\nssot-registry spec update [path]\n  --id ID (required)\n  --title TITLE\n  --body-file BODY_FILE\n  --kind {normative,operational,repo-local}\n\nssot-registry spec delete [path]\n  --id ID (required)\n\nssot-registry spec sync [path]\n\nssot-registry spec reserve create [path]\n  --name NAME (required)\n  --start START (required)\n  --end END (required)\n\nssot-registry spec reserve list [path]\n```\n\n### `feature`\n\nSubcommands:\n\n- `create`\n- `get`\n- `list`\n- `update`\n- `delete`\n- `link`\n- `unlink`\n- `plan`\n- `lifecycle set`\n\nFlags per subcommand:\n\n```text\nssot-registry feature create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --description DESCRIPTION\n  --implementation-status {absent,partial,implemented}\n  --lifecycle-stage {active,deprecated,obsolete,removed}\n  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]\n  --note NOTE\n  --horizon {current,next,future,explicit,backlog,out_of_bounds}\n  --claim-tier {T0,T1,T2,T3,T4}\n  --target-lifecycle-stage {active,deprecated,obsolete,removed}\n  --slot SLOT\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --requires [REQUIRES ...]\n\nssot-registry feature get [path]\n  --id ID (required)\n\nssot-registry feature list [path]\n\nssot-registry feature update [path]\n  --id ID (required)\n  --title TITLE\n  --description DESCRIPTION\n  --implementation-status {absent,partial,implemented}\n\nssot-registry feature delete [path]\n  --id ID (required)\n\nssot-registry feature link [path]\n  --id ID (required)\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --requires [REQUIRES ...]\n\nssot-registry feature unlink [path]\n  --id ID (required)\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --requires [REQUIRES ...]\n\nssot-registry feature plan [path]\n  --ids IDS [IDS ...] (required)\n  --horizon {current,next,future,explicit,backlog,out_of_bounds} (required)\n  --claim-tier {T0,T1,T2,T3,T4}\n  --target-lifecycle-stage {active,deprecated,obsolete,removed}\n  --slot SLOT\n\nssot-registry feature lifecycle set [path]\n  --ids IDS [IDS ...] (required)\n  --stage {active,deprecated,obsolete,removed} (required)\n  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]\n  --effective-release-id EFFECTIVE_RELEASE_ID\n  --note NOTE\n```\n\n### `test`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`\n\n```text\nssot-registry test create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {planned,passing,failing,blocked,skipped}\n  --kind KIND (required)\n  --test-path TEST_PATH (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry test get [path]\n  --id ID (required)\n\nssot-registry test list [path]\n\nssot-registry test update [path]\n  --id ID (required)\n  --title TITLE\n  --status {planned,passing,failing,blocked,skipped}\n  --kind KIND\n  --test-path TEST_PATH\n\nssot-registry test delete [path]\n  --id ID (required)\n\nssot-registry test link [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry test unlink [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n```\n\n### `issue`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`, `close`, `reopen`\n\n```text\nssot-registry issue create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {open,in_progress,blocked,resolved,closed}\n  --severity {low,medium,high,critical}\n  --description DESCRIPTION\n  --horizon {current,next,future,explicit,backlog,out_of_bounds}\n  --slot SLOT\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --risk-ids [RISK_IDS ...]\n  --release-blocking | --no-release-blocking\n\nssot-registry issue get [path]\n  --id ID (required)\n\nssot-registry issue list [path]\n\nssot-registry issue update [path]\n  --id ID (required)\n  --title TITLE\n  --severity {low,medium,high,critical}\n  --description DESCRIPTION\n  --release-blocking | --no-release-blocking\n\nssot-registry issue delete [path]\n  --id ID (required)\n\nssot-registry issue link [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --risk-ids [RISK_IDS ...]\n\nssot-registry issue unlink [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --risk-ids [RISK_IDS ...]\n\nssot-registry issue plan [path]\n  --ids IDS [IDS ...] (required)\n  --horizon {current,next,future,explicit,backlog,out_of_bounds} (required)\n  --slot SLOT\n\nssot-registry issue close [path]\n  --id ID (required)\n\nssot-registry issue reopen [path]\n  --id ID (required)\n```\n\n### `claim`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `evaluate`, `set-status`, `set-tier`\n\n```text\nssot-registry claim create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired}\n  --tier {T0,T1,T2,T3,T4}\n  --kind KIND (required)\n  --description DESCRIPTION\n  --feature-ids [FEATURE_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry claim get [path]\n  --id ID (required)\n\nssot-registry claim list [path]\n\nssot-registry claim update [path]\n  --id ID (required)\n  --title TITLE\n  --kind KIND\n  --description DESCRIPTION\n\nssot-registry claim delete [path]\n  --id ID (required)\n\nssot-registry claim link [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry claim unlink [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry claim evaluate [path]\n  --claim-id CLAIM_ID\n\nssot-registry claim set-status [path]\n  --id ID (required)\n  --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired} (required)\n\nssot-registry claim set-tier [path]\n  --id ID (required)\n  --tier {T0,T1,T2,T3,T4} (required)\n```\n\n### `evidence`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `verify`\n\n```text\nssot-registry evidence create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {planned,collected,passed,failed,stale}\n  --kind KIND (required)\n  --tier {T0,T1,T2,T3,T4}\n  --evidence-path EVIDENCE_PATH (required)\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n\nssot-registry evidence get [path]\n  --id ID (required)\n\nssot-registry evidence list [path]\n\nssot-registry evidence update [path]\n  --id ID (required)\n  --title TITLE\n  --status {planned,collected,passed,failed,stale}\n  --kind KIND\n  --tier {T0,T1,T2,T3,T4}\n  --evidence-path EVIDENCE_PATH\n\nssot-registry evidence delete [path]\n  --id ID (required)\n\nssot-registry evidence link [path]\n  --id ID (required)\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n\nssot-registry evidence unlink [path]\n  --id ID (required)\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n\nssot-registry evidence verify [path]\n  --evidence-id EVIDENCE_ID\n```\n\n### `risk`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `mitigate`, `accept`, `retire`\n\n```text\nssot-registry risk create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {active,mitigated,accepted,retired}\n  --severity {low,medium,high,critical}\n  --description DESCRIPTION\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --issue-ids [ISSUE_IDS ...]\n  --release-blocking | --no-release-blocking\n\nssot-registry risk get [path]\n  --id ID (required)\n\nssot-registry risk list [path]\n\nssot-registry risk update [path]\n  --id ID (required)\n  --title TITLE\n  --severity {low,medium,high,critical}\n  --description DESCRIPTION\n  --release-blocking | --no-release-blocking\n\nssot-registry risk delete [path]\n  --id ID (required)\n\nssot-registry risk link [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --issue-ids [ISSUE_IDS ...]\n\nssot-registry risk unlink [path]\n  --id ID (required)\n  --feature-ids [FEATURE_IDS ...]\n  --claim-ids [CLAIM_IDS ...]\n  --test-ids [TEST_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n  --issue-ids [ISSUE_IDS ...]\n\nssot-registry risk mitigate [path]\n  --id ID (required)\n\nssot-registry risk accept [path]\n  --id ID (required)\n\nssot-registry risk retire [path]\n  --id ID (required)\n```\n\n### `boundary`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`, `add-feature`, `remove-feature`, `freeze`\n\n```text\nssot-registry boundary create [path]\n  --id ID (required)\n  --title TITLE (required)\n  --status {draft,active,frozen,retired}\n  --frozen | --no-frozen\n  --feature-ids [FEATURE_IDS ...]\n\nssot-registry boundary get [path]\n  --id ID (required)\n\nssot-registry boundary list [path]\n\nssot-registry boundary update [path]\n  --id ID (required)\n  --title TITLE\n  --status {draft,active,frozen,retired}\n  --frozen | --no-frozen\n\nssot-registry boundary delete [path]\n  --id ID (required)\n\nssot-registry boundary add-feature [path]\n  --id ID (required)\n  --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)\n\nssot-registry boundary remove-feature [path]\n  --id ID (required)\n  --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)\n\nssot-registry boundary freeze [path]\n  --boundary-id BOUNDARY_ID\n```\n\n### `release`\n\nSubcommands:\n\n- `create`, `get`, `list`, `update`, `delete`\n- `add-claim`, `remove-claim`, `add-evidence`, `remove-evidence`\n- `certify`, `promote`, `publish`, `revoke`\n\n```text\nssot-registry release create [path]\n  --id ID (required)\n  --version VERSION (required)\n  --status {draft,candidate,certified,promoted,published,revoked}\n  --boundary-id BOUNDARY_ID (required)\n  --claim-ids [CLAIM_IDS ...]\n  --evidence-ids [EVIDENCE_IDS ...]\n\nssot-registry release get [path]\n  --id ID (required)\n\nssot-registry release list [path]\n\nssot-registry release update [path]\n  --id ID (required)\n  --version VERSION\n  --status {draft,candidate,certified,promoted,published,revoked}\n  --boundary-id BOUNDARY_ID\n\nssot-registry release delete [path]\n  --id ID (required)\n\nssot-registry release add-claim [path]\n  --id ID (required)\n  --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)\n\nssot-registry release remove-claim [path]\n  --id ID (required)\n  --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)\n\nssot-registry release add-evidence [path]\n  --id ID (required)\n  --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)\n\nssot-registry release remove-evidence [path]\n  --id ID (required)\n  --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)\n\nssot-registry release certify [path]\n  --release-id RELEASE_ID\n  --write-report\n\nssot-registry release promote [path]\n  --release-id RELEASE_ID\n\nssot-registry release publish [path]\n  --release-id RELEASE_ID\n\nssot-registry release revoke [path]\n  --release-id RELEASE_ID (required)\n  --reason REASON (required)\n```\n\n### `graph`\n\nSubcommands:\n\n- `export`\n\n```text\nssot-registry graph export [path]\n  --format {json,dot,png,svg} (required)\n  --output OUTPUT\n```\n\n### `registry`\n\nSubcommands:\n\n- `export`\n\n```text\nssot-registry registry export [path]\n  --format {json,csv,df,yaml,toml} (required)\n  --output OUTPUT\n```\n\n---\n\n## End-to-end usage examples\n\n### E2E example 1: initialize and validate a repo\n\n```bash\n# Initialize registry under current repo\nssot-registry init . --repo-id repo:demo.app --repo-name \"Demo App\" --version 0.1.0\n\n# Validate and write machine-readable report\nssot-registry validate . --write-report\n\n# Inspect top-level entities\nssot-registry feature list .\nssot-registry claim list .\nssot-registry test list .\nssot-registry adr list .\nssot-registry spec list .\n```\n\n### E2E example 1b: create repo-local ADRs and specs\n\n```bash\n# Create local ADR/spec bodies\ncat \u003e adr-body.md \u003c\u003c'EOF'\nAdopt local numbering for repository-owned decisions.\nEOF\n\ncat \u003e spec-body.md \u003c\u003c'EOF'\nRepository-local operational conventions for maintainers.\nEOF\n\n# Create repo-local documents from the local reservation range\nssot-registry adr create . --title \"Use repo-local ADR numbering\" --slug use-repo-local-adr-numbering --body-file adr-body.yaml\nssot-registry spec create . --title \"Maintainer operating conventions\" --slug maintainer-operating-conventions --body-file spec-body.md --kind operational\n\n# Inspect or sync the document sets\nssot-registry adr list .\nssot-registry spec list .\nssot-registry adr sync .\nssot-registry spec sync .\n```\n\n### E2E example 2: plan + implementation lifecycle + release flow\n\n```bash\n# 1) Create feature, claim, test, and evidence\nssot-registry feature create . --id feat:demo.login --title \"User login\"\nssot-registry claim create . --id clm:demo.login.t1 --title \"Login succeeds\" --kind behavior --tier T1\nssot-registry test create . --id tst:demo.login.unit --title \"Login unit\" --kind unit --test-path tests/test_login.py\nssot-registry evidence create . --id evd:demo.login.pytest --title \"Pytest login run\" --kind test_run --evidence-path artifacts/login.json --tier T1\n\n# 2) Wire references\nssot-registry feature link . --id feat:demo.login --claim-ids clm:demo.login.t1 --test-ids tst:demo.login.unit\nssot-registry claim link . --id clm:demo.login.t1 --feature-ids feat:demo.login --test-ids tst:demo.login.unit --evidence-ids evd:demo.login.pytest\nssot-registry test link . --id tst:demo.login.unit --feature-ids feat:demo.login --claim-ids clm:demo.login.t1 --evidence-ids evd:demo.login.pytest\n\n# 3) Plan and set lifecycle\nssot-registry feature plan . --ids feat:demo.login --horizon current --claim-tier T1 --target-lifecycle-stage active\nssot-registry feature lifecycle set . --ids feat:demo.login --stage active --note \"Initial rollout\"\n\n# 4) Freeze boundary and create release\nssot-registry boundary create . --id bnd:demo.v0 --title \"Demo v0 scope\" --feature-ids feat:demo.login\nssot-registry boundary freeze . --boundary-id bnd:demo.v0\nssot-registry release create . --id rel:0.1.0 --version 0.1.0 --boundary-id bnd:demo.v0 --claim-ids clm:demo.login.t1 --evidence-ids evd:demo.login.pytest\n\n# 5) Gate progression\nssot-registry release certify . --release-id rel:0.1.0 --write-report\nssot-registry release promote . --release-id rel:0.1.0\nssot-registry release publish . --release-id rel:0.1.0\n```\n\n### E2E example 3: graph exports and focused checks\n\n```bash\n# Evaluate one claim\nssot-registry claim evaluate . --claim-id clm:demo.login.t1\n\n# Verify one evidence row\nssot-registry evidence verify . --evidence-id evd:demo.login.pytest\n\n# Export graph in JSON, DOT, and PNG formats\nssot-registry graph export . --format json --output .ssot/graphs/registry.graph.json\nssot-registry graph export . --format dot --output .ssot/graphs/registry.graph.dot\nssot-registry graph export . --format png --output .ssot/graphs/registry.graph.png\n\n# Render list output as YAML/CSV and export full registry as TOML\nssot-registry --output-format yaml feature list .\nssot-registry --output-format csv claim list .\nssot-registry registry export . --format toml --output .ssot/exports/registry.toml\n```\n\n---\n\n## Documentation map (core vs origin)\n\n- Canonical upstream `ssot-core` docs (`.ssot/`)\n  - Upstream ADR inventory: `.ssot/adr/`\n  - Upstream spec inventory: `.ssot/specs/`\n\n- Canonical upstream governance docs (`.ssot/`)\n  - Package topology and release order: `.ssot/specs/SPEC-0500-package-topology-and-release-order.yaml`\n  - Canonical release targets: `.ssot/specs/SPEC-0510-canonical-release-targets-and-tag-naming.yaml`\n  - Origin/core boundary rules: `.ssot/specs/SPEC-0512-document-origin-boundaries-and-id-ranges.yaml`\n  - Architecture decisions for package layout and release flow: `.ssot/adr/`\n\n- Public operator `ssot-origin` templates (`pkgs/ssot-contracts/src/ssot_contracts/templates/`)\n  - ADRs copied into downstream repos: `pkgs/ssot-contracts/src/ssot_contracts/templates/adr/`\n  - Specs copied into downstream repos: `pkgs/ssot-contracts/src/ssot_contracts/templates/specs/`\n\n- Examples (`examples/`)\n  - Minimal repo fixtures, advanced/e2e examples, and format/export workflows (`examples/formats-and-exports.md`).\n\n- Root reference docs\n- Verification notes: `VERIFICATION.md`\n- Changelog: `CHANGELOG.md`\n\n## Public operator surfaces\n\n- Canonical JSON registry: `.ssot/registry.json`\n- JSON Schema pack\n- Noun-scoped CLI emitting JSON by default (with optional CSV/DF/YAML/TOML renderers)\n- Python API under `ssot_registry.api`\n- Derived graph, report, and snapshot artifacts\n\n## Repository layout\n\n- Specs: `.ssot/specs/`\n- ADRs: `.ssot/adr/`\n- Examples: `examples/`\n- Source code: `pkgs/*/src/`\n\n## Development\n\n```bash\npython -m venv .venv\n. .venv/bin/activate\npython -m pip install --upgrade pip\npython -m pip install -e pkgs/ssot-registry\npython -m unittest discover -s tests -v\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroupsum%2Fssot-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgroupsum%2Fssot-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroupsum%2Fssot-registry/lists"}