Draft the 2026-09-21 spend-envelope budget memo for SECRETS-WP-0009-T03
One unsigned memo, infd-20260921-b01, accepting the Glas Anthropic spend envelope. The approval-create tool now takes an explicit batch, receipt and expected count; defaults keep the 2026-09-14 sitting unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 272244@bnt-lap001 Assistant-Session: c8962fa7-b290-47df-865f-403ddb6c77e9
This commit is contained in:
parent
1bce7c663a
commit
c8c60ebc21
9 changed files with 366 additions and 3 deletions
|
|
@ -19,6 +19,7 @@ from urllib.request import HTTPRedirectHandler, ProxyHandler, Request, build_ope
|
|||
ROOT = Path(__file__).resolve().parents[1]
|
||||
INTENTS = ROOT / "docs" / "batches" / "2026-09-14" / "approval-create-intents.json"
|
||||
RECEIPT = ROOT / "docs" / "evidence" / "2026-09-15-sitting-approval-creates.json"
|
||||
EXPECTED = 7
|
||||
POLICY = "workload-kv-read-informed-decision-sitting-requester-client"
|
||||
KV = "platform/data/workloads/informed-decision/sitting-requester"
|
||||
SIBLING = "platform/data/workloads/secrets-engine/approval-requester"
|
||||
|
|
@ -76,8 +77,8 @@ def existing_receipt_blocks() -> bool:
|
|||
|
||||
def postable_intents(data: dict) -> list[dict]:
|
||||
rows = [row for row in data.get("intents") or [] if row.get("create_client") == CLIENT_ID]
|
||||
if len(rows) != 7:
|
||||
raise ValueError("expected seven postable sitting intents")
|
||||
if len(rows) != EXPECTED:
|
||||
raise ValueError(f"expected {EXPECTED} postable sitting intents")
|
||||
for row in rows:
|
||||
binding = row["binding"]
|
||||
if binding.get("actor") != "informed-decision":
|
||||
|
|
@ -116,7 +117,18 @@ def main() -> int:
|
|||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--dry-run", action="store_true", help="list postable memos; no credentials, no POST")
|
||||
parser.add_argument("--approval-origin", help="approval-engine origin; or INFD_APPROVAL_ORIGIN")
|
||||
parser.add_argument("--sitting", help="batch date directory under docs/batches, e.g. 2026-09-21")
|
||||
parser.add_argument("--receipt", help="receipt file name under docs/evidence; required with --sitting")
|
||||
parser.add_argument("--expect", type=int, help="exact number of postable intents; required with --sitting")
|
||||
args = parser.parse_args()
|
||||
global INTENTS, RECEIPT, EXPECTED
|
||||
if args.sitting:
|
||||
if not args.receipt or not args.expect or "/" in args.sitting or "/" in args.receipt:
|
||||
print("sitting_requires_receipt_and_expect", file=sys.stderr)
|
||||
return 2
|
||||
INTENTS = ROOT / "docs" / "batches" / args.sitting / "approval-create-intents.json"
|
||||
RECEIPT = ROOT / "docs" / "evidence" / args.receipt
|
||||
EXPECTED = args.expect
|
||||
if args.dry_run:
|
||||
print(json.dumps(dry_run(), indent=2, ensure_ascii=False))
|
||||
return 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue