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.
- package/agentic/code/extensions/dev/ADDON.yaml +3 -0
- package/agentic/code/extensions/dev/schemas/dev-artifacts.schema.json +26 -0
- package/agentic/code/extensions/dev/templates/build-playbook.yaml +2 -2
- package/agentic/code/extensions/it/ADDON.yaml +7 -0
- package/agentic/code/extensions/it/rules/it-asset-authority.md +5 -1
- package/agentic/code/extensions/it/schemas/it-asset.schema.json +93 -0
- package/agentic/code/extensions/it/schemas/it-network-state.schema.json +108 -0
- package/agentic/code/extensions/it/schemas/it-service.schema.json +103 -0
- package/agentic/code/extensions/it/skills/it-asset-sync.md +4 -0
- package/agentic/code/extensions/it/skills/it-dr-test.md +5 -1
- package/agentic/code/extensions/it/skills/it-identity-audit.md +4 -0
- package/agentic/code/extensions/it/skills/it-network-state.md +4 -0
- package/agentic/code/extensions/it/templates/asset-record.yaml +22 -2
- package/agentic/code/extensions/it/templates/network-state.yaml +23 -2
- package/agentic/code/extensions/it/templates/provisioning-playbook.yaml +85 -61
- package/agentic/code/extensions/it/templates/service-record.yaml +22 -2
- package/agentic/code/extensions/net/ADDON.yaml +7 -0
- package/agentic/code/extensions/net/schemas/net-artifacts.schema.json +26 -0
- package/agentic/code/extensions/net/templates/dns-zone-record.yaml +2 -2
- package/agentic/code/extensions/net/templates/network-state.yaml +2 -2
- package/agentic/code/extensions/net/templates/tunnel-config.yaml +2 -2
- package/agentic/code/extensions/repo-maintainer/templates/repo-maintenance-decision.yaml +1 -1
- package/agentic/code/extensions/sec/ADDON.yaml +5 -0
- package/agentic/code/extensions/sec/schemas/sec-artifacts.schema.json +26 -0
- package/agentic/code/extensions/sec/templates/cert-lifecycle-record.yaml +2 -2
- package/agentic/code/extensions/sec/templates/pki-hierarchy.yaml +2 -2
- package/agentic/code/extensions/stream/ADDON.yaml +5 -0
- package/agentic/code/extensions/stream/schemas/stream-artifacts.schema.json +26 -0
- package/agentic/code/extensions/stream/templates/encoder-config.yaml +2 -2
- package/agentic/code/extensions/stream/templates/stream-pipeline.yaml +2 -2
- package/agentic/code/extensions/sys/ADDON.yaml +5 -0
- package/agentic/code/extensions/sys/schemas/sys-artifacts.schema.json +26 -0
- package/agentic/code/extensions/sys/templates/fleet-inventory.yaml +2 -2
- package/agentic/code/extensions/sys/templates/host-profile.yaml +2 -2
- package/agentic/code/frameworks/ops-complete/README.md +8 -0
- package/agentic/code/frameworks/ops-complete/agents/ops-runbook-executor.md +5 -3
- package/agentic/code/frameworks/ops-complete/docs/extensions-guide.md +37 -0
- package/agentic/code/frameworks/ops-complete/docs/overview.md +12 -0
- package/agentic/code/frameworks/ops-complete/docs/quickstart.md +31 -31
- package/agentic/code/frameworks/ops-complete/rules/RULES-INDEX.md +11 -7
- package/agentic/code/frameworks/ops-complete/rules/ops-cross-repo.md +13 -0
- package/agentic/code/frameworks/ops-complete/rules/ops-documentation.md +8 -1
- package/agentic/code/frameworks/ops-complete/rules/ops-information-governance.md +69 -0
- package/agentic/code/frameworks/ops-complete/rules/ops-issue-tracking.md +7 -0
- package/agentic/code/frameworks/ops-complete/rules/ops-safety.md +7 -0
- package/agentic/code/frameworks/ops-complete/schemas/metalanguage/ops-playbook.schema.json +54 -2
- package/agentic/code/frameworks/ops-complete/skills/ops-audit-trail.md +10 -6
- package/agentic/code/frameworks/ops-complete/templates/governance-policy.yaml +42 -0
- package/agentic/code/frameworks/sdlc-complete/skills/address-issues/SKILL.md +18 -3
- package/agentic/code/frameworks/sdlc-complete/skills/address-issues/scripts/cycle-comment.mjs +116 -0
- package/agentic/code/frameworks/sdlc-complete/skills/issue-comment/SKILL.md +6 -0
- package/agentic/code/frameworks/sdlc-complete/skills/issue-driven-al/SKILL.md +25 -5
- package/agentic/code/frameworks/sdlc-complete/templates/issue-comments/README.md +10 -0
- package/agentic/code/frameworks/sdlc-complete/templates/issue-comments/al-cycle.md +19 -0
- package/agentic/code/plugins/agent-loop/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/agent-persistence/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/agentic-installer/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/aiwg-dev/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/aiwg-evals/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/auto-memory/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/browser-control/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/codex-sdlc/skills/address-issues/SKILL.md +18 -3
- package/agentic/code/plugins/codex-sdlc/skills/address-issues/scripts/cycle-comment.mjs +116 -0
- package/agentic/code/plugins/codex-sdlc/skills/issue-comment/SKILL.md +6 -0
- package/agentic/code/plugins/codex-sdlc/skills/issue-driven-al/SKILL.md +25 -5
- package/agentic/code/plugins/codex-sdlc/templates/issue-comments/al-cycle.md +19 -0
- package/agentic/code/plugins/color-palette/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/compound-memory/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/context-curator/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/daemon/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/doc-intelligence/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/droid-bridge/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/forensics/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/guided-implementation/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/hooks/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/knowledge-base/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/line-memory/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/llm-wiki/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/marketing/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/media-curator/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/nlp-prod/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/ops/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/prose-integration/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/research/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/rlm/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/sdlc/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/sdlc/skills/address-issues/SKILL.md +18 -3
- package/agentic/code/plugins/sdlc/skills/address-issues/scripts/cycle-comment.mjs +116 -0
- package/agentic/code/plugins/sdlc/skills/issue-comment/SKILL.md +6 -0
- package/agentic/code/plugins/sdlc/skills/issue-driven-al/SKILL.md +25 -5
- package/agentic/code/plugins/sdlc/templates/issue-comments/al-cycle.md +19 -0
- package/agentic/code/plugins/security-engineering/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/semantic-memory/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/skill-factory/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/star-prompt/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/testing-quality/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/twelve-factor/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/uat-mcp/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/utils/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/validation-complete/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/verbalized-sampling/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/voice/.claude-plugin/plugin.json +1 -1
- package/agentic/code/plugins/writing/.claude-plugin/plugin.json +1 -1
- package/bin/aiwg.mjs +6 -0
- package/dist/src/a2a/client.js +4 -1
- package/dist/src/a2a/codecs.js +5 -2
- package/dist/src/a2a/protocol.js +12 -1
- package/dist/src/activity-log/cli.js +4 -1
- package/dist/src/api/index.d.ts +1 -0
- package/dist/src/api/index.js +1 -0
- package/dist/src/artifacts/backends/graphology-backend.js +11 -2
- package/dist/src/artifacts/backends/json-backend.js +12 -2
- package/dist/src/artifacts/backends/sqlite-backend.js +20 -7
- package/dist/src/artifacts/fortemi-core-sync.js +37 -0
- package/dist/src/artifacts/graph-backend.js +16 -0
- package/dist/src/audit/operator-decision.js +9 -25
- package/dist/src/features/catalog.js +3 -2
- package/dist/src/governance/boundary.js +354 -0
- package/dist/src/governance/classification.js +191 -0
- package/dist/src/governance/index.js +5 -0
- package/dist/src/governance/redaction.js +324 -0
- package/dist/src/governance/retention.js +274 -0
- package/dist/src/jobs/executor.js +2 -3
- package/dist/src/ops/cli.js +95 -0
- package/dist/src/serve/dispatch-router.js +1 -1
- package/dist/src/sessions/repository.js +8 -6
- package/dist/src/storage/backends/postgres.js +6 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/migration-protocol.js +228 -50
- package/dist/src/storage/qualification.js +39 -5
- package/docs/blog/2026-8-aiwg-august-2026-report.md +181 -0
- package/docs/blog/_manifest.json +1 -0
- package/docs/contributing/ci-cd-secrets.md +11 -2
- package/docs/extensions/graph-backends.md +16 -14
- package/docs/fortemi-core-prebuilt-indices.md +8 -2
- package/docs/getting-started/session-history.md +15 -0
- package/docs/ops-evidence-governance.md +151 -0
- package/docs/releases/v2026.8.27-announcement.md +80 -0
- package/docs/releases/v2026.8.28-announcement.md +102 -0
- package/docs/sessions/cli.md +16 -3
- package/docs/storage/backend-contract.md +2 -2
- package/docs/storage/evidence/claims.v1.json +49 -0
- package/docs/storage/evidence/postgres-direct-reference-v1.json +105 -0
- package/docs/storage/evidence/postgres-postgrest-reference-v1.json +99 -0
- package/docs/storage/evidence/sqlite-local-reference-v1.json +77 -0
- package/docs/storage/migration-protocol.md +36 -16
- package/docs/storage/qualification.md +52 -3
- package/package.json +10 -2
- package/prebuilt/fortemi-core/framework/aiwg-fortemi-index-v2.json +1 -1
- package/prebuilt/fortemi-core/framework/manifest.json +2 -2
- package/schemas/mission-protocol/inventory-v1.json +10 -0
- package/tools/benchmarks/sqlite-graph.ts +153 -11
- package/tools/benchmarks/verify-storage-claims.mjs +230 -0
- package/tools/cli/doctor.mjs +8 -3
- package/tools/validation/ops-template-conformance.mjs +249 -0
|
@@ -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
|
+
}
|
|
@@ -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
|
|
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
|
|
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:
|
|
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:
|
|
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}"
|