2ed2b3ae0f
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---
33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
"""nova onboard — generate an env binding from an onboarding request (REQ-181)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from core.onboarding import generate_env_file
|
|
|
|
|
|
def add_parser(subparsers):
|
|
p = subparsers.add_parser("onboard", help="generate an env binding from a request")
|
|
p.add_argument("--request", default=None, help="inline request JSON")
|
|
p.add_argument("request_file", nargs="?", default=None, help="request JSON path")
|
|
p.add_argument("--out", default=None, help="output path (default: stdout)")
|
|
p.add_argument("--template-env", default="dev")
|
|
p.set_defaults(_run=run)
|
|
|
|
|
|
def run(args) -> int:
|
|
request = _load_request(args)
|
|
env = generate_env_file(request, template_env=args.template_env)
|
|
blob = json.dumps(env, indent=2) + "\n"
|
|
print(blob) if args.out is None else open(args.out, "w").write(blob)
|
|
return 0
|
|
|
|
|
|
def _load_request(args):
|
|
return json.loads(args.request) if args.request else json.loads(open(args.request_file).read())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
print("use: nova onboard <request.json> [--out env.json]", file=sys.stderr) |