@amsterdamdatalabs/enact-extensions 0.1.0 → 0.1.1

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 (152) hide show
  1. package/README.md +94 -20
  2. package/dist/index.d.ts +3 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/install.d.ts +89 -0
  7. package/dist/install.d.ts.map +1 -1
  8. package/dist/install.js +219 -18
  9. package/dist/install.js.map +1 -1
  10. package/dist/validate/index.d.ts +21 -0
  11. package/dist/validate/index.d.ts.map +1 -1
  12. package/dist/validate/index.js +77 -0
  13. package/dist/validate/index.js.map +1 -1
  14. package/extensions/cmux/.agents/plugin.json +37 -0
  15. package/extensions/cmux/skills/cmux/SKILL.md +82 -0
  16. package/extensions/cmux/skills/cmux/agents/openai.yaml +4 -0
  17. package/extensions/cmux/skills/cmux/references/handles-and-identify.md +35 -0
  18. package/extensions/cmux/skills/cmux/references/panes-surfaces.md +37 -0
  19. package/extensions/cmux/skills/cmux/references/trigger-flash-and-health.md +23 -0
  20. package/extensions/cmux/skills/cmux/references/windows-workspaces.md +31 -0
  21. package/extensions/cmux/skills/cmux-vm-monitor/SKILL.md +122 -0
  22. package/extensions/cmux/skills/cmux-vm-monitor/agents/openai.yaml +4 -0
  23. package/extensions/cmux/skills/cmux-vm-monitor/references/cmux-commands.md +66 -0
  24. package/extensions/cmux/skills/cmux-vm-monitor/scripts/codex_vm_monitor.sh +45 -0
  25. package/extensions/cmux/skills/cmux-workspace/SKILL.md +93 -0
  26. package/extensions/dev-state/.agents/plugin.json +35 -0
  27. package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +194 -0
  28. package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +4 -0
  29. package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +130 -0
  30. package/extensions/devops/.agents/plugin.json +36 -0
  31. package/extensions/devops/skills/azure-devops-cli/SKILL.md +431 -0
  32. package/extensions/devops/skills/azure-devops-cli/agents/openai.yaml +4 -0
  33. package/extensions/devops/skills/ci-pipeline-strategy/SKILL.md +217 -0
  34. package/extensions/devops/skills/ci-pipeline-strategy/agents/openai.yaml +4 -0
  35. package/{plugins/net-revenue-management/.codex-plugin → extensions/net-revenue-management/.agents}/plugin.json +10 -6
  36. package/extensions/plugin-dev/.agents/plugin.json +42 -0
  37. package/extensions/plugin-dev/.mcp.json +3 -0
  38. package/extensions/plugin-dev/agents/agent-creator.md +199 -0
  39. package/extensions/plugin-dev/agents/plugin-validator.md +91 -0
  40. package/extensions/plugin-dev/agents/skill-reviewer.md +212 -0
  41. package/extensions/plugin-dev/commands/_archive/create-marketplace.md +427 -0
  42. package/extensions/plugin-dev/commands/_archive/plugin-dev-guide.md +12 -0
  43. package/extensions/plugin-dev/commands/create-plugin.md +498 -0
  44. package/extensions/plugin-dev/commands/start.md +81 -0
  45. package/extensions/plugin-dev/hooks/hooks.json +3 -0
  46. package/extensions/plugin-dev/skills/agent-development/SKILL.md +641 -0
  47. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +250 -0
  48. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +461 -0
  49. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +246 -0
  50. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +216 -0
  51. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +226 -0
  52. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +464 -0
  53. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +474 -0
  54. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +176 -0
  55. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +227 -0
  56. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +227 -0
  57. package/extensions/plugin-dev/skills/command-development/SKILL.md +763 -0
  58. package/extensions/plugin-dev/skills/command-development/examples/plugin-commands.md +612 -0
  59. package/extensions/plugin-dev/skills/command-development/examples/simple-commands.md +527 -0
  60. package/extensions/plugin-dev/skills/command-development/references/advanced-workflows.md +762 -0
  61. package/extensions/plugin-dev/skills/command-development/references/documentation-patterns.md +769 -0
  62. package/extensions/plugin-dev/skills/command-development/references/frontmatter-reference.md +508 -0
  63. package/extensions/plugin-dev/skills/command-development/references/interactive-commands.md +966 -0
  64. package/extensions/plugin-dev/skills/command-development/references/marketplace-considerations.md +943 -0
  65. package/extensions/plugin-dev/skills/command-development/references/plugin-features-reference.md +637 -0
  66. package/extensions/plugin-dev/skills/command-development/references/plugin-integration.md +191 -0
  67. package/extensions/plugin-dev/skills/command-development/references/skill-tool.md +447 -0
  68. package/extensions/plugin-dev/skills/command-development/references/testing-strategies.md +723 -0
  69. package/extensions/plugin-dev/skills/command-development/scripts/check-frontmatter.sh +234 -0
  70. package/extensions/plugin-dev/skills/command-development/scripts/validate-command.sh +160 -0
  71. package/extensions/plugin-dev/skills/hook-development/SKILL.md +861 -0
  72. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +55 -0
  73. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +57 -0
  74. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +48 -0
  75. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +871 -0
  76. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +145 -0
  77. package/extensions/plugin-dev/skills/hook-development/references/migration.md +392 -0
  78. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +430 -0
  79. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +181 -0
  80. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +153 -0
  81. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +276 -0
  82. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
  83. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +775 -0
  84. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +20 -0
  85. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +19 -0
  86. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +38 -0
  87. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +26 -0
  88. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +601 -0
  89. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +190 -0
  90. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +572 -0
  91. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +623 -0
  92. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +222 -0
  93. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +705 -0
  94. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +774 -0
  95. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +83 -0
  96. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +611 -0
  97. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +289 -0
  98. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +592 -0
  99. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +233 -0
  100. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +193 -0
  101. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +625 -0
  102. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +116 -0
  103. package/extensions/plugin-dev/skills/skill-development/SKILL.md +564 -0
  104. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +465 -0
  105. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +167 -0
  106. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +111 -0
  107. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +225 -0
  108. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +39 -0
  109. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +379 -0
  110. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +210 -0
  111. package/package.json +8 -11
  112. package/scripts/enact-extensions.mjs +751 -16
  113. package/scripts/hooks/session-start-drift-check.mjs +58 -0
  114. package/scripts/lib/build-index.mjs +50 -0
  115. package/scripts/lib/bundle-hash.mjs +137 -0
  116. package/scripts/lib/hooks.mjs +389 -0
  117. package/scripts/lib/ledger.mjs +162 -0
  118. package/scripts/lib/list-bundles.mjs +70 -0
  119. package/scripts/lib/outdated.mjs +144 -0
  120. package/scripts/lib/provision-mcp.mjs +369 -0
  121. package/scripts/lib/resolve-bundle.mjs +121 -0
  122. package/scripts/lib/run-install.mjs +321 -39
  123. package/scripts/lib/run-uninstall.mjs +220 -0
  124. package/scripts/lib/run-update.mjs +152 -0
  125. package/scripts/lib/run-validate.mjs +12 -18
  126. package/scripts/lib/serve.mjs +454 -0
  127. package/scripts/postinstall.mjs +63 -0
  128. package/scripts/setup-enact-context.sh +2 -2
  129. package/spec/index.json +59 -0
  130. package/web/assets/README.md +111 -0
  131. package/web/assets/logo-full.png +0 -0
  132. package/web/assets/logo-slim.png +0 -0
  133. package/web/assets/tokens/base.css +45 -0
  134. package/web/assets/tokens/colors.css +248 -0
  135. package/web/assets/tokens/effects.css +24 -0
  136. package/web/assets/tokens/fonts.css +8 -0
  137. package/web/assets/tokens/index.css +18 -0
  138. package/web/assets/tokens/spacing.css +50 -0
  139. package/web/index.html +1188 -0
  140. package/.agents/plugins/marketplace.json +0 -20
  141. package/catalog/enact-context.json +0 -9
  142. package/catalog/enact-factory.json +0 -7
  143. package/catalog/enact-operator.json +0 -7
  144. package/catalog/enact-wiki.json +0 -7
  145. package/catalog/net-revenue-management.json +0 -8
  146. package/scripts/rename-supervisor-to-operator.pl +0 -66
  147. package/scripts/sync-manifests.mjs +0 -23
  148. package/scripts/validate-catalog.mjs +0 -37
  149. package/scripts/validate-plugin.mjs +0 -10
  150. /package/{plugins → extensions}/net-revenue-management/.mcp.json +0 -0
  151. /package/{plugins → extensions}/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -0
  152. /package/{plugins → extensions}/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -0
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ WORKSPACE_REF="${CMUX_MONITOR_WORKSPACE:-workspace:1}"
5
+ SURFACE_REF="${CMUX_MONITOR_SURFACE:-surface:2}"
6
+ RELAY_WORKSPACE_REF="${CMUX_MONITOR_RELAY_WORKSPACE:-workspace:1}"
7
+ RELAY_SURFACE_REF="${CMUX_MONITOR_RELAY_SURFACE:-surface:1}"
8
+ LINES="${CMUX_MONITOR_LINES:-180}"
9
+ LOG_FILE="${CMUX_MONITOR_LOG:-/tmp/codex_vm_monitor.log}"
10
+ LOCAL_WAKE_MESSAGE_TEMPLATE="${CMUX_MONITOR_WAKE_MESSAGE:-[VM monitor __TIMESTAMP__] 30-minute check. Use exact cmux commands against __WORKSPACE__/__SURFACE__: 1) cmux capture-pane --workspace __WORKSPACE__ --surface __SURFACE__ --lines 120 2) cmux send --workspace __WORKSPACE__ --surface __SURFACE__ \"Status check from the local monitor. In exactly 8 lines, summarize: current phase, current file or slice, last completed step, last red proof, last green proof, blocker if any, next exact action, and whether OVERNIGHT_MERGE_STATUS.md is updated.\" 3) cmux send-key --workspace __WORKSPACE__ --surface __SURFACE__ Enter 4) cmux capture-pane --workspace __WORKSPACE__ --surface __SURFACE__ --lines 120 Then decide nothing | steer | stop.}"
11
+
12
+ timestamp() {
13
+ date -u +"%Y-%m-%dT%H:%M:%SZ"
14
+ }
15
+
16
+ capture() {
17
+ cmux capture-pane --workspace "$WORKSPACE_REF" --surface "$SURFACE_REF" --lines "$LINES"
18
+ }
19
+
20
+ relay_local() {
21
+ local message="$1"
22
+ cmux send --workspace "$RELAY_WORKSPACE_REF" --surface "$RELAY_SURFACE_REF" "$message"
23
+ cmux send-key --workspace "$RELAY_WORKSPACE_REF" --surface "$RELAY_SURFACE_REF" tab
24
+ }
25
+
26
+ snapshot="$(capture 2>&1 || true)"
27
+
28
+ {
29
+ printf '=== %s ===\n' "$(timestamp)"
30
+ printf 'workspace=%s surface=%s\n' "$WORKSPACE_REF" "$SURFACE_REF"
31
+ printf '%s\n' "$snapshot"
32
+ printf '\n'
33
+ } >> "$LOG_FILE"
34
+
35
+ if grep -q "Error: not_found\\|ERROR: Surface not found" <<<"$snapshot"; then
36
+ printf '[%s] monitor: surface missing\n' "$(timestamp)" >> "$LOG_FILE"
37
+ relay_local "[VM monitor $(timestamp)] surface missing for $WORKSPACE_REF/$SURFACE_REF"
38
+ exit 0
39
+ fi
40
+
41
+ wake_message="${LOCAL_WAKE_MESSAGE_TEMPLATE/__TIMESTAMP__/$(timestamp)}"
42
+ wake_message="${wake_message//__WORKSPACE__/$WORKSPACE_REF}"
43
+ wake_message="${wake_message//__SURFACE__/$SURFACE_REF}"
44
+ printf '[%s] monitor: local wake injected; vm pane captured only\n' "$(timestamp)" >> "$LOG_FILE"
45
+ relay_local "$wake_message"
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: cmux-workspace
3
+ description: This skill should be used when work should stay inside the current cmux workspace and terminal, including workspace-scoped pane or surface inspection, non-disruptive terminal automation, and sibling-surface coordination messages.
4
+ ---
5
+
6
+ # cmux Workspace
7
+ Use this skill when work should stay scoped to the caller's cmux workspace and surface.
8
+
9
+ ## Default Rule
10
+ Scope actions to the current caller workspace unless the user explicitly names another workspace, tab, or window.
11
+
12
+ Start by resolving the live caller context:
13
+ ```bash
14
+ printf 'workspace=%s\nsurface=%s\nsocket=%s\n' \
15
+ "${CMUX_WORKSPACE_ID:-}" \
16
+ "${CMUX_SURFACE_ID:-}" \
17
+ "${CMUX_SOCKET_PATH:-}"
18
+ cmux identify --json
19
+ ```
20
+
21
+ If the env vars are empty, use `cmux identify --json` and be explicit that you are falling back to the currently focused cmux context.
22
+
23
+ ## Non-Disruptive Automation
24
+ Never change visible focus unless the user explicitly asked for it.
25
+
26
+ Do not call these speculatively:
27
+ - `cmux select-workspace`
28
+ - `cmux focus-pane`
29
+ - `cmux focus-panel`
30
+
31
+ Prefer explicit `--workspace` and `--surface` flags for mutating actions.
32
+
33
+ ## Messaging Pattern
34
+ For sibling-surface coordination, the default submission pattern is:
35
+
36
+ ```bash
37
+ cmux send --workspace workspace:N --surface surface:N "<message>"
38
+ cmux send-key --workspace workspace:N --surface surface:N Enter
39
+ cmux capture-pane --workspace workspace:N --surface surface:N --lines 120
40
+ ```
41
+
42
+ Rules:
43
+ - Use `cmux send` plus `cmux send-key Enter` as the default pattern.
44
+ - Always verify delivery with `cmux capture-pane`; do not trust `OK` from `cmux send` alone.
45
+ - If the pane is busy, expect the message to remain queued in the composer. Report that exact state instead of claiming the message was accepted.
46
+ - Only interrupt a busy pane if the user explicitly wants immediate submission.
47
+
48
+ ## Coordination Prefixes
49
+ When you send a coordination message yourself, prefix it so direction is obvious:
50
+
51
+ - `[sidecar -> enact-agent-config]`
52
+ - `[enact-agent-config -> sidecar]`
53
+
54
+ Rules:
55
+ - Prefix only the coordination messages you send or relay.
56
+ - Do not assume the user's own plain-text messages already carry a prefix.
57
+ - Keep coordination updates short and operational: owner, current status, blocker, next step.
58
+
59
+ ## Caller Terminal
60
+ Treat the caller surface as the safest anchor for relative operations:
61
+
62
+ ```bash
63
+ cmux send --surface "${CMUX_SURFACE_ID:-}" "git status"
64
+ cmux send-key --surface "${CMUX_SURFACE_ID:-}" Enter
65
+ ```
66
+
67
+ ## Inspect Workspace State
68
+ Useful inspection commands:
69
+
70
+ ```bash
71
+ cmux identify --json
72
+ cmux list-workspaces --json
73
+ cmux list-panes --workspace "${CMUX_WORKSPACE_ID:-}" --json
74
+ cmux list-pane-surfaces --workspace "${CMUX_WORKSPACE_ID:-}" --json
75
+ cmux capture-pane --workspace "${CMUX_WORKSPACE_ID:-}" --surface "${CMUX_SURFACE_ID:-}" --lines 120
76
+ ```
77
+
78
+ ## Right-Side Helper Policy
79
+ When auxiliary work is needed in the caller workspace:
80
+ - reuse an existing non-caller helper pane if one already exists
81
+ - otherwise create exactly one helper pane to the right
82
+ - avoid creating extra splits when a new surface in the helper pane is enough
83
+
84
+ Example:
85
+ ```bash
86
+ cmux new-pane --workspace "${CMUX_WORKSPACE_ID:-}" --type terminal --direction right --focus false
87
+ ```
88
+
89
+ ## Stop Conditions
90
+ Stop and report instead of guessing when:
91
+ - the target workspace or surface cannot be identified confidently
92
+ - the pane stays busy and the message remains queued
93
+ - a command would require focus-changing behavior the user did not request
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "dev-state",
3
+ "version": "0.1.0",
4
+ "description": "Dev-state lifecycle skills for Enact: graduating development_state plans into durable documentation.",
5
+ "author": {
6
+ "name": "Amsterdam Data Labs"
7
+ },
8
+ "license": "UNLICENSED",
9
+ "keywords": [
10
+ "dev-state",
11
+ "plans",
12
+ "lifecycle",
13
+ "documentation"
14
+ ],
15
+ "targets": [
16
+ "claude",
17
+ "codex",
18
+ "cursor"
19
+ ],
20
+ "skills": "./skills/",
21
+ "interface": {
22
+ "displayName": "Dev State",
23
+ "shortDescription": "Graduate development_state plans into durable docs.",
24
+ "developerName": "Amsterdam Data Labs",
25
+ "category": "Developer Tools",
26
+ "capabilities": [
27
+ "plan graduation",
28
+ "dev-state lifecycle"
29
+ ]
30
+ },
31
+ "factory": {
32
+ "firstParty": true,
33
+ "operatorScope": "global"
34
+ }
35
+ }
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: dev-state-plan-graduation
3
+ description: >-
4
+ Graduates completed work from 07-plans/active/ into durable 02-architecture/
5
+ and 04-contracts/ docs, archives done plans under 07-plans/archive/{component}/,
6
+ updates CHANGELOG.md and DOCS-MAP.md, and uses `ctx_knowledge` to recall prior
7
+ graduation context and record completions. Use when cleaning the development
8
+ pipeline, closing a plan, archiving completed slices, syncing architecture
9
+ docs, or when the user mentions plan migration, docs cleanup, archive, or
10
+ graduation alongside architecture documentation.
11
+ ---
12
+
13
+ # Development state — plan graduation (enact-docs)
14
+
15
+ Keeps **`07-plans/active/`** for **active** work only. Done outcomes
16
+ live in **`02-architecture/`** and **`04-contracts/`** (normative), then land in
17
+ **`07-plans/archive/{component}/`**.
18
+
19
+ ## Directory layout
20
+
21
+ ```
22
+ enact-docs/
23
+ ├── 02-architecture/{component}/ # Normative architecture — authoritative
24
+ ├── 04-contracts/{component}/ # Contracts, target configs — authoritative
25
+ ├── 05-operations/{component}/ # Runbooks, ops guides
26
+ ├── 06-decisions/ # ADRs
27
+ ├── 07-plans/
28
+ │ ├── active/ # Active + proposed plans (status in frontmatter)
29
+ │ └── archive/{component}/ # Historical — not authoritative
30
+ ├── CHANGELOG.md
31
+ ├── DOCS-MAP.md
32
+ └── GLOSSARY.md
33
+ ```
34
+
35
+ Components: `factory`, `memory`, `context`, `runtime`, `watchdog`, `gateway`,
36
+ `mission-control`, `proc-tap`, `omx`.
37
+
38
+ ## When to apply
39
+
40
+ - A plan in `07-plans/active/` is fully implemented and tests pass.
41
+ - User wants architecture docs updated to reflect shipped behavior.
42
+ - User says "archive", "graduate", "move plan to archive", or "cleanup plans".
43
+ - At the end of a session where multiple slices were shipped.
44
+
45
+ ## Knowledge recall first
46
+
47
+ **Before doing anything**, use `ctx_knowledge` to recall prior context:
48
+
49
+ ```
50
+ ctx_knowledge(action="search", query="plan graduation {component}")
51
+ ctx_knowledge(action="recall", key="graduation:{component}")
52
+ ```
53
+
54
+ If you find prior graduation records, use them to avoid re-processing already-archived plans.
55
+
56
+ **After graduation**, record the completion:
57
+
58
+ ```
59
+ ctx_knowledge(action="remember", key="graduation:{component}:{date}", value="archived:07-plans/archive/{component}/{plan-file};normative:{architecture-doc-path}")
60
+ ctx_knowledge(action="remember", key="graduation:{component}:summary", value="Graduated {N} plans; updated {paths}")
61
+ ```
62
+
63
+ ## Operating principles
64
+
65
+ 1. **Architecture + contracts describe what IS.** Plans describe what was scheduled; after graduation the durable truth is `02-architecture/` + `04-contracts/` + CHANGELOG, not plan files.
66
+ 2. **Archive is not authoritative.** `07-plans/archive/` is historical. Never cite archive paths as spec — always point to `02-architecture/` or `04-contracts/`.
67
+ 3. **No silent loss.** Every moved plan must have a normative doc that captures its durable facts.
68
+ 4. **Architecture-first gate.** A plan cannot leave active until its durable facts are reflected in `02-architecture/{component}/` and/or `04-contracts/{component}/`. If no architecture delta is needed, record an explicit "no architecture delta" rationale in CHANGELOG.
69
+ 5. **Component subfolders.** Always archive under `07-plans/archive/{component}/` — not at the archive root.
70
+
71
+ ## Workflow
72
+
73
+ ### 1) Recall + inventory
74
+
75
+ 1. Run `ctx_knowledge` search/recall for prior graduation context (see above).
76
+ 2. List `07-plans/active/` — read each plan's frontmatter `status` field.
77
+ 3. For each plan assign:
78
+ - **Primary topic** (vocabulary cleanup, scheduler, closure contracts, DB migration, …)
79
+ - **Target normative doc(s)** — prefer extending existing files in `02-architecture/{component}/` or `04-contracts/{component}/`
80
+ - **Disposition**: `archive` | `keep-active` | `update-status-to-deferred`
81
+
82
+ ### 2) Documentation sweep — find every doc that needs updating
83
+
84
+ **Do this before writing a single word.** Never hand-pick files from memory — always search first.
85
+
86
+ #### Step A — ripgrep for all relevant terms
87
+
88
+ Extract the key terms from the plan: API paths, function names, event names, error strings, feature labels, component names. Run one search across the entire doc tree:
89
+
90
+ ```bash
91
+ # From enact-docs root
92
+ rg -l "<term1>|<term2>|<term3>" --type md .
93
+ ```
94
+
95
+ Example for a gateway plan touching `/v1/responses` and streaming:
96
+
97
+ ```bash
98
+ rg -l "/v1/responses|response\.created|chatCompletionStream|OutputTextDelta" --type md .
99
+ ```
100
+
101
+ Collect every matching path into a **candidate list**.
102
+
103
+ #### Step B — follow frontmatter `related:` chains
104
+
105
+ For **every file** in the candidate list, read its `related:` frontmatter and add those paths to the candidate list too. Also follow `related:` from the plan file itself and from any normative doc you already intend to update:
106
+
107
+ ```bash
108
+ # Extract related: entries from a candidate file
109
+ grep -A 20 "^related:" <file> | grep "^\s*-\s" | sed 's/.*- //'
110
+ ```
111
+
112
+ Repeat until no new files are added.
113
+
114
+ #### Step C — read and classify each candidate
115
+
116
+ For each file in the final candidate list:
117
+
118
+ 1. Read the file (or scan it for the key terms)
119
+ 2. Classify each hit:
120
+ - **Stale claim** — says the feature is unavailable, broken, incomplete, or missing → **must update**
121
+ - **Status reference** — links to or describes the plan's status → **update to reflect completion**
122
+ - **Generic usage** — uses the term in English prose without making a feature claim → **skip**
123
+ 3. Build a final **update list** of must-update files
124
+
125
+ #### Step D — confirm plan-linking docs
126
+
127
+ ```bash
128
+ # Find docs that link directly to the plan file by name
129
+ grep -rl "$(basename <plan-file> .md)" . --include="*.md"
130
+ ```
131
+
132
+ Add any hits not already in the update list.
133
+
134
+ Only after completing A–D should you proceed to step 3.
135
+
136
+ ### 3) Merge durable facts
137
+
138
+ - Copy only stable behavior, file paths, contracts — not stale TODOs.
139
+ - Update the relevant architecture/contract doc with the shipped behavior.
140
+ - Where deferred scope exists that could be mistaken for shipped behavior, add a **Watchout** note in the normative doc.
141
+ - Update STATUS comments in `04-contracts/` YAML/MD files from "not yet implemented" to "implemented in {src path}".
142
+ - Update every file on the **update list** from step 2. Record which files were updated.
143
+
144
+ ### 4) Archive
145
+
146
+ - Move completed plans: `git mv 07-plans/active/{plan}.md 07-plans/archive/{component}/{plan}.md`
147
+ - Update the plan's frontmatter: `status: archived`, add `archived_date` and `normative_target:` fields.
148
+ - For partially-completed plans: update `status: partial-complete`, add a note listing done vs pending at the top of the file before archiving.
149
+ - Plans that are active but need more work: update `status` field and leave in active.
150
+
151
+ ### 5) Update index docs
152
+
153
+ - **CHANGELOG.md** — append under `[Unreleased]` with Added/Changed entries listing:
154
+ - Plans archived (with archive path)
155
+ - Normative docs updated (with paths)
156
+ - All other docs updated from the sweep (with paths)
157
+ - **DOCS-MAP.md** — refresh any stale entries that pointed to now-archived plans.
158
+ - **GLOSSARY.md** — update any terms that changed with the vocabulary cleanup.
159
+
160
+ ### 6) Verification
161
+
162
+ - Confirm documentation sweep was completed (candidate list built, all items classified):
163
+ ```bash
164
+ # Re-run the rg sweep and confirm no new hits appeared that you missed
165
+ rg -l "<key terms>" --type md .
166
+ ```
167
+ - Grep for broken links to old active-plan paths:
168
+ ```bash
169
+ grep -r "07-plans/active/{archived-plan-name}" . --include="*.md"
170
+ ```
171
+ - Confirm at least one `02-architecture/` or `04-contracts/` doc changed.
172
+ - Run `ctx_knowledge remember` (see Knowledge recall first section).
173
+
174
+ ## Topic → normative doc mapping (enact-factory)
175
+
176
+ | Topic | First-fit normative doc |
177
+ | -------------------------------------------------------- | -------------------------------------------------------- |
178
+ | Vocabulary / stage names (coder/critic/stage-documenter) | `02-architecture/factory/pair-pipeline-and-workitems.md` |
179
+ | Config schema (projects/path/heartbeatMs) | `04-contracts/factory/config-target-design.yaml` |
180
+ | Operator activation / handoff | `04-contracts/factory/handoff-and-scheduler.md` |
181
+ | Closure contracts / scheduler loop | `02-architecture/factory/pair-pipeline-and-workitems.md` |
182
+ | DB / postgres / sqlite | `05-operations/factory/` |
183
+ | WorkItem state axes | `04-contracts/factory/` |
184
+ | MCP tools | `04-contracts/factory/` |
185
+
186
+ ## Git notes
187
+
188
+ - Use `git mv` for archive moves so history is traceable.
189
+ - Do NOT stage or commit unless the user asks — they handle their own commit workflow.
190
+ - Stage explicit file paths, not `git add .`, to avoid sweeping unrelated changes.
191
+
192
+ ## Reference
193
+
194
+ - Full checklist template and archive layout: [references/reference.md](references/reference.md)
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Plan Graduation"
3
+ short_description: "Graduate completed enact-docs plans into architecture/contracts and archive them cleanly."
4
+ default_prompt: "Use this skill to graduate completed enact-docs plans into durable architecture and contract docs, archive the plans, update changelog/index docs, and record graduation context in ctx_knowledge."
@@ -0,0 +1,130 @@
1
+ # Reference — plan graduation artifacts (enact-docs)
2
+
3
+ ## Archive subfolder layout
4
+
5
+ Always archive under a component subfolder, never at the archive root:
6
+
7
+ ```
8
+ 07-plans/archive/
9
+ ├── factory/ # enact-factory plans
10
+ ├── memory/ # enact-wiki plans
11
+ ├── context/ # enact-context plans
12
+ ├── runtime/ # enact-runtime plans (Governed Execution DAG)
13
+ ├── omx/ # OMX operator plans
14
+ └── cross-repo/ # plans spanning multiple components
15
+ ```
16
+
17
+ ## Plan frontmatter fields
18
+
19
+ ```yaml
20
+ ---
21
+ type: reference
22
+ status: active
23
+ owner: enact-factory
24
+ archived_date: 2026-05-16
25
+ normative_target: 04-contracts/factory/handoff-and-scheduler.md
26
+ ---
27
+ ```
28
+
29
+ Valid `type` values: `plan`, `contract`, `architecture`, `decision`, `reference`
30
+ Valid `status` values: `active`, `proposed`, `partial-complete`, `archived`, `deferred`
31
+
32
+ ## Archive checklist (per plan)
33
+
34
+ Before moving a plan to archive, verify:
35
+
36
+ **Documentation sweep (must complete before any edits):**
37
+
38
+ - [ ] `rg -l` run for all key terms from the plan (API paths, function names, event names, feature labels, error strings)
39
+ - [ ] Candidate list built from all rg hits
40
+ - [ ] Frontmatter `related:` chains followed from every candidate file AND from the plan file itself — new hits added to candidate list
41
+ - [ ] Frontmatter `related:` chains followed transitively until no new files are added
42
+ - [ ] Every candidate file read and classified: stale claim / status reference / generic usage
43
+ - [ ] Plan-linking grep run: `grep -rl "$(basename <plan-file> .md)" . --include="*.md"` — any hits added to update list
44
+ - [ ] All stale-claim and status-reference files updated, paths listed in CHANGELOG entry
45
+
46
+ **Architecture gate:**
47
+
48
+ - [ ] At least one `02-architecture/{component}/` or `04-contracts/{component}/` doc updated with durable facts from this plan
49
+ - [ ] STATUS comments in YAML/MD contracts updated from "SA proposal" / "not yet implemented" → "implemented in src/..."
50
+
51
+ **Index docs:**
52
+
53
+ - [ ] CHANGELOG.md has an entry under `[Unreleased]` with the archive path, normative doc paths, and all sweep-updated doc paths
54
+ - [ ] No broken links to the old `07-plans/active/` path remain (grep check)
55
+ - [ ] `ctx_knowledge` memory entry recorded
56
+
57
+ ## CHANGELOG.md entry shape
58
+
59
+ ```markdown
60
+ ### Changed (documentation)
61
+
62
+ - Archived `07-plans/active/2026-05-16-operator-vocabulary-cleanup.md`
63
+ → `07-plans/archive/factory/2026-05-16-operator-vocabulary-cleanup.md`
64
+ Normative: `02-architecture/factory/pair-pipeline-and-workitems.md`,
65
+ `04-contracts/factory/config-target-design.yaml`
66
+ ```
67
+
68
+ ## `ctx_knowledge` patterns
69
+
70
+ ```
71
+ # Search before starting
72
+ ctx_knowledge(action="search", query="factory plan graduation")
73
+
74
+ # Record after archiving
75
+ ctx_knowledge(action="remember", key="plan:2026-05-16-operator-vocabulary-cleanup:archived_to", value="07-plans/archive/factory/2026-05-16-operator-vocabulary-cleanup.md")
76
+ ctx_knowledge(action="remember", key="plan:2026-05-16-operator-vocabulary-cleanup:normative_target", value="02-architecture/factory/pair-pipeline-and-workitems.md")
77
+
78
+ # Session note
79
+ ctx_knowledge(action="remember", key="session:2026-05-16:graduation-summary", value="graduated 2 factory plans; VC slices 2-5 complete; SA phases A/B/C done")
80
+ ```
81
+
82
+ ## Documentation sweep commands
83
+
84
+ Run all of these **before writing a single word** of documentation updates.
85
+
86
+ ```bash
87
+ # Step A — find every doc that mentions the plan's key terms
88
+ # Replace terms with API paths, function names, event names, feature labels from the plan
89
+ rg -l "<term1>|<term2>|<term3>" --type md .
90
+
91
+ # Example for a gateway plan touching /v1/responses and streaming events:
92
+ rg -l "/v1/responses|response\.created|chatCompletionStream|OutputTextDelta|response\.output_item" --type md .
93
+
94
+ # Step B — for each candidate file, extract its related: frontmatter entries
95
+ # Run this for every file in the candidate list and for the plan file itself
96
+ grep -A 20 "^related:" <candidate-file> | grep "^\s*-\s" | sed 's/.*- //'
97
+
98
+ # Step C — find docs that link directly to the plan file by name
99
+ grep -rl "$(basename <plan-file> .md)" . --include="*.md"
100
+
101
+ # Confirm sweep found architecture/contracts candidates
102
+ echo "Architecture candidates:"; rg -l "<term1>|<term2>" --type md 02-architecture/ 04-contracts/
103
+ ```
104
+
105
+ Repeat Step B until no new files are added. Only then proceed to classify (stale claim / status reference / generic) and edit.
106
+
107
+ ## Grep hygiene
108
+
109
+ ```bash
110
+ # Find broken links to archived plan (run from enact-docs root)
111
+ grep -r "07-plans/active/2026-05-16-operator-vocabulary-cleanup" . --include="*.md"
112
+
113
+ # Confirm architecture/contracts docs were touched
114
+ git diff --name-only | grep -E "^(02-architecture|04-contracts)/.*\.md"
115
+
116
+ # Find STATUS comments still saying "not yet implemented"
117
+ grep -r "not yet implemented\|SA proposal — not yet\|not yet read by" 04-contracts/ --include="*.md" --include="*.yaml"
118
+ ```
119
+
120
+ ## Partial-complete plan note template
121
+
122
+ Add at the top of a partially-done plan before archiving:
123
+
124
+ ```markdown
125
+ <!-- ARCHIVED 2026-05-16
126
+ Done: Slice 1 (vocab cleanup), Slice 2 (MCP renames), Slice 3 (stage keys)
127
+ Pending: D13 (reseed detection — deferred to post live-testing)
128
+ Normative: 02-architecture/factory/pair-pipeline-and-workitems.md
129
+ -->
130
+ ```
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "devops",
3
+ "version": "0.1.0",
4
+ "description": "DevOps skills for Enact: Azure DevOps CLI workflows and CI pipeline strategy for branch, build, and release operations.",
5
+ "author": {
6
+ "name": "Amsterdam Data Labs"
7
+ },
8
+ "license": "UNLICENSED",
9
+ "keywords": [
10
+ "devops",
11
+ "azure-devops",
12
+ "ci",
13
+ "pipeline",
14
+ "release"
15
+ ],
16
+ "targets": [
17
+ "claude",
18
+ "codex",
19
+ "cursor"
20
+ ],
21
+ "skills": "./skills/",
22
+ "interface": {
23
+ "displayName": "DevOps",
24
+ "shortDescription": "Azure DevOps CLI and CI pipeline strategy skills.",
25
+ "developerName": "Amsterdam Data Labs",
26
+ "category": "Developer Tools",
27
+ "capabilities": [
28
+ "azure devops cli",
29
+ "ci pipeline strategy"
30
+ ]
31
+ },
32
+ "factory": {
33
+ "firstParty": true,
34
+ "operatorScope": "global"
35
+ }
36
+ }