Files
acdl/nova/publish_outputs.py
T
Jon Chery 2ed2b3ae0f feat(P01): nova subcommands — thin delegates to core/* (CAP-033/034, cli-engineer)
One nova/<name>.py per user-facing core/ module. Each ≤50 lines, ≤3
FunctionDef (add_parser + run [+1 helper]), every user-function call
resolves to a core.* import, no `if` statements except `if __name__`.

Subcommands:
- nova resolve       → core.contract_resolver.resolve
- nova decommission  → core.decommission_transform.decommission_transform
- nova env-transition detect|record → core.env_transition
- nova env-check     → core.environment_check.check
- nova hitl          → core.hitl_gates.attest (+ approver_from_env)
- nova onboard       → core.onboarding.generate_env_file
- nova outbox        → core.outbox_writer.write_event
- nova publish-outputs → core.output_publisher.publish_to_ssm + format_comment
- nova policy        → core.policy_engine.get_engine + get_policy_root (status)
- nova regression    → core.regression_verify.run_regression + write_report
- nova sod           → core.separation_of_duties.check
- nova readiness     → core.submission_readiness.cli_main
- nova attestation-matrix → core.attestation_matrix.cli_main (new thin wrapper)
- nova confidence    → core.confidence_signal.cli_main (new thin wrapper)

core wrappers added (minimal): attestation_matrix.cli_main,
confidence_signal.cli_main — extracted from their __main__ blocks so
the nova subcommands stay thin.

---ci---
project: acdl
phase: 1
milestone: v1.28
status: execute
persona: cli-engineer
---/ci---
2026-08-19 22:25:00 +00:00

28 lines
909 B
Python

"""nova publish-outputs — publish stack outputs to SSM + format a PR comment (REQ-168)."""
from __future__ import annotations
import json
from core.output_publisher import publish_to_ssm, format_comment
def add_parser(subparsers):
p = subparsers.add_parser("publish-outputs", help="publish outputs to SSM + format comment")
p.add_argument("outputs_json", help="path to an outputs JSON file")
p.add_argument("environment")
p.add_argument("contract_id")
p.set_defaults(_run=run)
def run(args) -> int:
with open(args.outputs_json) as fh:
outputs = json.load(fh)
ssm_results = publish_to_ssm(outputs, args.environment, args.contract_id)
print(format_comment(outputs, args.environment, args.contract_id, ssm_results))
return 0
if __name__ == "__main__":
import sys
print("use: nova publish-outputs <outputs.json> <env> <contract-id>", file=sys.stderr)