generated from coulomb/repo-seed
feat: resolve accountability ownership reviews
This commit is contained in:
@@ -18,6 +18,7 @@ from .accountability_roots import (
|
||||
DEFAULT_ROOT_MANIFEST_PATH,
|
||||
AccountabilityEvidenceStore,
|
||||
build_identity_projection,
|
||||
build_ownership_review,
|
||||
collect_accountability_root_evidence,
|
||||
load_accountability_root_manifest,
|
||||
)
|
||||
@@ -123,8 +124,22 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
discover_roots.add_argument("--include-remote", action="store_true", help="Allow HTTP reads from configured remote roots.")
|
||||
discover_roots.add_argument("--max-items-per-root", type=int, default=200)
|
||||
discover_roots.add_argument("--identity-projection", action="store_true", help="Print normalized identity candidates instead of raw evidence.")
|
||||
discover_roots.add_argument("--ownership-review", action="store_true", help="Print ownership resolution and review blockers.")
|
||||
discover_roots.add_argument("--store-db", type=Path, default=None, help="Persist evidence and identity candidates in a SQLite store.")
|
||||
|
||||
review_identity = sub.add_parser(
|
||||
"review-identity",
|
||||
help="Persist a review decision for a stable accountability identity candidate.",
|
||||
)
|
||||
review_identity.add_argument("stable_key")
|
||||
review_identity.add_argument("--store-db", type=Path, required=True)
|
||||
review_identity.add_argument("--decision", choices=["accept", "needs_review", "reject"], required=True)
|
||||
review_identity.add_argument("--owner-actor-id", default="")
|
||||
review_identity.add_argument("--fabric-id", default="")
|
||||
review_identity.add_argument("--subfabric-id", default="")
|
||||
review_identity.add_argument("--reviewer", default="operator")
|
||||
review_identity.add_argument("--note", default="")
|
||||
|
||||
registry = sub.add_parser("registry", help="Feed a running Railiance Fabric registry service.")
|
||||
registry_sub = registry.add_subparsers(dest="registry_command", required=True)
|
||||
|
||||
@@ -345,10 +360,26 @@ def main(argv: list[str] | None = None) -> int:
|
||||
max_items_per_root=args.max_items_per_root,
|
||||
)
|
||||
projection = build_identity_projection(payload, manifest)
|
||||
store = AccountabilityEvidenceStore(args.store_db) if args.store_db else None
|
||||
decisions = store.latest_review_decisions() if store else {}
|
||||
ownership_review = build_ownership_review(projection, manifest, review_decisions=decisions)
|
||||
if args.store_db:
|
||||
store = AccountabilityEvidenceStore(args.store_db)
|
||||
store.add_evidence_run(payload, projection)
|
||||
print(json.dumps(projection if args.identity_projection else payload, indent=2, sort_keys=True))
|
||||
output = ownership_review if args.ownership_review else projection if args.identity_projection else payload
|
||||
print(json.dumps(output, indent=2, sort_keys=True))
|
||||
return 0
|
||||
|
||||
if args.command == "review-identity":
|
||||
decision = AccountabilityEvidenceStore(args.store_db).add_review_decision(
|
||||
stable_key=args.stable_key,
|
||||
decision=args.decision,
|
||||
reviewer=args.reviewer,
|
||||
owner_actor_id=args.owner_actor_id,
|
||||
fabric_id=args.fabric_id,
|
||||
subfabric_id=args.subfabric_id,
|
||||
note=args.note,
|
||||
)
|
||||
print(json.dumps(decision, indent=2, sort_keys=True))
|
||||
return 0
|
||||
|
||||
if args.command == "registry":
|
||||
|
||||
Reference in New Issue
Block a user