aiwg 2026.8.26 → 2026.8.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/agentic/code/extensions/dev/ADDON.yaml +3 -0
  2. package/agentic/code/extensions/dev/schemas/dev-artifacts.schema.json +26 -0
  3. package/agentic/code/extensions/dev/templates/build-playbook.yaml +2 -2
  4. package/agentic/code/extensions/it/ADDON.yaml +7 -0
  5. package/agentic/code/extensions/it/rules/it-asset-authority.md +5 -1
  6. package/agentic/code/extensions/it/schemas/it-asset.schema.json +93 -0
  7. package/agentic/code/extensions/it/schemas/it-network-state.schema.json +108 -0
  8. package/agentic/code/extensions/it/schemas/it-service.schema.json +103 -0
  9. package/agentic/code/extensions/it/skills/it-asset-sync.md +4 -0
  10. package/agentic/code/extensions/it/skills/it-dr-test.md +5 -1
  11. package/agentic/code/extensions/it/skills/it-identity-audit.md +4 -0
  12. package/agentic/code/extensions/it/skills/it-network-state.md +4 -0
  13. package/agentic/code/extensions/it/templates/asset-record.yaml +22 -2
  14. package/agentic/code/extensions/it/templates/network-state.yaml +23 -2
  15. package/agentic/code/extensions/it/templates/provisioning-playbook.yaml +85 -61
  16. package/agentic/code/extensions/it/templates/service-record.yaml +22 -2
  17. package/agentic/code/extensions/net/ADDON.yaml +7 -0
  18. package/agentic/code/extensions/net/schemas/net-artifacts.schema.json +26 -0
  19. package/agentic/code/extensions/net/templates/dns-zone-record.yaml +2 -2
  20. package/agentic/code/extensions/net/templates/network-state.yaml +2 -2
  21. package/agentic/code/extensions/net/templates/tunnel-config.yaml +2 -2
  22. package/agentic/code/extensions/repo-maintainer/templates/repo-maintenance-decision.yaml +1 -1
  23. package/agentic/code/extensions/sec/ADDON.yaml +5 -0
  24. package/agentic/code/extensions/sec/schemas/sec-artifacts.schema.json +26 -0
  25. package/agentic/code/extensions/sec/templates/cert-lifecycle-record.yaml +2 -2
  26. package/agentic/code/extensions/sec/templates/pki-hierarchy.yaml +2 -2
  27. package/agentic/code/extensions/stream/ADDON.yaml +5 -0
  28. package/agentic/code/extensions/stream/schemas/stream-artifacts.schema.json +26 -0
  29. package/agentic/code/extensions/stream/templates/encoder-config.yaml +2 -2
  30. package/agentic/code/extensions/stream/templates/stream-pipeline.yaml +2 -2
  31. package/agentic/code/extensions/sys/ADDON.yaml +5 -0
  32. package/agentic/code/extensions/sys/schemas/sys-artifacts.schema.json +26 -0
  33. package/agentic/code/extensions/sys/templates/fleet-inventory.yaml +2 -2
  34. package/agentic/code/extensions/sys/templates/host-profile.yaml +2 -2
  35. package/agentic/code/frameworks/ops-complete/README.md +8 -0
  36. package/agentic/code/frameworks/ops-complete/agents/ops-runbook-executor.md +5 -3
  37. package/agentic/code/frameworks/ops-complete/docs/extensions-guide.md +37 -0
  38. package/agentic/code/frameworks/ops-complete/docs/overview.md +12 -0
  39. package/agentic/code/frameworks/ops-complete/docs/quickstart.md +31 -31
  40. package/agentic/code/frameworks/ops-complete/rules/RULES-INDEX.md +11 -7
  41. package/agentic/code/frameworks/ops-complete/rules/ops-cross-repo.md +13 -0
  42. package/agentic/code/frameworks/ops-complete/rules/ops-documentation.md +8 -1
  43. package/agentic/code/frameworks/ops-complete/rules/ops-information-governance.md +69 -0
  44. package/agentic/code/frameworks/ops-complete/rules/ops-issue-tracking.md +7 -0
  45. package/agentic/code/frameworks/ops-complete/rules/ops-safety.md +7 -0
  46. package/agentic/code/frameworks/ops-complete/schemas/metalanguage/ops-playbook.schema.json +54 -2
  47. package/agentic/code/frameworks/ops-complete/skills/ops-audit-trail.md +10 -6
  48. package/agentic/code/frameworks/ops-complete/templates/governance-policy.yaml +42 -0
  49. package/agentic/code/frameworks/sdlc-complete/skills/address-issues/SKILL.md +18 -3
  50. package/agentic/code/frameworks/sdlc-complete/skills/address-issues/scripts/cycle-comment.mjs +116 -0
  51. package/agentic/code/frameworks/sdlc-complete/skills/issue-comment/SKILL.md +6 -0
  52. package/agentic/code/frameworks/sdlc-complete/skills/issue-driven-al/SKILL.md +25 -5
  53. package/agentic/code/frameworks/sdlc-complete/templates/issue-comments/README.md +10 -0
  54. package/agentic/code/frameworks/sdlc-complete/templates/issue-comments/al-cycle.md +19 -0
  55. package/agentic/code/plugins/agent-loop/.claude-plugin/plugin.json +1 -1
  56. package/agentic/code/plugins/agent-persistence/.claude-plugin/plugin.json +1 -1
  57. package/agentic/code/plugins/agentic-installer/.claude-plugin/plugin.json +1 -1
  58. package/agentic/code/plugins/aiwg-dev/.claude-plugin/plugin.json +1 -1
  59. package/agentic/code/plugins/aiwg-evals/.claude-plugin/plugin.json +1 -1
  60. package/agentic/code/plugins/auto-memory/.claude-plugin/plugin.json +1 -1
  61. package/agentic/code/plugins/browser-control/.claude-plugin/plugin.json +1 -1
  62. package/agentic/code/plugins/codex-sdlc/skills/address-issues/SKILL.md +18 -3
  63. package/agentic/code/plugins/codex-sdlc/skills/address-issues/scripts/cycle-comment.mjs +116 -0
  64. package/agentic/code/plugins/codex-sdlc/skills/issue-comment/SKILL.md +6 -0
  65. package/agentic/code/plugins/codex-sdlc/skills/issue-driven-al/SKILL.md +25 -5
  66. package/agentic/code/plugins/codex-sdlc/templates/issue-comments/al-cycle.md +19 -0
  67. package/agentic/code/plugins/color-palette/.claude-plugin/plugin.json +1 -1
  68. package/agentic/code/plugins/compound-memory/.claude-plugin/plugin.json +1 -1
  69. package/agentic/code/plugins/context-curator/.claude-plugin/plugin.json +1 -1
  70. package/agentic/code/plugins/daemon/.claude-plugin/plugin.json +1 -1
  71. package/agentic/code/plugins/doc-intelligence/.claude-plugin/plugin.json +1 -1
  72. package/agentic/code/plugins/droid-bridge/.claude-plugin/plugin.json +1 -1
  73. package/agentic/code/plugins/forensics/.claude-plugin/plugin.json +1 -1
  74. package/agentic/code/plugins/guided-implementation/.claude-plugin/plugin.json +1 -1
  75. package/agentic/code/plugins/hooks/.claude-plugin/plugin.json +1 -1
  76. package/agentic/code/plugins/knowledge-base/.claude-plugin/plugin.json +1 -1
  77. package/agentic/code/plugins/line-memory/.claude-plugin/plugin.json +1 -1
  78. package/agentic/code/plugins/llm-wiki/.claude-plugin/plugin.json +1 -1
  79. package/agentic/code/plugins/marketing/.claude-plugin/plugin.json +1 -1
  80. package/agentic/code/plugins/media-curator/.claude-plugin/plugin.json +1 -1
  81. package/agentic/code/plugins/nlp-prod/.claude-plugin/plugin.json +1 -1
  82. package/agentic/code/plugins/ops/.claude-plugin/plugin.json +1 -1
  83. package/agentic/code/plugins/prose-integration/.claude-plugin/plugin.json +1 -1
  84. package/agentic/code/plugins/research/.claude-plugin/plugin.json +1 -1
  85. package/agentic/code/plugins/rlm/.claude-plugin/plugin.json +1 -1
  86. package/agentic/code/plugins/sdlc/.claude-plugin/plugin.json +1 -1
  87. package/agentic/code/plugins/sdlc/skills/address-issues/SKILL.md +18 -3
  88. package/agentic/code/plugins/sdlc/skills/address-issues/scripts/cycle-comment.mjs +116 -0
  89. package/agentic/code/plugins/sdlc/skills/issue-comment/SKILL.md +6 -0
  90. package/agentic/code/plugins/sdlc/skills/issue-driven-al/SKILL.md +25 -5
  91. package/agentic/code/plugins/sdlc/templates/issue-comments/al-cycle.md +19 -0
  92. package/agentic/code/plugins/security-engineering/.claude-plugin/plugin.json +1 -1
  93. package/agentic/code/plugins/semantic-memory/.claude-plugin/plugin.json +1 -1
  94. package/agentic/code/plugins/skill-factory/.claude-plugin/plugin.json +1 -1
  95. package/agentic/code/plugins/star-prompt/.claude-plugin/plugin.json +1 -1
  96. package/agentic/code/plugins/testing-quality/.claude-plugin/plugin.json +1 -1
  97. package/agentic/code/plugins/twelve-factor/.claude-plugin/plugin.json +1 -1
  98. package/agentic/code/plugins/uat-mcp/.claude-plugin/plugin.json +1 -1
  99. package/agentic/code/plugins/utils/.claude-plugin/plugin.json +1 -1
  100. package/agentic/code/plugins/validation-complete/.claude-plugin/plugin.json +1 -1
  101. package/agentic/code/plugins/verbalized-sampling/.claude-plugin/plugin.json +1 -1
  102. package/agentic/code/plugins/voice/.claude-plugin/plugin.json +1 -1
  103. package/agentic/code/plugins/writing/.claude-plugin/plugin.json +1 -1
  104. package/bin/aiwg.mjs +6 -0
  105. package/dist/src/a2a/client.js +4 -1
  106. package/dist/src/a2a/codecs.js +5 -2
  107. package/dist/src/a2a/protocol.js +12 -1
  108. package/dist/src/activity-log/cli.js +4 -1
  109. package/dist/src/api/index.d.ts +1 -0
  110. package/dist/src/api/index.js +1 -0
  111. package/dist/src/artifacts/backends/graphology-backend.js +11 -2
  112. package/dist/src/artifacts/backends/json-backend.js +12 -2
  113. package/dist/src/artifacts/backends/sqlite-backend.js +20 -7
  114. package/dist/src/artifacts/fortemi-core-sync.js +37 -0
  115. package/dist/src/artifacts/graph-backend.js +16 -0
  116. package/dist/src/audit/operator-decision.js +9 -25
  117. package/dist/src/features/catalog.js +3 -2
  118. package/dist/src/governance/boundary.js +354 -0
  119. package/dist/src/governance/classification.js +191 -0
  120. package/dist/src/governance/index.js +5 -0
  121. package/dist/src/governance/redaction.js +324 -0
  122. package/dist/src/governance/retention.js +274 -0
  123. package/dist/src/jobs/executor.js +2 -3
  124. package/dist/src/ops/cli.js +95 -0
  125. package/dist/src/serve/dispatch-router.js +1 -1
  126. package/dist/src/sessions/repository.js +8 -6
  127. package/dist/src/storage/backends/postgres.js +6 -1
  128. package/dist/src/storage/index.js +1 -1
  129. package/dist/src/storage/migration-protocol.js +228 -50
  130. package/dist/src/storage/qualification.js +39 -5
  131. package/docs/blog/2026-8-aiwg-august-2026-report.md +181 -0
  132. package/docs/blog/_manifest.json +1 -0
  133. package/docs/contributing/ci-cd-secrets.md +11 -2
  134. package/docs/extensions/graph-backends.md +16 -14
  135. package/docs/fortemi-core-prebuilt-indices.md +8 -2
  136. package/docs/getting-started/session-history.md +15 -0
  137. package/docs/ops-evidence-governance.md +151 -0
  138. package/docs/releases/v2026.8.27-announcement.md +80 -0
  139. package/docs/releases/v2026.8.28-announcement.md +102 -0
  140. package/docs/sessions/cli.md +16 -3
  141. package/docs/storage/backend-contract.md +2 -2
  142. package/docs/storage/evidence/claims.v1.json +49 -0
  143. package/docs/storage/evidence/postgres-direct-reference-v1.json +105 -0
  144. package/docs/storage/evidence/postgres-postgrest-reference-v1.json +99 -0
  145. package/docs/storage/evidence/sqlite-local-reference-v1.json +77 -0
  146. package/docs/storage/migration-protocol.md +36 -16
  147. package/docs/storage/qualification.md +52 -3
  148. package/package.json +10 -2
  149. package/prebuilt/fortemi-core/framework/aiwg-fortemi-index-v2.json +1 -1
  150. package/prebuilt/fortemi-core/framework/manifest.json +2 -2
  151. package/schemas/mission-protocol/inventory-v1.json +10 -0
  152. package/tools/benchmarks/sqlite-graph.ts +153 -11
  153. package/tools/benchmarks/verify-storage-claims.mjs +230 -0
  154. package/tools/cli/doctor.mjs +8 -3
  155. package/tools/validation/ops-template-conformance.mjs +249 -0
@@ -9,3 +9,6 @@ spec:
9
9
  description: "DevOps — CI/CD pipelines, build automation, fleet-wide tooling"
10
10
  version: "1.0.0"
11
11
  capabilities: auto-discover
12
+ kinds:
13
+ - name: DevBuildPlaybook
14
+ schema: schemas/dev-artifacts.schema.json
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aiwg.io/schemas/ops/dev/v1/dev-artifacts.schema.json",
4
+ "title": "Dev operations extension artifacts",
5
+ "type": "object",
6
+ "required": ["apiVersion", "kind", "metadata", "spec"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "apiVersion": { "const": "dev.ops.aiwg.io/v1" },
10
+ "kind": { "enum": ["DevBuildPlaybook"] },
11
+ "metadata": { "$ref": "#/definitions/metadata" },
12
+ "spec": { "type": "object", "additionalProperties": true }
13
+ },
14
+ "definitions": {
15
+ "metadata": {
16
+ "type": "object",
17
+ "required": ["name"],
18
+ "additionalProperties": false,
19
+ "properties": {
20
+ "name": { "type": "string" },
21
+ "namespace": { "type": "string" },
22
+ "labels": { "type": "object", "additionalProperties": { "type": "string" } }
23
+ }
24
+ }
25
+ }
26
+ }
@@ -1,5 +1,5 @@
1
- apiVersion: ops.aiwg.io/v1
2
- kind: OpsPlaybook
1
+ apiVersion: dev.ops.aiwg.io/v1
2
+ kind: DevBuildPlaybook
3
3
  metadata:
4
4
  name: "{builder-name}-build"
5
5
  labels:
@@ -9,3 +9,10 @@ spec:
9
9
  description: "IT operations — asset management, CMDB, service deployments, disaster recovery"
10
10
  version: "1.0.0"
11
11
  capabilities: auto-discover
12
+ kinds:
13
+ - name: ITAsset
14
+ schema: schemas/it-asset.schema.json
15
+ - name: ITService
16
+ schema: schemas/it-service.schema.json
17
+ - name: ITNetworkState
18
+ schema: schemas/it-network-state.schema.json
@@ -24,7 +24,7 @@ The Configuration Management Database (CMDB) is the authoritative source of trut
24
24
  - Revoke identity provider credentials and certificates
25
25
  - Remove DNS records
26
26
  - Update dependent service documentation
27
- - Archive the asset record (set status to `retired`, do not delete)
27
+ - Archive the minimum durable asset record (set status to `retired`; dispose of expired sensitive fields under its lifecycle policy)
28
28
  - Record decommission date and reason
29
29
 
30
30
  4. **Status transitions must be documented**: Changing an asset's status (active to maintenance, active to retired) requires a change record. Status changes must include a reason and be traceable to an issue.
@@ -33,6 +33,10 @@ The Configuration Management Database (CMDB) is the authoritative source of trut
33
33
 
34
34
  6. **Asset records must be complete**: An asset record missing critical fields (hostname, IP, owner, SLA tier) is considered incomplete. Incomplete records must be flagged for remediation.
35
35
 
36
+ 7. **Authority does not mean indefinite retention**: Preserve the authoritative identity/status/history needed for CMDB traceability, while lifecycle policy may summarize, redact, archive, or dispose of expired sensitive fields and generated reconciliation evidence. A legal/compliance hold pauses disposition explicitly; it does not silently rewrite the policy.
37
+
38
+ 8. **Publication is gated**: Asset records default to `restricted-infrastructure`. Every repository, issue/PR/comment, cross-repo, or export sink must pass the ops information-governance boundary before disclosure.
39
+
36
40
  ## Validation
37
41
 
38
42
  When working with asset records:
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aiwg.io/schemas/ops/it/v1/it-asset.schema.json",
4
+ "title": "ITAsset",
5
+ "type": "object",
6
+ "required": ["apiVersion", "kind", "metadata", "spec"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "apiVersion": { "const": "it.ops.aiwg.io/v1" },
10
+ "kind": { "const": "ITAsset" },
11
+ "metadata": { "$ref": "#/definitions/metadata" },
12
+ "spec": {
13
+ "type": "object",
14
+ "required": ["asset", "owner", "location", "lifecycle", "sla", "network", "tags"],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "asset": { "$ref": "#/definitions/stringMap" },
18
+ "owner": { "type": "string" },
19
+ "location": { "$ref": "#/definitions/stringMap" },
20
+ "lifecycle": {
21
+ "type": "object",
22
+ "required": ["provisioned", "last_maintained", "decommission_date"],
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "provisioned": { "type": "string" },
26
+ "last_maintained": { "type": "string" },
27
+ "decommission_date": { "type": ["string", "null"] }
28
+ }
29
+ },
30
+ "sla": { "$ref": "#/definitions/stringMap" },
31
+ "network": { "$ref": "#/definitions/stringMap" },
32
+ "tags": { "type": "array", "items": { "type": "string" } },
33
+ "notes": { "type": "string" }
34
+ }
35
+ }
36
+ },
37
+ "definitions": {
38
+ "metadata": {
39
+ "type": "object",
40
+ "required": ["name", "governance", "lifecycle"],
41
+ "additionalProperties": false,
42
+ "properties": {
43
+ "name": { "type": "string" },
44
+ "namespace": { "type": "string" },
45
+ "labels": { "type": "object", "additionalProperties": { "type": "string" } },
46
+ "governance": { "$ref": "#/definitions/governance" },
47
+ "lifecycle": { "$ref": "#/definitions/lifecycle" }
48
+ }
49
+ },
50
+ "governance": {
51
+ "type": "object",
52
+ "required": ["classification", "owner", "handling"],
53
+ "additionalProperties": false,
54
+ "properties": {
55
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
56
+ "owner": { "type": "string", "minLength": 1 },
57
+ "handling": {
58
+ "type": "object",
59
+ "required": ["allowedSinks", "crossRepo", "retentionPolicy"],
60
+ "additionalProperties": false,
61
+ "properties": {
62
+ "allowedSinks": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" } },
63
+ "crossRepo": { "enum": ["allow", "approval-required", "deny"] },
64
+ "retentionPolicy": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" }
65
+ }
66
+ }
67
+ }
68
+ },
69
+ "lifecycle": {
70
+ "type": "object",
71
+ "required": ["schemaVersion", "artifactId", "category", "classification", "sinkId", "tier", "createdAt", "policyId", "policyVersion", "dispositionDeadline", "action", "holds"],
72
+ "additionalProperties": false,
73
+ "properties": {
74
+ "schemaVersion": { "const": "ops-evidence-lifecycle.aiwg.io/v1" },
75
+ "artifactId": { "type": "string", "minLength": 1 },
76
+ "category": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
77
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
78
+ "sinkId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
79
+ "tier": { "enum": ["raw", "durable"] },
80
+ "createdAt": { "type": "string" },
81
+ "policyId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
82
+ "policyVersion": { "type": "string" },
83
+ "dispositionDeadline": { "type": ["string", "null"] },
84
+ "action": { "enum": ["retain", "summarize", "redact-fields", "archive", "delete"] },
85
+ "rawCaptureReasonDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
86
+ "dispositionFields": { "type": "array", "items": { "type": "string" } },
87
+ "archiveSink": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
88
+ "holds": { "type": "array", "items": { "type": "object" } }
89
+ }
90
+ },
91
+ "stringMap": { "type": "object", "additionalProperties": { "type": "string" } }
92
+ }
93
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aiwg.io/schemas/ops/it/v1/it-network-state.schema.json",
4
+ "title": "ITNetworkState",
5
+ "type": "object",
6
+ "required": ["apiVersion", "kind", "metadata", "spec"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "apiVersion": { "const": "it.ops.aiwg.io/v1" },
10
+ "kind": { "const": "ITNetworkState" },
11
+ "metadata": { "$ref": "#/definitions/metadata" },
12
+ "spec": {
13
+ "type": "object",
14
+ "required": ["vlans", "dns_zones", "firewall_rules", "switches", "dhcp"],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "vlans": { "type": "array", "items": { "$ref": "#/definitions/stringMap" } },
18
+ "dns_zones": {
19
+ "type": "array",
20
+ "items": {
21
+ "type": "object",
22
+ "required": ["zone", "type", "server", "records"],
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "zone": { "type": "string" },
26
+ "type": { "type": "string" },
27
+ "server": { "type": "string" },
28
+ "records": { "type": "array", "items": { "$ref": "#/definitions/stringMap" } }
29
+ }
30
+ }
31
+ },
32
+ "firewall_rules": { "type": "array", "items": { "$ref": "#/definitions/stringMap" } },
33
+ "switches": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "object",
37
+ "required": ["name", "model", "management_ip", "ports", "uplinks"],
38
+ "additionalProperties": false,
39
+ "properties": {
40
+ "name": { "type": "string" },
41
+ "model": { "type": "string" },
42
+ "management_ip": { "type": "string" },
43
+ "ports": { "type": "string" },
44
+ "uplinks": { "type": "array", "items": { "type": "string" } }
45
+ }
46
+ }
47
+ },
48
+ "dhcp": { "type": "array", "items": { "$ref": "#/definitions/stringMap" } }
49
+ }
50
+ }
51
+ },
52
+ "definitions": {
53
+ "metadata": {
54
+ "type": "object",
55
+ "required": ["name", "governance", "lifecycle"],
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "name": { "type": "string" },
59
+ "namespace": { "type": "string" },
60
+ "labels": { "type": "object", "additionalProperties": { "type": "string" } },
61
+ "governance": { "$ref": "#/definitions/governance" },
62
+ "lifecycle": { "$ref": "#/definitions/lifecycle" }
63
+ }
64
+ },
65
+ "governance": {
66
+ "type": "object",
67
+ "required": ["classification", "owner", "handling"],
68
+ "additionalProperties": false,
69
+ "properties": {
70
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
71
+ "owner": { "type": "string", "minLength": 1 },
72
+ "handling": {
73
+ "type": "object",
74
+ "required": ["allowedSinks", "crossRepo", "retentionPolicy"],
75
+ "additionalProperties": false,
76
+ "properties": {
77
+ "allowedSinks": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" } },
78
+ "crossRepo": { "enum": ["allow", "approval-required", "deny"] },
79
+ "retentionPolicy": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" }
80
+ }
81
+ }
82
+ }
83
+ },
84
+ "lifecycle": {
85
+ "type": "object",
86
+ "required": ["schemaVersion", "artifactId", "category", "classification", "sinkId", "tier", "createdAt", "policyId", "policyVersion", "dispositionDeadline", "action", "holds"],
87
+ "additionalProperties": false,
88
+ "properties": {
89
+ "schemaVersion": { "const": "ops-evidence-lifecycle.aiwg.io/v1" },
90
+ "artifactId": { "type": "string", "minLength": 1 },
91
+ "category": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
92
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
93
+ "sinkId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
94
+ "tier": { "enum": ["raw", "durable"] },
95
+ "createdAt": { "type": "string" },
96
+ "policyId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
97
+ "policyVersion": { "type": "string" },
98
+ "dispositionDeadline": { "type": ["string", "null"] },
99
+ "action": { "enum": ["retain", "summarize", "redact-fields", "archive", "delete"] },
100
+ "rawCaptureReasonDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
101
+ "dispositionFields": { "type": "array", "items": { "type": "string" } },
102
+ "archiveSink": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
103
+ "holds": { "type": "array", "items": { "type": "object" } }
104
+ }
105
+ },
106
+ "stringMap": { "type": "object", "additionalProperties": { "type": "string" } }
107
+ }
108
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aiwg.io/schemas/ops/it/v1/it-service.schema.json",
4
+ "title": "ITService",
5
+ "type": "object",
6
+ "required": ["apiVersion", "kind", "metadata", "spec"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "apiVersion": { "const": "it.ops.aiwg.io/v1" },
10
+ "kind": { "const": "ITService" },
11
+ "metadata": { "$ref": "#/definitions/metadata" },
12
+ "spec": {
13
+ "type": "object",
14
+ "required": ["deployment", "health", "dependencies", "backup", "monitoring", "owner", "sla"],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "deployment": { "$ref": "#/definitions/stringMap" },
18
+ "health": { "$ref": "#/definitions/stringMap" },
19
+ "dependencies": { "type": "array", "items": { "type": "string" } },
20
+ "backup": {
21
+ "type": "object",
22
+ "required": ["enabled", "schedule", "retention", "method", "target"],
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "enabled": { "type": "boolean" },
26
+ "schedule": { "type": "string" },
27
+ "retention": { "type": "string" },
28
+ "method": { "type": "string" },
29
+ "target": { "type": "string" }
30
+ }
31
+ },
32
+ "monitoring": {
33
+ "type": "object",
34
+ "required": ["dashboard", "alerts"],
35
+ "additionalProperties": false,
36
+ "properties": {
37
+ "dashboard": { "type": "string" },
38
+ "alerts": { "type": "array", "items": { "type": "string" } }
39
+ }
40
+ },
41
+ "owner": { "type": "string" },
42
+ "sla": { "$ref": "#/definitions/stringMap" },
43
+ "notes": { "type": "string" }
44
+ }
45
+ }
46
+ },
47
+ "definitions": {
48
+ "metadata": {
49
+ "type": "object",
50
+ "required": ["name", "governance", "lifecycle"],
51
+ "additionalProperties": false,
52
+ "properties": {
53
+ "name": { "type": "string" },
54
+ "namespace": { "type": "string" },
55
+ "labels": { "type": "object", "additionalProperties": { "type": "string" } },
56
+ "governance": { "$ref": "#/definitions/governance" },
57
+ "lifecycle": { "$ref": "#/definitions/lifecycle" }
58
+ }
59
+ },
60
+ "governance": {
61
+ "type": "object",
62
+ "required": ["classification", "owner", "handling"],
63
+ "additionalProperties": false,
64
+ "properties": {
65
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
66
+ "owner": { "type": "string", "minLength": 1 },
67
+ "handling": {
68
+ "type": "object",
69
+ "required": ["allowedSinks", "crossRepo", "retentionPolicy"],
70
+ "additionalProperties": false,
71
+ "properties": {
72
+ "allowedSinks": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" } },
73
+ "crossRepo": { "enum": ["allow", "approval-required", "deny"] },
74
+ "retentionPolicy": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" }
75
+ }
76
+ }
77
+ }
78
+ },
79
+ "lifecycle": {
80
+ "type": "object",
81
+ "required": ["schemaVersion", "artifactId", "category", "classification", "sinkId", "tier", "createdAt", "policyId", "policyVersion", "dispositionDeadline", "action", "holds"],
82
+ "additionalProperties": false,
83
+ "properties": {
84
+ "schemaVersion": { "const": "ops-evidence-lifecycle.aiwg.io/v1" },
85
+ "artifactId": { "type": "string", "minLength": 1 },
86
+ "category": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
87
+ "classification": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
88
+ "sinkId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
89
+ "tier": { "enum": ["raw", "durable"] },
90
+ "createdAt": { "type": "string" },
91
+ "policyId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
92
+ "policyVersion": { "type": "string" },
93
+ "dispositionDeadline": { "type": ["string", "null"] },
94
+ "action": { "enum": ["retain", "summarize", "redact-fields", "archive", "delete"] },
95
+ "rawCaptureReasonDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
96
+ "dispositionFields": { "type": "array", "items": { "type": "string" } },
97
+ "archiveSink": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
98
+ "holds": { "type": "array", "items": { "type": "object" } }
99
+ }
100
+ },
101
+ "stringMap": { "type": "object", "additionalProperties": { "type": "string" } }
102
+ }
103
+ }
@@ -94,3 +94,7 @@ Produce a reconciliation report with:
94
94
  - Drift summary (matched, drifted, missing, unreachable counts)
95
95
  - Per-asset remediation recommendations
96
96
  - List of unregistered hosts requiring CMDB enrollment
97
+
98
+ ## Governance Boundary
99
+
100
+ Classify live and reconciled asset data as `restricted-infrastructure`. Keep raw discovery output in the short-lived raw tier only when an explicit reason is recorded; the durable reconciliation report defaults to counts, field names, status, bounded redacted excerpts, and record fingerprints. Before writing the CMDB report or posting a discrepancy to an issue, invoke `aiwg ops evidence prepare`. Public/immutable trackers receive only a sanitized summary, never hostnames, addresses, serials, owners, or backup paths.
@@ -24,7 +24,7 @@ Execute a disaster recovery runbook in a controlled test environment to validate
24
24
  Walk through each step of the DR runbook in the test environment:
25
25
 
26
26
  - Execute each command as documented
27
- - Record actual output vs. expected output for each step
27
+ - Record status plus bounded redacted excerpts/digests against expected output for each step
28
28
  - Note any steps that require modification
29
29
  - Time each major phase
30
30
 
@@ -78,3 +78,7 @@ Produce a test report:
78
78
  - Updated DR runbook (if corrections needed)
79
79
  - Updated test history
80
80
  - Issue tickets for unresolved problems
81
+
82
+ ## Governance Boundary
83
+
84
+ DR artifacts default to `restricted-infrastructure` with the `dr-evidence` retention category. Recovery commands, backup destinations, topology, timings, and raw validation output must pass through `aiwg ops evidence prepare` before persistence. Full raw capture requires an explicit reason and short TTL. Durable reports preserve outcome, RTO/RPO status, bounded redacted excerpts, and digests. Immutable issue sinks receive only a prepared sanitized summary that does not depend on later deletion.
@@ -110,3 +110,7 @@ Produce a consolidated identity audit report with:
110
110
  - Certificate expiry timeline
111
111
  - Unused client inventory
112
112
  - Policy drift assessment
113
+
114
+ ## Governance Boundary
115
+
116
+ Identity evidence defaults to `restricted-identity`. Durable output is aggregated by finding/status unless a named user is required for an authorized remediation; raw API responses, bearer headers, named-user lists, redirect URIs, and certificate metadata remain short-lived restricted evidence. Invoke `aiwg ops evidence prepare` before every report write or tracker/publication action. Issue and comment sinks receive only non-expiring sanitized counts unless an explicit destination policy and scoped approval authorize more. Redaction and classification audit records must not reproduce usernames, tokens, URLs, or finding payloads.
@@ -94,3 +94,7 @@ nft add rule inet filter input tcp dport {port} accept
94
94
  - Network state comparison report
95
95
  - Drift summary (count of matches, drifts, missing items)
96
96
  - Optional remediation commands
97
+
98
+ ## Governance Boundary
99
+
100
+ Network collection and comparison artifacts default to `restricted-infrastructure` with the `network-inventory` retention category. Raw firewall, routing, DNS, and interface output is short-lived and requires an explicit capture reason. Durable reports use minimum sufficient drift counts and redacted bounded excerpts. Invoke `aiwg ops evidence prepare` before a report/artifact write, agent response containing collected state, repository commit, export, or issue/PR/comment. Less-trusted destinations receive only the prepared payload-free summary.
@@ -1,10 +1,30 @@
1
- apiVersion: ops.aiwg.io/v1
2
- kind: OpsTarget
1
+ apiVersion: it.ops.aiwg.io/v1
2
+ kind: ITAsset
3
3
  metadata:
