KB-187B

O11 automation+agent-sandbox bundle — 04 Approval packet final

6 min read Revision 1
dieu44iu-cutterv0.6o11automation-agent-sandboxapproval-sg1-sg2

O11 Report 04 — Sovereign approval packet, finalized (BRANCH 3)

  • macro: v0.6-o11-automation-agent-sandbox-program-bundle
  • date_utc: 2026-05-21 · host: Contabo vmi3080463 · gate: BRANCH 3
  • result: PASS — SG_1 / SG_2 templates finalized. NO approval is minted or assumed by this macro.

1. Status (re-confirmed this macro)

explicit valid sovereign approval:   NONE FOUND
  - knowledge_documents: no row after the O10 ruling (id 4400) authorising a run
  - /var/lib/cutter/approvals/: EMPTY
  - the strings kb:approval-sovereign-prod-write-1 / kb:approval-u-w4b-grant-1
    appear only as placeholder ids in packages/tests — never a real grant
killswitch flip authorisation:       ABSENT
consequence:                         do NOT run; do NOT flip execution_enabled

2. Two-gate model (from approval.pyvalidate_sovereign_approval)

SG_1_cut_authz        authorises  pre_write_backup .. write_verify
                      effect:     new IUs land in lifecycle_status = 'draft'
                      reversible: YES — soft-revert / compensation (GAP6)
                      TTL:        24h from signed_utc
SG_2_lifecycle_authz  authorises  lifecycle_enact -> 'enacted'
                      effect:     IRREVERSIBLE enactment
                      extra:      requires a review_decision_id line
                      TTL:        12h from signed_utc
recommended first run: SG_1 ONLY. Stop before lifecycle_enact. Do not mint SG_2.

3. SG_1 approval template (sovereign authors AFTER cut() pauses)

The run_id does not exist until the cut(mode=LIVE) call pauses at AWAITING_CUT_AUTHORIZATION. The sovereign reads the printed run_id, then writes this file to /var/lib/cutter/approvals/sg1-<run_id>.md:

# Sovereign approval — SG_1

gate: SG_1_cut_authz
run_id: <the run_id printed by the paused cut() call — copy verbatim>
signed_utc: <fresh ISO-8601 UTC, e.g. 2026-05-21T11:30:00Z — within 24h of use>
allowance: explicit
payload_sha256: <optional — the cutplan payload sha; matched if resume passes it>

scope: First orchestrator-managed production cut to lifecycle_status='draft'
       only. Authorises phases cut_leg_a .. write_verify for THIS run_id.
       Does NOT authorise lifecycle_enact. Does NOT authorise any other run.
target: <document_id or generic docprefix, e.g. "O11-FIX" — the run binds it>
stop_after: AWAITING_LIFECYCLE_AUTHORIZATION  (do not mint SG_2)
authorised_by: <sovereign identity>

Context prose around the required lines is allowed — the validator is loosely-parsed. The five required lines are: gate, run_id, signed_utc, allowance, and (for SG_2 only) review_decision_id.

4. execution_enabled flip — separate sovereign act (GAP7, run-scoped)

what:   edit  cutter_agent/orchestrator/__init__.py:36
        __execution_enabled__ = False   ->   True
who:    the sovereign only — NOT any macro/agent
when:   immediately BEFORE the cut(mode=LIVE) call
scope:  SINGLE-RUN. Flip back to False immediately after the run ends —
        success OR failure. NEVER leave True at rest.
defence-in-depth: execution_enabled() is read fresh at call time AND the
        adapter re-checks via _assert_live_allowed.

This flip is not an approval document — it is a code-constant change the sovereign performs by hand. It and the SG_1 doc are two distinct acts.

5. SG_2 approval template (ONLY if a later run enacts — not the first run)

# Sovereign approval — SG_2

gate: SG_2_lifecycle_authz
run_id: <same run_id>
signed_utc: <fresh ISO-8601 UTC — within 12h of use>
allowance: explicit
review_decision_id: <a fresh cutter_governance.review_decision id for this run>

scope: Authorises lifecycle_enact for THIS run_id — IRREVERSIBLE.
authorised_by: <sovereign identity>

6. Exact command flow (approval-gated points marked)

[operator] env + grants + backup selftest         (R03)
[SOVEREIGN] flip __execution_enabled__ True        <-- B2
[runner]  cut(mode=LIVE) -> runs source_pin..grant_probe
          -> PAUSES at AWAITING_CUT_AUTHORIZATION, prints run_id   (exit 0)
[SOVEREIGN] author /var/lib/cutter/approvals/sg1-<run_id>.md       <-- B1  (§3)
[runner]  resume(run_id, approval_kb_id=…/sg1-<run_id>.md)
          -> cut_leg_a..write_verify
          -> PAUSES at AWAITING_LIFECYCLE_AUTHORIZATION
[OPERATOR] SG_1-only first run: STOP HERE — IUs remain 'draft'
[SOVEREIGN] flip __execution_enabled__ False       <-- mandatory, success or fail
[operator] verification queries (R03 / O9 R06 §7)

7. STOP conditions carried into the approval packet

- backup_runner returns an incomplete envelope     -> StopInvariantFailed, abort
- grant_probe reports any matrix deviation         -> StopGrantDelta, abort
- any fn_iu_create status != 'created'             -> adapter ROLLBACK, abort
- governance/verify writer returns incomplete ids  -> ROLLBACK, abort
- row counts drift from the pre-run snapshot       -> abort, snapshot, escalate
- SG_1 doc stale (>24h) / wrong run_id / missing line -> resume refuses
- ANY unhandled error -> flip execution_enabled False, HOLD, route to GPT

8. No-assumption attestation

approval minted by this macro:        NO
approval assumed by this macro:       NO
execution_enabled flipped:            NO
SG_1 / SG_2 docs are TEMPLATES only:  YES — to be filled by the sovereign
branch_3:                             PASS
Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-o11-automation-agent-sandbox-program-bundle/04-approval-packet-final.md