build: derive coordination receiver from staged owner sources
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a15374-f59f-7a31-86d2-d23b5d2ed181
This commit is contained in:
parent
4c7f32adc7
commit
bde143e030
9 changed files with 284 additions and 22 deletions
|
|
@ -69,7 +69,27 @@ def bind_frame_annotation(text, digest, metadata_prefix):
|
|||
return updated
|
||||
|
||||
|
||||
def compile_bindings(workspace: Path):
|
||||
def receiver_binding(frame, provenance, approval_text):
|
||||
receiver = {
|
||||
"status": "proposed-not-applied",
|
||||
"coordination_frame": provenance,
|
||||
"sender": "approval-engine",
|
||||
"source": "approval-engine",
|
||||
"tenant": "tenant:platform",
|
||||
"may_read": False,
|
||||
"emission_cadence_ref": "approval-engine/cadence.yaml",
|
||||
"emission_cadence_sha256": hashlib.sha256(approval_text.encode()).hexdigest(),
|
||||
"heartbeat_classes": {
|
||||
name: frame.seconds(2) for name in ("issuance", "use", "supersession", "revocation")
|
||||
},
|
||||
"receiver_grace_factor": 1.5,
|
||||
"effective_deadline_seconds": frame.seconds(3),
|
||||
"preserve_existing_credentials_and_other_registry_fields": True,
|
||||
}
|
||||
return json.dumps(receiver, indent=2) + "\n"
|
||||
|
||||
|
||||
def compile_bindings(workspace: Path, *, receiver_only=False):
|
||||
frame = owner_frame(workspace)
|
||||
digest = hashlib.sha256((workspace / FRAME_REF).read_bytes()).hexdigest()
|
||||
provenance = {
|
||||
|
|
@ -97,6 +117,9 @@ def compile_bindings(workspace: Path):
|
|||
ext["effective_deadline_seconds"] = frame.seconds(3)
|
||||
approval["extensions"].setdefault("netkingdom", {})["coordination_frame"] = provenance
|
||||
outputs[approval_path] = json.dumps(approval, indent=2) + "\n"
|
||||
if receiver_only:
|
||||
path = workspace / "net-kingdom/generated/coordination-frame/approval-engine-receiver.json"
|
||||
return frame, {path: receiver_binding(frame, provenance, outputs[approval_path])}
|
||||
|
||||
qonto_path = workspace / "qonto-assistant/specs/audit-emission-cadence.yaml"
|
||||
qonto = yaml.safe_load(qonto_path.read_text())
|
||||
|
|
@ -160,37 +183,20 @@ def compile_bindings(workspace: Path):
|
|||
fixture["extensions"].setdefault("netkingdom", {})["coordination_frame"] = provenance
|
||||
outputs[fixture_path] = json.dumps(fixture, indent=2) + "\n"
|
||||
|
||||
receiver = {
|
||||
"status": "proposed-not-applied",
|
||||
"coordination_frame": provenance,
|
||||
"sender": "approval-engine",
|
||||
"source": "approval-engine",
|
||||
"tenant": "tenant:platform",
|
||||
"may_read": False,
|
||||
"emission_cadence_ref": "approval-engine/cadence.yaml",
|
||||
"emission_cadence_sha256": hashlib.sha256(outputs[approval_path].encode()).hexdigest(),
|
||||
"heartbeat_classes": {
|
||||
name: frame.seconds(2) for name in ("issuance", "use", "supersession", "revocation")
|
||||
},
|
||||
"receiver_grace_factor": 1.5,
|
||||
"effective_deadline_seconds": frame.seconds(3),
|
||||
"preserve_existing_credentials_and_other_registry_fields": True,
|
||||
}
|
||||
outputs[
|
||||
workspace / "net-kingdom/generated/coordination-frame/approval-engine-receiver.json"
|
||||
] = json.dumps(receiver, indent=2) + "\n"
|
||||
outputs[workspace / "net-kingdom/generated/coordination-frame/approval-engine-receiver.json"] = receiver_binding(frame, provenance, outputs[approval_path])
|
||||
return frame, outputs
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--workspace", type=Path, default=ROOT.parent)
|
||||
parser.add_argument("--receiver-only", action="store_true")
|
||||
mode = parser.add_mutually_exclusive_group()
|
||||
mode.add_argument("--check", action="store_true")
|
||||
mode.add_argument("--write", action="store_true")
|
||||
args = parser.parse_args(argv)
|
||||
try:
|
||||
frame, outputs = compile_bindings(args.workspace)
|
||||
frame, outputs = compile_bindings(args.workspace, receiver_only=args.receiver_only)
|
||||
changed = {
|
||||
p: text for p, text in outputs.items() if not p.exists() or p.read_text() != text
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue