{
  "schemaVersion": "1.0",
  "updatedAt": "2026-08-05",
  "purpose": "Personal ERP renewal and execution-date rules for humans, AI agents, and SSH workers",
  "autoNextCycle": {
    "enabled": true,
    "trigger": {
      "requiresExplicitRenewalOutcome": "renewed",
      "statusDoneAloneCreatesNothing": true,
      "requiresConfirmedStructuredCycle": true
    },
    "branches": {
      "logic_contract": {
        "action": "source_managed",
        "directCloneInErp": false,
        "description": "Logic Monitor owns the next contract cycle and sends it to ERP through the signed outbox sync."
      },
      "traffic_fixed_7d": {
        "action": "create_exactly_once",
        "requiredSourceKind": "traffic_fixed_7d",
        "requiredCycleDays": 7,
        "nextStart": "currentEnd + 1 day",
        "nextEnd": "nextStart + 6 days"
      },
      "unknown_or_manual": {
        "action": "review_required",
        "inferDates": false
      }
    }
  },
  "weekend": {
    "canonicalFields": [
      "contractEnd",
      "originalDueDate"
    ],
    "executionFields": [
      "dueDate",
      "reminderDate",
      "executionDate"
    ],
    "rule": "If the canonical date is Saturday or Sunday, preserve it and schedule execution on the preceding Friday."
  },
  "unknownValues": {
    "server": "미확정",
    "previousServer": "미확정",
    "nextServer": "미확정",
    "quantity": "미확정",
    "rule": "Keep previousServer and nextServer separate. previousServer is report/memo context only; never copy it into nextServer. Never infer server or quantity."
  },
  "mutationContract": {
    "endpoint": "/api/operations/renewals/complete",
    "method": "POST",
    "authentication": {
      "required": true,
      "acceptedHeaders": [
        "x-erp-token",
        "Authorization: Bearer <ERP token>"
      ],
      "note": "Never put the ERP token in this policy document, logs, task notes, or source control."
    },
    "requiredBody": [
      "taskId",
      "sourceKind",
      "cycleDays",
      "renewalOutcome",
      "currentEnd"
    ],
    "optionalConfirmedBody": [
      "previousServer",
      "nextServer",
      "nextQuantity"
    ],
    "dryRun": "dryRun=true validates and plans without changing ERP, but authentication is still required."
  },
  "machineEndpoints": [
    "/.well-known/erp-operations.json",
    "/ai-operations.txt",
    "/llms.txt"
  ]
}