4
4
  name: "{asset-id}"
5
5
  labels:
6
6
  type: "{server|workstation|network|storage}"
7
7
  status: "{active|retired|maintenance}"
8
+ governance:
9
+ classification: restricted-infrastructure
10
+ owner: "{platform-operations-team}"
11
+ handling:
12
+ allowedSinks: [private-repository, encrypted-artifact-store]
13
+ crossRepo: approval-required
14
+ retentionPolicy: generic-durable
15
+ lifecycle:
16
+ schemaVersion: ops-evidence-lifecycle.aiwg.io/v1
17
+ artifactId: "{asset-id}"
18
+ category: generic
19
+ classification: restricted-infrastructure
20
+ sinkId: private-repository
21
+ tier: durable
22
+ createdAt: "{ISO-8601-created-at}"
23
+ policyId: generic-durable
24
+ policyVersion: "1"
25
+ dispositionDeadline: "{ISO-8601-disposition-deadline}"
26
+ action: summarize
27
+ holds: []
8
28
  spec:
9
29
  asset:
10
30
  serial_number: "{serial}"
@@ -1,9 +1,30 @@
1
- apiVersion: ops.aiwg.io/v1
2
- kind: OpsInventory
1
+ apiVersion: it.ops.aiwg.io/v1
2
+ kind: ITNetworkState
3
3
  metadata:
4
4
  name: "{network-name}"
5
5
  labels:
6
6
  type: network-state
7
+ governance:
8
+ classification: restricted-infrastructure
9
+ owner: "{network-operations-team}"
10
+ handling:
11
+ allowedSinks: [private-repository, encrypted-artifact-store]
12
+ crossRepo: approval-required
13
+ retentionPolicy: network-inventory-durable
14
+ lifecycle:
15
+ schemaVersion: ops-evidence-lifecycle.aiwg.io/v1
16
+ artifactId: "{network-name}"
17
+ category: network-inventory
18
+ classification: restricted-infrastructure
19
+ sinkId: encrypted-artifact-store
20
+ tier: durable
21
+ createdAt: "{ISO-8601-created-at}"
22
+ policyId: network-inventory-durable
23
+ policyVersion: "1"
24
+ dispositionDeadline: "{ISO-8601-disposition-deadline}"
25
+ action: archive
26
+ archiveSink: encrypted-artifact-store
27
+ holds: []
7
28
  spec:
8
29
  vlans:
9
30
  - id: "{vlan-id}"