ssot-cli 0.1.2__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/PKG-INFO +15 -14
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/README.md +6 -8
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/pyproject.toml +9 -6
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/adr_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/boundary_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/claim_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/evidence_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/feature_cmd.py +12 -3
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/issue_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/main.py +1 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/profile_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/release_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/risk_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/spec_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/test_cmd.py +5 -1
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli.egg-info/PKG-INFO +15 -14
- ssot_cli-0.1.4/src/ssot_cli.egg-info/requires.txt +5 -0
- ssot_cli-0.1.2/src/ssot_cli.egg-info/requires.txt +0 -5
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/setup.cfg +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/__init__.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/common.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/graph_cmd.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/init_cmd.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/registry_cmd.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/upgrade_cmd.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli/validate_cmd.py +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli.egg-info/SOURCES.txt +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli.egg-info/entry_points.txt +0 -0
- {ssot_cli-0.1.2 → ssot_cli-0.1.4}/src/ssot_cli.egg-info/top_level.txt +0 -0
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssot-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Primary CLI distribution for ssot-registry.
|
|
5
5
|
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/groupsum/ssot-registry
|
|
8
|
-
Project-URL: Repository, https://github.com/groupsum/ssot-registry
|
|
7
|
+
Project-URL: Homepage, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
|
|
8
|
+
Project-URL: Repository, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
|
|
9
9
|
Project-URL: Issues, https://github.com/groupsum/ssot-registry/issues
|
|
10
|
-
Keywords: ssot,cli,registry
|
|
10
|
+
Keywords: ssot,cli,registry,governance,release-management,validation,developer-tools
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
14
15
|
Classifier: Operating System :: OS Independent
|
|
15
16
|
Classifier: Programming Language :: Python :: 3
|
|
16
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -18,11 +19,13 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
18
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
24
|
Classifier: Topic :: Utilities
|
|
22
25
|
Requires-Python: <3.14,>=3.10
|
|
23
26
|
Description-Content-Type: text/markdown
|
|
24
|
-
Requires-Dist: ssot-contracts<0.3.0,>=0.2.
|
|
25
|
-
Requires-Dist: ssot-
|
|
27
|
+
Requires-Dist: ssot-contracts<0.3.0,>=0.2.8
|
|
28
|
+
Requires-Dist: ssot-core<0.3.0,>=0.2.8
|
|
26
29
|
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
27
30
|
|
|
28
31
|
<div align="center">
|
|
@@ -39,7 +42,7 @@ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
|
39
42
|
|
|
40
43
|
`ssot-cli` is the primary command-line distribution for SSOT.
|
|
41
44
|
|
|
42
|
-
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in
|
|
45
|
+
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/) and shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/).
|
|
43
46
|
|
|
44
47
|
- GitHub: https://github.com/groupsum/ssot-registry
|
|
45
48
|
|
|
@@ -61,7 +64,7 @@ For local development:
|
|
|
61
64
|
python -m pip install -e pkgs/ssot-cli
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
This package depends on
|
|
67
|
+
This package depends on [ssot-core](https://pypi.org/project/ssot-core/) and [ssot-contracts](https://pypi.org/project/ssot-contracts/), so installing it gives you the full CLI runtime stack.
|
|
65
68
|
|
|
66
69
|
## Executable names
|
|
67
70
|
|
|
@@ -99,13 +102,11 @@ ssot registry --help
|
|
|
99
102
|
|
|
100
103
|
Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
|
|
101
104
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-

|
|
105
|
+

|
|
105
106
|
|
|
106
107
|
Boundary command help:
|
|
107
108
|
|
|
108
|
-

|
|
109
110
|
|
|
110
111
|
## CLI conventions
|
|
111
112
|
|
|
@@ -822,7 +823,7 @@ ssot release certify . --release-id rel:0.1.0 --write-report
|
|
|
822
823
|
## Package relationships
|
|
823
824
|
|
|
824
825
|
- Package type: CLI distribution
|
|
825
|
-
- Depends on:
|
|
826
|
-
- Related packages:
|
|
826
|
+
- Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-contracts](https://pypi.org/project/ssot-contracts/)
|
|
827
|
+
- Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
827
828
|
|
|
828
829
|
If you need the command-line interface, this is the package to install.
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
`ssot-cli` is the primary command-line distribution for SSOT.
|
|
14
14
|
|
|
15
|
-
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in
|
|
15
|
+
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/) and shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/).
|
|
16
16
|
|
|
17
17
|
- GitHub: https://github.com/groupsum/ssot-registry
|
|
18
18
|
|
|
@@ -34,7 +34,7 @@ For local development:
|
|
|
34
34
|
python -m pip install -e pkgs/ssot-cli
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
This package depends on
|
|
37
|
+
This package depends on [ssot-core](https://pypi.org/project/ssot-core/) and [ssot-contracts](https://pypi.org/project/ssot-contracts/), so installing it gives you the full CLI runtime stack.
|
|
38
38
|
|
|
39
39
|
## Executable names
|
|
40
40
|
|
|
@@ -72,13 +72,11 @@ ssot registry --help
|
|
|
72
72
|
|
|
73
73
|
Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-

|
|
75
|
+

|
|
78
76
|
|
|
79
77
|
Boundary command help:
|
|
80
78
|
|
|
81
|
-

|
|
82
80
|
|
|
83
81
|
## CLI conventions
|
|
84
82
|
|
|
@@ -795,7 +793,7 @@ ssot release certify . --release-id rel:0.1.0 --write-report
|
|
|
795
793
|
## Package relationships
|
|
796
794
|
|
|
797
795
|
- Package type: CLI distribution
|
|
798
|
-
- Depends on:
|
|
799
|
-
- Related packages:
|
|
796
|
+
- Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-contracts](https://pypi.org/project/ssot-contracts/)
|
|
797
|
+
- Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
800
798
|
|
|
801
799
|
If you need the command-line interface, this is the package to install.
|
|
@@ -4,22 +4,23 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ssot-cli"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.4"
|
|
8
8
|
description = "Primary CLI distribution for ssot-registry."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.14"
|
|
11
11
|
license = "Apache-2.0"
|
|
12
12
|
authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
|
|
13
13
|
dependencies = [
|
|
14
|
-
"ssot-contracts>=0.2.
|
|
15
|
-
"ssot-
|
|
14
|
+
"ssot-contracts>=0.2.8,<0.3.0",
|
|
15
|
+
"ssot-core>=0.2.8,<0.3.0",
|
|
16
16
|
"tomli>=2.0.1; python_version < '3.11'",
|
|
17
17
|
]
|
|
18
|
-
keywords = ["ssot", "cli", "registry"]
|
|
18
|
+
keywords = ["ssot", "cli", "registry", "governance", "release-management", "validation", "developer-tools"]
|
|
19
19
|
classifiers = [
|
|
20
20
|
"Development Status :: 3 - Alpha",
|
|
21
21
|
"Environment :: Console",
|
|
22
22
|
"Intended Audience :: Developers",
|
|
23
|
+
"Intended Audience :: Information Technology",
|
|
23
24
|
"Operating System :: OS Independent",
|
|
24
25
|
"Programming Language :: Python :: 3",
|
|
25
26
|
"Programming Language :: Python :: 3 :: Only",
|
|
@@ -27,12 +28,14 @@ classifiers = [
|
|
|
27
28
|
"Programming Language :: Python :: 3.11",
|
|
28
29
|
"Programming Language :: Python :: 3.12",
|
|
29
30
|
"Programming Language :: Python :: 3.13",
|
|
31
|
+
"Topic :: Software Development :: Documentation",
|
|
32
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
30
33
|
"Topic :: Utilities",
|
|
31
34
|
]
|
|
32
35
|
|
|
33
36
|
[project.urls]
|
|
34
|
-
Homepage = "https://github.com/groupsum/ssot-registry"
|
|
35
|
-
Repository = "https://github.com/groupsum/ssot-registry"
|
|
37
|
+
Homepage = "https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli"
|
|
38
|
+
Repository = "https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli"
|
|
36
39
|
Issues = "https://github.com/groupsum/ssot-registry/issues"
|
|
37
40
|
|
|
38
41
|
[project.scripts]
|
|
@@ -18,7 +18,11 @@ from ssot_cli.common import add_path_argument, compact_dict
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def register_adr(subparsers: argparse._SubParsersAction) -> None:
|
|
21
|
-
adr = subparsers.add_parser(
|
|
21
|
+
adr = subparsers.add_parser(
|
|
22
|
+
"adr",
|
|
23
|
+
help="ADR operations.",
|
|
24
|
+
description="Architectural decision records capture why the system is designed the way it is and preserve decision history.",
|
|
25
|
+
)
|
|
22
26
|
adr_sub = adr.add_subparsers(dest="adr_command", required=True)
|
|
23
27
|
|
|
24
28
|
create = adr_sub.add_parser("create", help="Create an ADR.")
|
|
@@ -18,7 +18,11 @@ from ssot_cli.common import add_optional_bool_argument, add_path_argument, compa
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def register_boundary(subparsers: argparse._SubParsersAction) -> None:
|
|
21
|
-
boundary = subparsers.add_parser(
|
|
21
|
+
boundary = subparsers.add_parser(
|
|
22
|
+
"boundary",
|
|
23
|
+
help="Boundary operations.",
|
|
24
|
+
description="Boundaries define the scoped set of direct features and reusable profiles that a release is evaluated against.",
|
|
25
|
+
)
|
|
22
26
|
boundary_sub = boundary.add_subparsers(dest="boundary_command", required=True)
|
|
23
27
|
|
|
24
28
|
create = boundary_sub.add_parser("create", help="Create a boundary.")
|
|
@@ -25,7 +25,11 @@ _LINK_MAPPING = {
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def register_claim(subparsers: argparse._SubParsersAction) -> None:
|
|
28
|
-
claim = subparsers.add_parser(
|
|
28
|
+
claim = subparsers.add_parser(
|
|
29
|
+
"claim",
|
|
30
|
+
help="Claim operations.",
|
|
31
|
+
description="Claims are tiered statements about feature behavior that are backed by tests and evidence over time.",
|
|
32
|
+
)
|
|
29
33
|
claim_sub = claim.add_subparsers(dest="claim_command", required=True)
|
|
30
34
|
|
|
31
35
|
create = claim_sub.add_parser("create", help="Create a claim.")
|
|
@@ -22,7 +22,11 @@ _LINK_MAPPING = {
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def register_evidence(subparsers: argparse._SubParsersAction) -> None:
|
|
25
|
-
evidence = subparsers.add_parser(
|
|
25
|
+
evidence = subparsers.add_parser(
|
|
26
|
+
"evidence",
|
|
27
|
+
help="Evidence operations.",
|
|
28
|
+
description="Evidence rows track artifacts that support claims and test outcomes, such as bundles, logs, or reports.",
|
|
29
|
+
)
|
|
26
30
|
evidence_sub = evidence.add_subparsers(dest="evidence_command", required=True)
|
|
27
31
|
|
|
28
32
|
create = evidence_sub.add_parser("create", help="Create an evidence row.")
|
|
@@ -18,6 +18,7 @@ from ssot_cli.common import add_optional_bool_argument, add_path_argument, colle
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
_LINK_MAPPING = {
|
|
21
|
+
"spec_ids": "spec_ids",
|
|
21
22
|
"claim_ids": "claim_ids",
|
|
22
23
|
"test_ids": "test_ids",
|
|
23
24
|
"requires": "requires",
|
|
@@ -25,7 +26,11 @@ _LINK_MAPPING = {
|
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
def register_feature(subparsers: argparse._SubParsersAction) -> None:
|
|
28
|
-
feature = subparsers.add_parser(
|
|
29
|
+
feature = subparsers.add_parser(
|
|
30
|
+
"feature",
|
|
31
|
+
help="Feature operations.",
|
|
32
|
+
description="Features are targetable implementation units that connect planning, claims, tests, and supporting specs.",
|
|
33
|
+
)
|
|
29
34
|
feature_sub = feature.add_subparsers(dest="feature_command", required=True)
|
|
30
35
|
|
|
31
36
|
create = feature_sub.add_parser("create", help="Create a feature.")
|
|
@@ -41,6 +46,7 @@ def register_feature(subparsers: argparse._SubParsersAction) -> None:
|
|
|
41
46
|
create.add_argument("--claim-tier", choices=sorted(CLAIM_TIERS), default=None)
|
|
42
47
|
create.add_argument("--target-lifecycle-stage", choices=sorted(FEATURE_LIFECYCLE_STAGES), default="active")
|
|
43
48
|
create.add_argument("--slot", default=None)
|
|
49
|
+
create.add_argument("--spec-ids", nargs="*", default=[])
|
|
44
50
|
create.add_argument("--claim-ids", nargs="*", default=[])
|
|
45
51
|
create.add_argument("--test-ids", nargs="*", default=[])
|
|
46
52
|
create.add_argument("--requires", nargs="*", default=[])
|
|
@@ -68,17 +74,19 @@ def register_feature(subparsers: argparse._SubParsersAction) -> None:
|
|
|
68
74
|
delete.add_argument("--id", required=True)
|
|
69
75
|
delete.set_defaults(func=run_delete)
|
|
70
76
|
|
|
71
|
-
link = feature_sub.add_parser("link", help="Link a feature to claims, tests, or required features.")
|
|
77
|
+
link = feature_sub.add_parser("link", help="Link a feature to specs, claims, tests, or required features.")
|
|
72
78
|
add_path_argument(link)
|
|
73
79
|
link.add_argument("--id", required=True)
|
|
80
|
+
link.add_argument("--spec-ids", nargs="*")
|
|
74
81
|
link.add_argument("--claim-ids", nargs="*")
|
|
75
82
|
link.add_argument("--test-ids", nargs="*")
|
|
76
83
|
link.add_argument("--requires", nargs="*")
|
|
77
84
|
link.set_defaults(func=run_link)
|
|
78
85
|
|
|
79
|
-
unlink = feature_sub.add_parser("unlink", help="Unlink a feature from claims, tests, or required features.")
|
|
86
|
+
unlink = feature_sub.add_parser("unlink", help="Unlink a feature from specs, claims, tests, or required features.")
|
|
80
87
|
add_path_argument(unlink)
|
|
81
88
|
unlink.add_argument("--id", required=True)
|
|
89
|
+
unlink.add_argument("--spec-ids", nargs="*")
|
|
82
90
|
unlink.add_argument("--claim-ids", nargs="*")
|
|
83
91
|
unlink.add_argument("--test-ids", nargs="*")
|
|
84
92
|
unlink.add_argument("--requires", nargs="*")
|
|
@@ -139,6 +147,7 @@ def run_create(args: argparse.Namespace) -> dict[str, object]:
|
|
|
139
147
|
"target_claim_tier": args.claim_tier,
|
|
140
148
|
"target_lifecycle_stage": args.target_lifecycle_stage,
|
|
141
149
|
},
|
|
150
|
+
"spec_ids": args.spec_ids,
|
|
142
151
|
"claim_ids": args.claim_ids,
|
|
143
152
|
"test_ids": args.test_ids,
|
|
144
153
|
"requires": args.requires,
|
|
@@ -26,7 +26,11 @@ _LINK_MAPPING = {
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def register_issue(subparsers: argparse._SubParsersAction) -> None:
|
|
29
|
-
issue = subparsers.add_parser(
|
|
29
|
+
issue = subparsers.add_parser(
|
|
30
|
+
"issue",
|
|
31
|
+
help="Issue operations.",
|
|
32
|
+
description="Issues are plannable problem records that can block releases and link to affected features, claims, tests, evidence, and risks.",
|
|
33
|
+
)
|
|
30
34
|
issue_sub = issue.add_subparsers(dest="issue_command", required=True)
|
|
31
35
|
|
|
32
36
|
create = issue_sub.add_parser("create", help="Create an issue.")
|
|
@@ -39,7 +39,7 @@ def _default_prog() -> str:
|
|
|
39
39
|
def build_parser(*, prog: str | None = None) -> argparse.ArgumentParser:
|
|
40
40
|
parser = argparse.ArgumentParser(
|
|
41
41
|
prog=prog or _default_prog(),
|
|
42
|
-
description="Portable single-source-of-truth registry for features, tests, claims, evidence, issues, risks, boundaries, and
|
|
42
|
+
description="Portable single-source-of-truth registry for features, profiles, tests, claims, evidence, issues, risks, boundaries, releases, ADRs, and SPECs.",
|
|
43
43
|
)
|
|
44
44
|
parser.add_argument("--output-format", default="json", choices=OUTPUT_FORMATS, help="CLI output format.")
|
|
45
45
|
parser.add_argument("--output-file", default=None, help="Optional file to write the rendered command output.")
|
|
@@ -21,7 +21,11 @@ _LINK_MAPPING = {
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def register_profile(subparsers: argparse._SubParsersAction) -> None:
|
|
24
|
-
profile = subparsers.add_parser(
|
|
24
|
+
profile = subparsers.add_parser(
|
|
25
|
+
"profile",
|
|
26
|
+
help="Profile operations.",
|
|
27
|
+
description="Profiles are reusable bundles of features and nested profiles used for capability, certification, deployment, or interoperability scopes.",
|
|
28
|
+
)
|
|
25
29
|
profile_sub = profile.add_subparsers(dest="profile_command", required=True)
|
|
26
30
|
|
|
27
31
|
create = profile_sub.add_parser("create", help="Create a profile.")
|
|
@@ -21,7 +21,11 @@ from ssot_cli.common import add_path_argument, compact_dict
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def register_release(subparsers: argparse._SubParsersAction) -> None:
|
|
24
|
-
release = subparsers.add_parser(
|
|
24
|
+
release = subparsers.add_parser(
|
|
25
|
+
"release",
|
|
26
|
+
help="Release operations.",
|
|
27
|
+
description="Releases are publication units tied to a boundary and the claims and evidence required for certification, promotion, and publication.",
|
|
28
|
+
)
|
|
25
29
|
release_sub = release.add_subparsers(dest="release_command", required=True)
|
|
26
30
|
|
|
27
31
|
create = release_sub.add_parser("create", help="Create a release.")
|
|
@@ -25,7 +25,11 @@ _LINK_MAPPING = {
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def register_risk(subparsers: argparse._SubParsersAction) -> None:
|
|
28
|
-
risk = subparsers.add_parser(
|
|
28
|
+
risk = subparsers.add_parser(
|
|
29
|
+
"risk",
|
|
30
|
+
help="Risk operations.",
|
|
31
|
+
description="Risks capture active or accepted exposure tied to related features, claims, tests, evidence, and issues.",
|
|
32
|
+
)
|
|
29
33
|
risk_sub = risk.add_subparsers(dest="risk_command", required=True)
|
|
30
34
|
|
|
31
35
|
create = risk_sub.add_parser("create", help="Create a risk.")
|
|
@@ -18,7 +18,11 @@ from ssot_cli.common import add_path_argument, compact_dict
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def register_spec(subparsers: argparse._SubParsersAction) -> None:
|
|
21
|
-
spec = subparsers.add_parser(
|
|
21
|
+
spec = subparsers.add_parser(
|
|
22
|
+
"spec",
|
|
23
|
+
help="Spec operations.",
|
|
24
|
+
description="SPEC documents define normative or operational contract that repositories are expected to satisfy.",
|
|
25
|
+
)
|
|
22
26
|
spec_sub = spec.add_subparsers(dest="spec_command", required=True)
|
|
23
27
|
|
|
24
28
|
create = spec_sub.add_parser("create", help="Create a spec.")
|
|
@@ -14,7 +14,11 @@ _LINK_MAPPING = {
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def register_test(subparsers: argparse._SubParsersAction) -> None:
|
|
17
|
-
test = subparsers.add_parser(
|
|
17
|
+
test = subparsers.add_parser(
|
|
18
|
+
"test",
|
|
19
|
+
help="Test operations.",
|
|
20
|
+
description="Tests are executable or planned verification rows linked to features, claims, and evidence.",
|
|
21
|
+
)
|
|
18
22
|
test_sub = test.add_subparsers(dest="test_command", required=True)
|
|
19
23
|
|
|
20
24
|
create = test_sub.add_parser("create", help="Create a test.")
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssot-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Primary CLI distribution for ssot-registry.
|
|
5
5
|
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/groupsum/ssot-registry
|
|
8
|
-
Project-URL: Repository, https://github.com/groupsum/ssot-registry
|
|
7
|
+
Project-URL: Homepage, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
|
|
8
|
+
Project-URL: Repository, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
|
|
9
9
|
Project-URL: Issues, https://github.com/groupsum/ssot-registry/issues
|
|
10
|
-
Keywords: ssot,cli,registry
|
|
10
|
+
Keywords: ssot,cli,registry,governance,release-management,validation,developer-tools
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
14
15
|
Classifier: Operating System :: OS Independent
|
|
15
16
|
Classifier: Programming Language :: Python :: 3
|
|
16
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -18,11 +19,13 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
18
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
24
|
Classifier: Topic :: Utilities
|
|
22
25
|
Requires-Python: <3.14,>=3.10
|
|
23
26
|
Description-Content-Type: text/markdown
|
|
24
|
-
Requires-Dist: ssot-contracts<0.3.0,>=0.2.
|
|
25
|
-
Requires-Dist: ssot-
|
|
27
|
+
Requires-Dist: ssot-contracts<0.3.0,>=0.2.8
|
|
28
|
+
Requires-Dist: ssot-core<0.3.0,>=0.2.8
|
|
26
29
|
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
27
30
|
|
|
28
31
|
<div align="center">
|
|
@@ -39,7 +42,7 @@ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
|
39
42
|
|
|
40
43
|
`ssot-cli` is the primary command-line distribution for SSOT.
|
|
41
44
|
|
|
42
|
-
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in
|
|
45
|
+
It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/) and shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/).
|
|
43
46
|
|
|
44
47
|
- GitHub: https://github.com/groupsum/ssot-registry
|
|
45
48
|
|
|
@@ -61,7 +64,7 @@ For local development:
|
|
|
61
64
|
python -m pip install -e pkgs/ssot-cli
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
This package depends on
|
|
67
|
+
This package depends on [ssot-core](https://pypi.org/project/ssot-core/) and [ssot-contracts](https://pypi.org/project/ssot-contracts/), so installing it gives you the full CLI runtime stack.
|
|
65
68
|
|
|
66
69
|
## Executable names
|
|
67
70
|
|
|
@@ -99,13 +102,11 @@ ssot registry --help
|
|
|
99
102
|
|
|
100
103
|
Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
|
|
101
104
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-

|
|
105
|
+

|
|
105
106
|
|
|
106
107
|
Boundary command help:
|
|
107
108
|
|
|
108
|
-

|
|
109
110
|
|
|
110
111
|
## CLI conventions
|
|
111
112
|
|
|
@@ -822,7 +823,7 @@ ssot release certify . --release-id rel:0.1.0 --write-report
|
|
|
822
823
|
## Package relationships
|
|
823
824
|
|
|
824
825
|
- Package type: CLI distribution
|
|
825
|
-
- Depends on:
|
|
826
|
-
- Related packages:
|
|
826
|
+
- Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-contracts](https://pypi.org/project/ssot-contracts/)
|
|
827
|
+
- Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
827
828
|
|
|
828
829
|
If you need the command-line interface, this is the package to install.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|