@amsterdamdatalabs/enact-extensions 0.1.37 → 0.1.47
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/README.md +67 -108
- package/bundled-extensions.json +6 -0
- package/dist/create/enact.d.ts.map +1 -1
- package/dist/create/enact.js +2 -0
- package/dist/create/enact.js.map +1 -1
- package/dist/create/index.d.ts +3 -0
- package/dist/create/index.d.ts.map +1 -1
- package/dist/create/index.js +6 -0
- package/dist/create/index.js.map +1 -1
- package/dist/create/kimi.d.ts +16 -0
- package/dist/create/kimi.d.ts.map +1 -0
- package/dist/create/kimi.js +87 -0
- package/dist/create/kimi.js.map +1 -0
- package/dist/create/opencode.d.ts +129 -0
- package/dist/create/opencode.d.ts.map +1 -0
- package/dist/create/opencode.js +696 -0
- package/dist/create/opencode.js.map +1 -0
- package/dist/index.d.ts +12 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/internal/agents.d.ts +12 -2
- package/dist/internal/agents.d.ts.map +1 -1
- package/dist/internal/agents.js +119 -3
- package/dist/internal/agents.js.map +1 -1
- package/dist/internal/extensions-table.d.ts +58 -0
- package/dist/internal/extensions-table.d.ts.map +1 -0
- package/dist/internal/extensions-table.js +134 -0
- package/dist/internal/extensions-table.js.map +1 -0
- package/dist/internal/file-ops.d.ts +36 -0
- package/dist/internal/file-ops.d.ts.map +1 -0
- package/dist/internal/file-ops.js +89 -0
- package/dist/internal/file-ops.js.map +1 -0
- package/dist/internal/hooks.d.ts +56 -0
- package/dist/internal/hooks.d.ts.map +1 -0
- package/dist/internal/hooks.js +128 -0
- package/dist/internal/hooks.js.map +1 -0
- package/dist/internal/json-merge.d.ts +63 -0
- package/dist/internal/json-merge.d.ts.map +1 -0
- package/dist/internal/json-merge.js +122 -0
- package/dist/internal/json-merge.js.map +1 -0
- package/dist/internal/lock-ownership.d.ts +41 -0
- package/dist/internal/lock-ownership.d.ts.map +1 -0
- package/dist/internal/lock-ownership.js +24 -0
- package/dist/internal/lock-ownership.js.map +1 -0
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +90 -4
- package/dist/internal/platform.js.map +1 -1
- package/dist/internal/schema.js.map +1 -1
- package/dist/internal/toml-block.d.ts +59 -0
- package/dist/internal/toml-block.d.ts.map +1 -0
- package/dist/internal/toml-block.js +113 -0
- package/dist/internal/toml-block.js.map +1 -0
- package/dist/internal/types.d.ts +2 -1
- package/dist/internal/types.d.ts.map +1 -1
- package/dist/projection.d.ts +47 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +180 -0
- package/dist/projection.js.map +1 -0
- package/dist/validate/index.d.ts +9 -4
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +56 -7
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/kimi.d.ts +3 -0
- package/dist/validate/kimi.d.ts.map +1 -0
- package/dist/validate/kimi.js +11 -0
- package/dist/validate/kimi.js.map +1 -0
- package/dist/validate/opencode.d.ts +3 -0
- package/dist/validate/opencode.d.ts.map +1 -0
- package/dist/validate/opencode.js +11 -0
- package/dist/validate/opencode.js.map +1 -0
- package/dist/validate/run.d.ts +39 -0
- package/dist/validate/run.d.ts.map +1 -0
- package/dist/validate/run.js +63 -0
- package/dist/validate/run.js.map +1 -0
- package/extensions/enact-loop/.agents/plugin.json +12 -8
- package/extensions/enact-loop/scripts/validate.mjs +113 -2
- package/extensions/enact-loop/skills/enact-loop/SKILL.md +36 -466
- package/extensions/enact-loop/skills/enact-loop/references/loop-contract.md +114 -0
- package/extensions/enact-loop/skills/loop-budget/SKILL.md +57 -0
- package/extensions/enact-loop/skills/loop-intake/SKILL.md +59 -0
- package/extensions/enact-repo/.agents/plugin.json +55 -0
- package/extensions/enact-repo/.mcp.json +20 -0
- package/extensions/enact-repo/README.md +90 -0
- package/extensions/enact-repo/hooks/hooks.json +98 -0
- package/extensions/enact-repo/lean-ctx/config.toml +35 -0
- package/extensions/enact-repo/lean-ctx/layout.toml +5 -0
- package/extensions/enact-repo/skills/aca-sandboxes/SKILL.md +53 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/capabilities.md +52 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/install.md +87 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/prerequisites.md +52 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/quickstart.md +164 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/reference-advanced.md +251 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/reference.md +287 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/response-cues.md +71 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/scenarios.md +219 -0
- package/extensions/enact-repo/skills/aca-sandboxes/version.json +4 -0
- package/extensions/enact-repo/skills/backend-remove-deadcode/SKILL.md +96 -0
- package/extensions/enact-repo/skills/cmux-leader/SKILL.md +61 -0
- package/extensions/enact-repo/skills/cmux-send/SKILL.md +61 -0
- package/extensions/enact-repo/skills/code-review/SKILL.md +100 -0
- package/extensions/enact-repo/skills/codebase-design/SKILL.md +98 -0
- package/extensions/enact-repo/skills/codebase-design/references/DEEPENING.md +37 -0
- package/extensions/enact-repo/skills/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
- package/extensions/enact-repo/skills/codebase-design/references/TESTABILITY.md +29 -0
- package/extensions/enact-repo/skills/computer-use/SKILL.md +76 -0
- package/extensions/enact-repo/skills/debug-issue/SKILL.md +40 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/SKILL.md +100 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/extensions/enact-repo/skills/domain-modeling/SKILL.md +86 -0
- package/extensions/enact-repo/skills/domain-modeling/references/ADR-FORMAT.md +47 -0
- package/extensions/enact-repo/skills/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
- package/extensions/enact-repo/skills/explore-codebase/SKILL.md +41 -0
- package/extensions/enact-repo/skills/frontend-design/LICENSE.txt +177 -0
- package/extensions/enact-repo/skills/frontend-design/SKILL.md +56 -0
- package/extensions/enact-repo/skills/grill-me/SKILL.md +20 -0
- package/extensions/enact-repo/skills/grill-with-docs/SKILL.md +20 -0
- package/extensions/enact-repo/skills/handoff/SKILL.md +28 -0
- package/extensions/enact-repo/skills/http-contract-migration/SKILL.md +74 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/compatibility-and-gates.md +26 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/hexagonal-boundary.md +16 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/publication-and-adoption.md +31 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/wire-fidelity-and-dto.md +31 -0
- package/extensions/enact-repo/skills/implement/SKILL.md +28 -0
- package/extensions/enact-repo/skills/improve-codebase-architecture/SKILL.md +80 -0
- package/extensions/enact-repo/skills/improve-codebase-architecture/references/HTML-REPORT.md +123 -0
- package/extensions/enact-repo/skills/interaction-design/SKILL.md +30 -0
- package/extensions/enact-repo/skills/interaction-design/references/Workflow.md +146 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-gsap.md +220 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-native.md +110 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries.md +178 -0
- package/extensions/enact-repo/skills/interaction-design/references/interaction-patterns.md +166 -0
- package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns-advanced.md +285 -0
- package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns.md +254 -0
- package/extensions/enact-repo/skills/interaction-design/references/scroll-animations-reveals.md +213 -0
- package/extensions/enact-repo/skills/interaction-design/references/scroll-animations.md +209 -0
- package/extensions/enact-repo/skills/lean-ctx/SKILL.md +81 -0
- package/extensions/enact-repo/skills/orca-cli/SKILL.md +88 -0
- package/extensions/enact-repo/skills/orchestration/SKILL.md +80 -0
- package/extensions/enact-repo/skills/prototype/SKILL.md +37 -0
- package/extensions/enact-repo/skills/prototype/references/LOGIC.md +79 -0
- package/extensions/enact-repo/skills/prototype/references/UI.md +112 -0
- package/extensions/enact-repo/skills/refactor-safely/SKILL.md +44 -0
- package/extensions/enact-repo/skills/remove-deadcode/SKILL.md +54 -0
- package/extensions/enact-repo/skills/research/SKILL.md +27 -0
- package/extensions/enact-repo/skills/resolving-merge-conflicts/SKILL.md +28 -0
- package/extensions/enact-repo/skills/review-changes/SKILL.md +45 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/SKILL.md +88 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/accent-color.mdx +149 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/adding-custom-styles.mdx +635 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-content.mdx +300 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-items.mdx +241 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-self.mdx +294 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/animation.mdx +286 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/appearance.mdx +180 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/aspect-ratio.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-blur.mdx +109 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-brightness.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-contrast.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-grayscale.mdx +99 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-hue-rotate.mdx +173 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-invert.mdx +99 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-opacity.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-saturate.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-sepia.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter.mdx +113 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backface-visibility.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-attachment.mdx +126 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-blend-mode.mdx +79 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-clip.mdx +85 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-color.mdx +176 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-image.mdx +349 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-origin.mdx +64 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-position.mdx +171 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-repeat.mdx +127 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-size.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/block-size.mdx +190 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-collapse.mdx +181 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-color.mdx +316 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-radius.mdx +347 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-spacing.mdx +117 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-style.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-width.mdx +344 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-decoration-break.mdx +71 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-shadow.mdx +497 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-sizing.mdx +175 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-after.mdx +38 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-before.mdx +38 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-inside.mdx +34 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caption-side.mdx +190 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caret-color.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/clear.mdx +224 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color-scheme.mdx +81 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color.mdx +125 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/colors.mdx +927 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/columns.mdx +310 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/compatibility.mdx +193 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/content.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/cursor.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/dark-mode.mdx +191 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/detecting-classes-in-source-files.mdx +315 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/display.mdx +523 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/editor-setup.mdx +90 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/field-sizing.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/fill.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-blur.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-brightness.mdx +102 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-contrast.mdx +102 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-drop-shadow.mdx +230 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-grayscale.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-hue-rotate.mdx +171 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-invert.mdx +93 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-saturate.mdx +109 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-sepia.mdx +92 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter.mdx +113 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-basis.mdx +144 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-direction.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-grow.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-shrink.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-wrap.mdx +118 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex.mdx +164 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/float.mdx +197 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-family.mdx +119 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-feature-settings.mdx +52 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-size.mdx +184 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-smoothing.mdx +67 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-stretch.mdx +138 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-style.mdx +62 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-variant-numeric.mdx +228 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-weight.mdx +105 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/forced-color-adjust.mdx +152 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/functions-and-directives.mdx +322 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/gap.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-columns.mdx +43 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-flow.mdx +58 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-rows.mdx +43 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-column.mdx +124 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-row.mdx +115 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-columns.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-rows.mdx +108 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/height.mdx +260 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hover-focus-and-other-states.mdx +4935 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hyphens.mdx +112 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/inline-size.mdx +191 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/isolation.mdx +30 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-content.mdx +348 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-items.mdx +286 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-self.mdx +282 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/letter-spacing.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-clamp.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-height.mdx +147 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-image.mdx +80 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-position.mdx +67 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-type.mdx +86 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/margin.mdx +397 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-clip.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-composite.mdx +70 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-image.mdx +933 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-mode.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-origin.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-position.mdx +117 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-repeat.mdx +169 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-size.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-type.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-block-size.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-height.mdx +164 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-inline-size.mdx +185 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-width.mdx +214 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-block-size.mdx +146 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-height.mdx +150 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-inline-size.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-width.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mix-blend-mode.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-fit.mdx +147 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-position.mdx +182 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/opacity.mdx +84 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/order.mdx +94 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-color.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-offset.mdx +72 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-style.mdx +134 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-width.mdx +91 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow-wrap.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow.mdx +665 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overscroll-behavior.mdx +151 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/padding.mdx +232 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective-origin.mdx +127 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective.mdx +137 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-content.mdx +257 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-items.mdx +269 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-self.mdx +257 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/pointer-events.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/position.mdx +399 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/preflight.mdx +291 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/resize.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/responsive-design.mdx +666 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/rotate.mdx +291 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scale.mdx +360 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-behavior.mdx +39 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-margin.mdx +268 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-padding.mdx +255 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-align.mdx +281 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-stop.mdx +198 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-type.mdx +284 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/skew.mdx +352 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke-width.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/styling-with-utility-classes.mdx +1020 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/table-layout.mdx +212 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-align.mdx +162 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-color.mdx +155 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-line.mdx +143 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-style.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-thickness.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-indent.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-overflow.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-shadow.mdx +177 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-transform.mdx +106 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-underline-offset.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-wrap.mdx +144 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/theme.mdx +1142 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/top-right-bottom-left.mdx +296 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/touch-action.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-origin.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-style.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform.mdx +51 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-behavior.mdx +76 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-delay.mdx +76 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-duration.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-property.mdx +137 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-timing-function.mdx +89 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/translate.mdx +487 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/upgrade-guide.mdx +910 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/user-select.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/vertical-align.mdx +194 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/visibility.mdx +287 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/white-space.mdx +211 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/width.mdx +264 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/will-change.mdx +47 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/word-break.mdx +94 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/z-index.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-catalog.md +251 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-index.tsx +237 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-source.txt +6 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/gotchas.md +18 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/scripts/sync_tailwind_docs.py +183 -0
- package/extensions/enact-repo/skills/tdd/SKILL.md +49 -0
- package/extensions/enact-repo/skills/tdd/references/mocking.md +59 -0
- package/extensions/enact-repo/skills/tdd/references/tests.md +77 -0
- package/extensions/enact-repo/skills/teach/SKILL.md +88 -0
- package/extensions/enact-repo/skills/teach/references/GLOSSARY-FORMAT.md +35 -0
- package/extensions/enact-repo/skills/teach/references/LEARNING-RECORD-FORMAT.md +46 -0
- package/extensions/enact-repo/skills/teach/references/MISSION-FORMAT.md +31 -0
- package/extensions/enact-repo/skills/teach/references/PHILOSOPHY.md +65 -0
- package/extensions/enact-repo/skills/teach/references/RESOURCES-FORMAT.md +32 -0
- package/extensions/enact-repo/skills/testing/SKILL.md +54 -0
- package/extensions/enact-repo/skills/to-spec/SKILL.md +85 -0
- package/extensions/enact-repo/skills/to-tickets/SKILL.md +75 -0
- package/extensions/enact-repo/skills/to-tickets/references/TICKET-TEMPLATES.md +39 -0
- package/extensions/enact-repo/skills/triage/SKILL.md +99 -0
- package/extensions/enact-repo/skills/triage/references/AGENT-BRIEF.md +207 -0
- package/extensions/enact-repo/skills/triage/references/NEEDS-INFO-TEMPLATE.md +17 -0
- package/extensions/enact-repo/skills/triage/references/OUT-OF-SCOPE.md +105 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/SKILL.md +32 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/references/Workflow.md +207 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/references/workflow-reference.md +175 -0
- package/extensions/enact-repo/skills/wayfinder/SKILL.md +100 -0
- package/extensions/enact-repo/skills/wayfinder/references/TEMPLATES.md +35 -0
- package/extensions/enact-repo/skills/wayfinder/references/TICKET-TYPES.md +8 -0
- package/extensions/enact-repo/skills/writing-great-skills/SKILL.md +93 -0
- package/extensions/enact-repo/skills/writing-great-skills/references/GLOSSARY.md +201 -0
- package/package.json +18 -14
- package/scripts/enact-extensions.mjs +255 -873
- package/scripts/lib/allowed-plugins.mjs +52 -0
- package/scripts/lib/run-repo-doctor.mjs +571 -0
- package/scripts/lib/run-repo-install.mjs +1579 -0
- package/scripts/lib/run-sync.mjs +1 -1
- package/scripts/lib/run-validate.mjs +23 -37
- package/scripts/lib/skill-validator.mjs +872 -0
- package/spec/enact.json +21 -3
- package/spec/enact.md +13 -12
- package/spec/kimi.json +100 -0
- package/spec/opencode.json +64 -0
- package/dist/install.d.ts +0 -235
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js +0 -697
- package/dist/install.js.map +0 -1
- package/dist/internal/claude.d.ts +0 -65
- package/dist/internal/claude.d.ts.map +0 -1
- package/dist/internal/claude.js +0 -200
- package/dist/internal/claude.js.map +0 -1
- package/dist/internal/codex.d.ts +0 -43
- package/dist/internal/codex.d.ts.map +0 -1
- package/dist/internal/codex.js +0 -211
- package/dist/internal/codex.js.map +0 -1
- package/dist/internal/cursor.d.ts +0 -2
- package/dist/internal/cursor.d.ts.map +0 -1
- package/dist/internal/cursor.js +0 -6
- package/dist/internal/cursor.js.map +0 -1
- package/dist/principles.d.ts +0 -28
- package/dist/principles.d.ts.map +0 -1
- package/dist/principles.js +0 -159
- package/dist/principles.js.map +0 -1
- package/dist/provision.d.ts +0 -30
- package/dist/provision.d.ts.map +0 -1
- package/dist/provision.js +0 -202
- package/dist/provision.js.map +0 -1
- package/extensions/dev-state/.agents/plugin.json +0 -36
- package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +0 -194
- package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +0 -4
- package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +0 -130
- package/extensions/enact-context/.agents/plugin.json +0 -41
- package/extensions/enact-context/.mcp.json +0 -8
- package/extensions/enact-context/README.md +0 -25
- package/extensions/enact-context/assets/icon.png +0 -0
- package/extensions/enact-context/assets/logo.png +0 -0
- package/extensions/enact-context/hooks/hooks.json +0 -115
- package/extensions/enact-context/skills/enact-context/SKILL.md +0 -151
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +0 -69
- package/extensions/enact-core/.agents/plugin.json +0 -40
- package/extensions/enact-core/OPERATING-PRINCIPLES.md +0 -7
- package/extensions/enact-core/hooks/hooks.json +0 -26
- package/extensions/enact-evolve/.agents/plugin.json +0 -47
- package/extensions/enact-evolve/agents/evolve-session-analyst.toml +0 -37
- package/extensions/enact-evolve/assets/icon.png +0 -0
- package/extensions/enact-evolve/assets/logo.png +0 -0
- package/extensions/enact-evolve/skills/mined-investigate-loop/SKILL.md +0 -68
- package/extensions/enact-evolve/skills/session-analysis/SKILL.md +0 -98
- package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +0 -343
- package/extensions/enact-factory/.agents/plugin.json +0 -49
- package/extensions/enact-factory/.mcp.json +0 -8
- package/extensions/enact-factory/agents/architect.toml +0 -34
- package/extensions/enact-factory/agents/code-reviewer.toml +0 -33
- package/extensions/enact-factory/agents/critic.toml +0 -39
- package/extensions/enact-factory/agents/executor.toml +0 -26
- package/extensions/enact-factory/agents/explore.toml +0 -25
- package/extensions/enact-factory/agents/planner.toml +0 -26
- package/extensions/enact-factory/agents/verifier.toml +0 -33
- package/extensions/enact-factory/assets/icon.png +0 -0
- package/extensions/enact-factory/assets/logo.png +0 -0
- package/extensions/enact-factory/skills/advisor/SKILL.md +0 -82
- package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +0 -57
- package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +0 -353
- package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +0 -309
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +0 -60
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +0 -87
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +0 -132
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +0 -53
- package/extensions/enact-factory/skills/cmux-leader/SKILL.md +0 -74
- package/extensions/enact-factory/skills/cmux-send/SKILL.md +0 -50
- package/extensions/enact-factory/skills/committee/SKILL.md +0 -80
- package/extensions/enact-factory/skills/deep-interview/SKILL.md +0 -68
- package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
- package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
- package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
- package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
- package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
- package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
- package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
- package/extensions/enact-factory/skills/research/SKILL.md +0 -83
- package/extensions/enact-factory/skills/review/SKILL.md +0 -67
- package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
- package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
- package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
- package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
- package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
- package/extensions/enact-wiki/.agents/plugin.json +0 -43
- package/extensions/enact-wiki/.mcp.json +0 -15
- package/extensions/enact-wiki/README.md +0 -44
- package/extensions/enact-wiki/assets/icon.png +0 -0
- package/extensions/enact-wiki/assets/logo.png +0 -0
- package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
- package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
- package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
- package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
- package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
- package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
- package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
- package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
- package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
- package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
- package/extensions/net-revenue-management/.agents/plugin.json +0 -40
- package/extensions/net-revenue-management/.mcp.json +0 -9
- package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
- package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
- package/extensions/plugin-dev/.agents/plugin.json +0 -41
- package/extensions/plugin-dev/agents/agent-creator.md +0 -199
- package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
- package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
- package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
- package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
- package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
- package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
- package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
- package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
- package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
- package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
- package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
- package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
- package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
- package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
- package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
- package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
- package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
- package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
- package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
- package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
- package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
- package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
- package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
- package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
- package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
- package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
- package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
- package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
- package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
- package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
- package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
- package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
- package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
- package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
- package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
- package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
- package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
- package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
- package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
- package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
- package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
- package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
- package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
- package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
- package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
- package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
- package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
- package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
- package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
- package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
- package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
- package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
- package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
- package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
- package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
- package/scripts/check-hooks.mjs +0 -174
- package/scripts/check-principles.mjs +0 -116
- package/scripts/hooks/session-start-drift-check.mjs +0 -48
- package/scripts/install.sh +0 -70
- package/scripts/lib/auto-update.mjs +0 -75
- package/scripts/lib/bundle-hash.mjs +0 -137
- package/scripts/lib/hooks.mjs +0 -585
- package/scripts/lib/ledger.mjs +0 -163
- package/scripts/lib/migrate-artifacts.mjs +0 -144
- package/scripts/lib/outdated.mjs +0 -144
- package/scripts/lib/postinstall-offer.mjs +0 -83
- package/scripts/lib/principles.mjs +0 -109
- package/scripts/lib/provision-mcp.mjs +0 -16
- package/scripts/lib/resolve-plugin-root.mjs +0 -9
- package/scripts/lib/run-install.mjs +0 -500
- package/scripts/lib/run-prune.mjs +0 -94
- package/scripts/lib/run-uninstall.mjs +0 -244
- package/scripts/lib/run-update.mjs +0 -152
- package/scripts/lib/serve.mjs +0 -472
- package/scripts/lib/ups-router.mjs +0 -392
- package/scripts/postinstall.mjs +0 -101
- package/scripts/setup-enact-context.sh +0 -28
- package/scripts/version-bump.sh +0 -484
- package/web/assets/README.md +0 -111
- package/web/assets/logo-full.png +0 -0
- package/web/assets/logo-slim.png +0 -0
- package/web/assets/tokens/base.css +0 -45
- package/web/assets/tokens/colors.css +0 -248
- package/web/assets/tokens/effects.css +0 -24
- package/web/assets/tokens/fonts.css +0 -8
- package/web/assets/tokens/index.css +0 -18
- package/web/assets/tokens/spacing.css +0 -50
- package/web/index.html +0 -1188
|
@@ -1,494 +1,64 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: enact-loop
|
|
3
|
-
description:
|
|
3
|
+
description: Declare and drive a generic Stage graph through interactive Executor, mechanical, StageVerifier, and LoopGrader stages.
|
|
4
|
+
disable-model-invocation: false
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
> **Storage is GLOBAL — never write to a repo-local `.enact` dir.** Resolve the project's global dir:
|
|
9
|
-
> 1. `ROOT="$(git rev-parse --show-toplevel)"`
|
|
10
|
-
> 2. In `~/.enact/workspaces.json` → `workspaces`, find the entry whose `.root` == `$ROOT`; its object key is `<name>-<id>` (e.g. `enact-loop-b9762d`).
|
|
11
|
-
> 3. Loop runtime state lives under `~/.enact/loop/projects/<key>/…`.
|
|
7
|
+
# Enact Loop
|
|
12
8
|
|
|
13
9
|
## Purpose
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
stages), the loop drives each stage to closure and refuses to exit until every required stage has
|
|
17
|
-
passed. Mechanical stages are graded by the engine: `loop_grade` runs the stage `command` in the
|
|
18
|
-
loop root and derives pass/fail from exit code (caller-supplied `status`/`evidence` are rejected).
|
|
19
|
-
Judgment stages require an **independent grader** on a different model — the executor must not
|
|
20
|
-
fabricate or self-report judgment verdicts.
|
|
11
|
+
Drive bounded work to a declared contract. The runtime closes a loop only after every required stage passes.
|
|
21
12
|
|
|
22
13
|
## Use When
|
|
23
14
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
A **contract** is the declarative closure spec. Declare it inline or pass a YAML/JSON file.
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
Contract { id, name, stages[] }
|
|
35
|
-
|
|
36
|
-
Stage {
|
|
37
|
-
id: string
|
|
38
|
-
name: string
|
|
39
|
-
type: 'mechanical' | 'judgment'
|
|
40
|
-
required: boolean
|
|
41
|
-
requires?: string[] # stage ids that must pass before this stage runs
|
|
42
|
-
command?: string # mechanical stages only
|
|
43
|
-
grader?: GraderSpec # judgment stages only
|
|
44
|
-
passCriteria?: string
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
GraderSpec {
|
|
48
|
-
role: architect | critic | code-reviewer | verifier # required
|
|
49
|
-
model?: string # e.g. claude-opus-4-8 — always specify; omitting causes E_GRADER_MODEL_UNSET
|
|
50
|
-
harness?: paseo | subagent # default: paseo
|
|
51
|
-
rounds?: integer # max grading rounds before escalation (default: 3)
|
|
52
|
-
timeoutMs?: integer # grader session timeout (default: 30 min); timeout → grader-unavailable blocker
|
|
53
|
-
fallbackModels?: string[] # tried in order on re-dispatch after spawn failure (529/overload)
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Stage Types
|
|
58
|
-
|
|
59
|
-
**Mechanical** stages are engine-run: call `loop_grade({ stageId, timeoutMs? })` and the runtime
|
|
60
|
-
executes the stage `command` in the loop root cwd, capturing exit code and output. Caller-supplied
|
|
61
|
-
`status` or `evidence` are rejected. No independent grader is needed.
|
|
62
|
-
|
|
63
|
-
**Judgment** stages require an independent grader. The executor/driver dispatches via
|
|
64
|
-
`loop_grader_dispatch`, then records the verdict via `loop_grader_verdict` (default:
|
|
65
|
-
`captureSource: "relayed"` — grader returns a verdict envelope; driver records with the minted
|
|
66
|
-
`continuationId`). A grader child session may call `loop_grader_verdict` directly (`captureSource:
|
|
67
|
-
"direct"`) but only with a `continuationId` minted by dispatch — otherwise
|
|
68
|
-
`E_UNKNOWN_GRADER_SESSION`. The engine rejects verdicts where grader identity overlaps executor
|
|
69
|
-
identity.
|
|
70
|
-
|
|
71
|
-
## The Independence Rule
|
|
72
|
-
|
|
73
|
-
Judgment stages must be graded by a **different model** than the executor (model-distinct, not
|
|
74
|
-
vendor/surface-distinct). The loop rejects a verdict whose grader model, session, or agent equals
|
|
75
|
-
the executor's. Graders are dispatched out-of-session via Paseo `--provider <model>` (use
|
|
76
|
-
`--mode auto-review` so on-request approvals don't block; see Verdict capture) for
|
|
77
|
-
cross-surface grading; in-surface graders just need a supported model that differs from the
|
|
78
|
-
executor's.
|
|
15
|
+
- Work needs explicit stages, evidence, and closure.
|
|
16
|
+
- Prompt-driven work needs an interactive Executor Stage with immutable input and pass-only completion evidence.
|
|
17
|
+
- A mechanical Stage must be executed by the engine.
|
|
18
|
+
- A current-plus-predecessor Stage needs StageVerifier review.
|
|
19
|
+
- The complete loop needs LoopGrader judgment.
|
|
20
|
+
- A previous attempt is incomplete, blocked, or unverified.
|
|
79
21
|
|
|
80
|
-
|
|
81
|
-
boulder re-checks at session exit. Violations emit `grader-independence-missing` and block closure.
|
|
22
|
+
## Do Not Use When
|
|
82
23
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
idle → running → verifying → completed (terminal)
|
|
87
|
-
↘ blocked → running | verifying
|
|
88
|
-
↘ paused → running | verifying (Stop ALLOWS exit while paused)
|
|
89
|
-
↘ aborted (terminal)
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
- **idle** — loop declared, not yet started
|
|
93
|
-
- **running** — executor actively working
|
|
94
|
-
- **verifying** — executor running closure checks
|
|
95
|
-
- **completed** — all required stages passed, loop closed
|
|
96
|
-
- **blocked** — waiting on an external dependency (`loop_block` / `loop_advance` to resume)
|
|
97
|
-
- **paused** — deliberate human suspension via `loop_pause`; the Stop boulder ALLOWS exit while
|
|
98
|
-
paused; SessionStart does NOT auto-resume a paused loop; stays paused until `loop_resume` is
|
|
99
|
-
explicitly called
|
|
100
|
-
- **aborted** — cancelled with a reason (terminal)
|
|
101
|
-
|
|
102
|
-
## Routing Rules
|
|
103
|
-
|
|
104
|
-
- ambiguous goal → clarify first, then start the loop with the refined goal
|
|
105
|
-
- goal is clear → start immediately: `loop_start`
|
|
106
|
-
- blocked on external dependency → `loop_block`, resolve, then `loop_advance` back to `running`
|
|
107
|
-
- all required stages passed → `enact-loop summary write`, then `loop_complete` (only from phase=verifying)
|
|
24
|
+
- The request is only for triage or a proposed contract; use `loop-intake`.
|
|
25
|
+
- The request is only to inspect limits or counters; use `loop-budget`.
|
|
26
|
+
- The goal, workspace, acceptance evidence, or authority is too ambiguous to declare a contract.
|
|
108
27
|
|
|
109
28
|
## Workflow
|
|
110
29
|
|
|
111
|
-
1. Read
|
|
112
|
-
2.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
get the right judgment shape by default instead of hand-authoring stages.
|
|
121
|
-
3. Implement the work while in phase `running`.
|
|
122
|
-
4. Advance to verification:
|
|
123
|
-
```
|
|
124
|
-
loop_advance toPhase=verifying
|
|
125
|
-
```
|
|
126
|
-
5. For each **mechanical** stage (respecting `requires` preconditions): `loop_grade({ stageId })`.
|
|
127
|
-
6. For each **judgment** stage: `loop_grader_dispatch({ stageId })` → spawn grader → record via
|
|
128
|
-
`loop_grader_verdict` (`captureSource: "relayed"` from driver, or `"direct"` from grader child).
|
|
129
|
-
7. When all required stages are `passed`: run `enact-loop summary write` (pipe body sections;
|
|
130
|
-
CLI stamps the fingerprint header), then `loop_complete`.
|
|
131
|
-
8. If a stage fails: fix the root cause, do not fabricate evidence, re-run and re-grade.
|
|
132
|
-
|
|
133
|
-
## Judgment Grading Protocol
|
|
134
|
-
|
|
135
|
-
**Step 1 — Dispatch a grader:**
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
loop_grader_dispatch stageId=<id> [model=<grader-model>]
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
- mints an unforgeable `continuationId` and `graderSessionId` via the runtime
|
|
142
|
-
- resolves the grader model: an explicit `model` override is used **verbatim**
|
|
143
|
-
(after the `≠ executor` check); otherwise `stage.grader.model ?? loop.graderModel`,
|
|
144
|
-
advancing through `fallbackModels` on re-dispatch after a spawn failure
|
|
145
|
-
- requires the resolved model to differ from the executor's (`E_NO_DIVERSITY` otherwise)
|
|
146
|
-
- launches the grader agent (read-only, same cwd) via Paseo `--provider <graderModel>`
|
|
147
|
-
(use `--mode auto-review` so on-request approvals don't block; see Verdict capture)
|
|
148
|
-
- returns the `continuationId` you must pass to step 2
|
|
149
|
-
|
|
150
|
-
**Step 2 — Record the grader's verdict** (driver-relayed is the default):
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
loop_grader_verdict stageId=<id> continuationId=<id> verdict=GO|NO-GO evidence="<findings>"
|
|
154
|
-
graderAgentId=<id> graderSessionId=<id> captureSource=relayed
|
|
155
|
-
recordedByAgentId=<executor> recordedByModel=<model> recordedBySessionId=<session>
|
|
156
|
-
[graderModelActual=<model-that-actually-ran>]
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
`graderModelActual` records the model that *actually* ran the grader (e.g. the
|
|
160
|
-
Paseo-resolved provider), separate from the dispatch-resolved request — the
|
|
161
|
-
verdict stores it as the authoritative grader model (keeping the dispatched one
|
|
162
|
-
as `graderModelDispatched`) and the independence check runs against it. Supply it
|
|
163
|
-
when the host ran a different/fallback model than dispatched; omit it otherwise.
|
|
164
|
-
|
|
165
|
-
Grader child sessions may call `loop_grader_verdict` directly with `captureSource=direct` instead.
|
|
166
|
-
Direct calls without a dispatch-minted `continuationId` fail with `E_UNKNOWN_GRADER_SESSION`.
|
|
167
|
-
Grader MCP sessions are **runtime-gated**: only `loop_grader_verdict`, `loop_status`,
|
|
168
|
-
`loop_stop_evaluate` — pass `_meta.enactLoop` with `sessionRole: grader` and bound `continuationId`.
|
|
169
|
-
Incomplete grader metadata (e.g. `role=grader` without `sessionId`) fails closed with
|
|
170
|
-
`E_INCOMPLETE_GRADER_SESSION` rather than defaulting to executor.
|
|
171
|
-
Grader timeout surfaces as `grader-unavailable` blocker — re-dispatch; never assume GO.
|
|
172
|
-
Spawn failure (529): `loop_grader_report_spawn_failure` then re-dispatch (uses `fallbackModels`).
|
|
173
|
-
While grader is in flight, Stop **allows** exit without `loop_pause` churn.
|
|
174
|
-
|
|
175
|
-
The engine rejects the verdict if grader identity overlaps executor identity or the
|
|
176
|
-
`continuationId` was not minted by this runtime.
|
|
177
|
-
|
|
178
|
-
**NEVER self-report a judgment verdict.** The boulder blocks Stop and re-prompts with
|
|
179
|
-
`grader-independence-missing` if you do. If a grader returns NO-GO: fix the issue, stay in
|
|
180
|
-
`verifying`, and re-dispatch. Exceeding the round limit escalates with a blocker.
|
|
181
|
-
|
|
182
|
-
## Operational notes — grader independence, fallback, and worktree discipline
|
|
183
|
-
|
|
184
|
-
> Context: in a validated 3-wave run, independent graders caught FIVE real defects that
|
|
185
|
-
> all mechanical gates passed — model-distinct cross-vendor grading is the mechanism that
|
|
186
|
-
> surfaces defects mechanical gates cannot see.
|
|
187
|
-
|
|
188
|
-
### Grader independence is MODEL-DISTINCT
|
|
189
|
-
|
|
190
|
-
The independence rule is checked by model identity, not by vendor or surface name.
|
|
191
|
-
**A sonnet executor + a cursor-sonnet grader is NOT distinct** — `cursor/claude-sonnet-4-6`
|
|
192
|
-
runs the same underlying model. The engine will emit `grader-independence-missing` and
|
|
193
|
-
block closure. Ensure the resolved `grader.model` differs from the executor's model string.
|
|
194
|
-
|
|
195
|
-
**Default cheap graders:** **minimax M3** (opencode) and **kimi K2.7** are vendor-distinct from
|
|
196
|
-
both sonnet and codex, making them always-independent defaults (~80% of grading). Escalate to
|
|
197
|
-
**opus 4.8** or **gpt-5.5** for high-risk judgment (a11y / visual / security / architecture).
|
|
198
|
-
`cursor` is only distinct when the executor is opus-tier (cursor runs claude-sonnet).
|
|
199
|
-
|
|
200
|
-
### fallbackModels rotation on spawn failure (529 / overload)
|
|
201
|
-
|
|
202
|
-
1. Call `loop_grader_report_spawn_failure({ continuationId, error })` to record the failure.
|
|
203
|
-
2. Re-call `loop_grader_dispatch` — with no `model`, the runtime auto-selects the next
|
|
204
|
-
`fallbackModels` entry; pass an explicit `model` to **pin a specific grader** (the override
|
|
205
|
-
is honored verbatim and is not consumed by the rotation pointer).
|
|
206
|
-
3. Record the verdict under the minted `continuationId`; set `graderModelActual` to the model
|
|
207
|
-
that actually ran so provenance is accurate. Independence holds as long as the actual grader
|
|
208
|
-
model ≠ executor model.
|
|
209
|
-
|
|
210
|
-
### Worktree fingerprint — when verdicts are invalidated vs. preserved
|
|
211
|
-
|
|
212
|
-
| Change type | Effect on verdicts |
|
|
213
|
-
|---|---|
|
|
214
|
-
| Edit a **tracked** source file | Fingerprint changes → all prior `passed` verdicts invalidated (`BLOCKER_FILESYSTEM_STATE_CHANGED`) → re-grade required |
|
|
215
|
-
| Add an **untracked** new file (e.g. a new test file) | Fingerprint unchanged → prior GO verdicts remain valid |
|
|
216
|
-
|
|
217
|
-
This means you can add new test files mid-loop without forcing re-grading of already-passed stages.
|
|
218
|
-
Never use `git stash` mid-loop — it mutates tracked-file state and invalidates all verdicts.
|
|
219
|
-
|
|
220
|
-
### `loop_pause` / `loop_resume` around long async grading
|
|
221
|
-
|
|
222
|
-
While a grader is dispatched and in flight, the Stop boulder already allows exit without `loop_pause`.
|
|
223
|
-
Use `loop_pause` / `loop_resume` explicitly when you need to hand off control for extended human
|
|
224
|
-
review or an async wait that is not grader-dispatch-in-flight, to avoid unnecessary Stop churn.
|
|
225
|
-
|
|
226
|
-
### Graders are read-only
|
|
227
|
-
|
|
228
|
-
Grader child sessions must review the artifact and emit a verdict — nothing else.
|
|
229
|
-
They MUST NOT call `loop_*` management tools (complete, pause, resume, retarget, block, abort)
|
|
230
|
-
or `factory_*` tools. The runtime rejects these calls from grader sessions.
|
|
231
|
-
|
|
232
|
-
**Verdict capture is STRUCTURED, not log-scraped.** Dispatch with:
|
|
233
|
-
`paseo run --provider <graderModel> --mode auto-review --output-schema <verdict.json> --json --label continuation=<cid>`
|
|
234
|
-
— stdout is the validated `{verdict, evidence}` object (verified on codex / cursor / opencode / kimi;
|
|
235
|
-
coexists with tool use). With the codex provider, `--mode auto-review` routes the grader's eligible
|
|
236
|
-
`on-request` approvals through codex's auto-reviewer subagent instead of BLOCKING — without it a
|
|
237
|
-
grader can stall waiting on an approval (e.g. a cargo/network fetch during build verification). The
|
|
238
|
-
grader stays read-only BY PROMPT; auto-review only governs approval handling and composes with the
|
|
239
|
-
`--output-schema` structured verdict capture. Codex mode enum (authoritative): `read-only` · `auto`
|
|
240
|
-
· `auto-review` · `full-access`. Flip a running grader with `paseo agent mode <id> auto-review`.
|
|
241
|
-
Recover actual grader model + cost via
|
|
242
|
-
`paseo ls -a --label continuation=<cid> --json` + `paseo inspect <id> --json`.
|
|
243
|
-
Watch live: recover the id by label then `paseo attach <id>`.
|
|
244
|
-
Fallback only: if structured capture is unavailable, embed evidence inline in the `evidence` field.
|
|
245
|
-
Design doc: `enact-loop/docs/design/2026-06-22-paseo-verdict-capture.md`.
|
|
246
|
-
|
|
247
|
-
## Access Control — `.enact/` is CLI-mediated
|
|
248
|
-
|
|
249
|
-
The agent **NEVER edits `~/.enact/` files directly**. All loop state mutation goes through the
|
|
250
|
-
`enact-loop` CLI or `loop_*` MCP tools — never raw file edits. Read state via:
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
enact-loop status --json # current loop state as JSON
|
|
254
|
-
enact-loop summary show # display the current closure summary
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
## Session roles and closure authority
|
|
258
|
-
|
|
259
|
-
| Role | May call | Must NOT call |
|
|
260
|
-
|------|----------|---------------|
|
|
261
|
-
| **Executor/driver** | `loop_grade`, `loop_grader_dispatch`, `loop_grader_verdict` (relayed), `loop_pause`, `loop_resume`, `loop_retarget`, `loop_complete`, `enact-loop summary write` | — |
|
|
262
|
-
| **Grader child** | `loop_grader_verdict` (direct), `loop_status`, `loop_stop_evaluate` | `loop_complete`, summary write, `loop_pause`/`loop_resume`/`loop_retarget`, closure tools |
|
|
263
|
-
|
|
264
|
-
Grader child sessions: review, emit verdict, stop cleanly. They have **no closure authority**.
|
|
265
|
-
|
|
266
|
-
**No `git stash` during an active loop** — stash mid-loop invalidates worktree state and stale
|
|
267
|
-
verdict fingerprints.
|
|
268
|
-
|
|
269
|
-
## Worktree fingerprint
|
|
270
|
-
|
|
271
|
-
Each verdict is stamped with a worktree fingerprint. When the workspace changes (e.g. after
|
|
272
|
-
retarget or filesystem drift), stale `passed` verdicts are invalidated (`BLOCKER_FILESYSTEM_STATE_CHANGED`).
|
|
273
|
-
`loop_retarget` preserves verdicts only when `id + type + worktreeFingerprint` match unchanged stages.
|
|
274
|
-
|
|
275
|
-
## Workspace root resolution
|
|
276
|
-
|
|
277
|
-
Loop state is keyed to the **launch workspace** — no ancestor `.git` walk:
|
|
278
|
-
|
|
279
|
-
| Surface | Root source |
|
|
280
|
-
|---------|-------------|
|
|
281
|
-
| CLI subcommands | `process.cwd()` — run from the driven project |
|
|
282
|
-
| MCP | `enact-loop mcp <workspace>` positional arg (bundle uses `"."` = host MCP cwd) |
|
|
283
|
-
| Hooks | `payload.cwd` from hook JSON |
|
|
284
|
-
|
|
285
|
-
Wrong cwd → different project store → "no active loop".
|
|
286
|
-
|
|
287
|
-
## Closure
|
|
288
|
-
|
|
289
|
-
Closure requires a written, CURRENT timestamped summary under
|
|
290
|
-
`~/.enact/loop/projects/<key>/state/<YYMMDDHH>-loop-summary.md`. The runtime records the active
|
|
291
|
-
path in `~/.enact/loop/projects/<key>/state/summary-current.json`. When all required stages pass
|
|
292
|
-
(and every judgment stage has an independent verdict), the loop is closure-ready and enters the
|
|
293
|
-
`verifying` phase. The Stop boulder then **BLOCKS exit** and injects a generic markdown
|
|
294
|
-
**TEMPLATE** whose first line is a fingerprint header:
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
<!-- enact-loop-summary loop:<id> fp:<phase|stagesPassed|historyLen> -->
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
The template defines these sections (keep the whole file under 100 lines):
|
|
301
|
-
|
|
302
|
-
- **Summary** — one-line statement of what was accomplished or why blocking/aborting
|
|
303
|
-
- **Stage state** — list of stages with their final status
|
|
304
|
-
- **Blockers** — any unresolved blockers (if blocking/aborting)
|
|
305
|
-
- **Failures** — any stages that failed and the root cause
|
|
306
|
-
- **Evidence** — key commands run and observed outputs
|
|
307
|
-
- **Recommendations** — suggested next actions
|
|
308
|
-
|
|
309
|
-
To write the summary, **pipe the body sections to the CLI** — the CLI stamps the fingerprint
|
|
310
|
-
header automatically:
|
|
311
|
-
|
|
312
|
-
```bash
|
|
313
|
-
enact-loop summary write <<'EOF'
|
|
314
|
-
## Summary
|
|
315
|
-
<one-line summary>
|
|
316
|
-
|
|
317
|
-
## Stage state
|
|
318
|
-
<stage list>
|
|
319
|
-
|
|
320
|
-
## Blockers
|
|
321
|
-
<none|list>
|
|
322
|
-
|
|
323
|
-
## Failures
|
|
324
|
-
<none|list>
|
|
325
|
-
|
|
326
|
-
## Evidence
|
|
327
|
-
<commands + observed output>
|
|
328
|
-
|
|
329
|
-
## Recommendations
|
|
330
|
-
<next actions>
|
|
331
|
-
EOF
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
Once a current summary exists, the boulder allows exit. `completeLoop` / `blockLoop` / `abortLoop`
|
|
335
|
-
all **REQUIRE** a current summary and throw `E_CLOSURE_SUMMARY_MISSING` otherwise.
|
|
336
|
-
|
|
337
|
-
When a later `loop_start` begins a new loop, the prior terminal loop's active state is archived
|
|
338
|
-
under `~/.enact/loop/projects/<key>/archive/<loop-id>-<contract-id>/` before the new active
|
|
339
|
-
`state/loop.json` is written. That archive keeps the closed loop's `loop.json`,
|
|
340
|
-
`closure-manifest.json`, `grader-sessions.json`, `summary-current.json`, and every timestamped
|
|
341
|
-
closure summary for auditability.
|
|
342
|
-
|
|
343
|
-
**This summary is the handoff**: enact-factory's brain reads it (together with the Paseo agent's
|
|
344
|
-
last message) to decide the next action after the loop completes.
|
|
345
|
-
|
|
346
|
-
**Closure sequence — required for ALL terminal transitions:**
|
|
347
|
-
|
|
348
|
-
1. `enact-loop summary write` — pipe body sections; CLI stamps the fingerprint header
|
|
349
|
-
2. Then call: `loop_complete summary="<one-line>"` OR `loop_block reason="<reason>"` OR
|
|
350
|
-
`loop_abort reason="<reason>"`
|
|
351
|
-
|
|
352
|
-
## MCP Tools
|
|
353
|
-
|
|
354
|
-
| Tool | Purpose |
|
|
355
|
-
|------|---------|
|
|
356
|
-
| `loop_start` | Start loop with goal + contract/preset; stamps executorIdentity |
|
|
357
|
-
| `loop_status` | Read current loop state |
|
|
358
|
-
| `loop_advance` | Phase transition |
|
|
359
|
-
| `loop_grade` | Run a mechanical stage command in loop root; args: `stageId`, optional `timeoutMs` |
|
|
360
|
-
| `loop_grader_dispatch` | Dispatch an independent grader for a judgment stage (returns continuationId) |
|
|
361
|
-
| `loop_grader_verdict` | Record GO/NO-GO; `captureSource`: `relayed` (driver default) or `direct` (grader child) |
|
|
362
|
-
| `loop_pause` | Pause the loop for human review; Stop allows exit while paused |
|
|
363
|
-
| `loop_resume` | Resume a paused loop; restores the pre-pause phase |
|
|
364
|
-
| `loop_retarget` | Replace the active contract with a new one (same loop id) |
|
|
365
|
-
| `loop_block` | Mark blocked with a reason; requires current closure summary |
|
|
366
|
-
| `loop_complete` | Close the loop; requires current closure summary + phase=verifying + all stages passed |
|
|
367
|
-
| `loop_abort` | Abort with a reason; requires current closure summary |
|
|
368
|
-
| `loop_contract_parity` | Run contract-parity check |
|
|
369
|
-
| `loop_stop_evaluate` | Evaluate Stop boulder policy (called by the Stop hook) |
|
|
370
|
-
|
|
371
|
-
## CLI
|
|
372
|
-
|
|
373
|
-
```bash
|
|
374
|
-
# Read state (never read .enact/ files directly)
|
|
375
|
-
enact-loop status --json # current loop state as JSON
|
|
376
|
-
enact-loop summary show # display the current closure summary
|
|
377
|
-
|
|
378
|
-
# Write the closure summary (CLI stamps fingerprint header into a new YYMMDDHH-loop-summary.md; never write summaries directly)
|
|
379
|
-
enact-loop summary write <<'EOF'
|
|
380
|
-
## Summary
|
|
381
|
-
...
|
|
382
|
-
EOF
|
|
383
|
-
|
|
384
|
-
# Validate a contract file before using it with loop_start
|
|
385
|
-
enact-loop contract validate <path/to/contract.json|yaml>
|
|
386
|
-
|
|
387
|
-
# Health check — verify MCP server reachability and runtime state; optionally validate
|
|
388
|
-
# that a contract's grader model differs from the executor model
|
|
389
|
-
enact-loop doctor --contract <file> [--executor-model M] [--grader-model M]
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
`contract validate` exits 0 + `✓ valid contract: <id> (<n> stages)` on success; exits 1 with an
|
|
393
|
-
error list on failure. Common errors: missing required fields, judgment stage without `grader`,
|
|
394
|
-
mechanical stage with `grader` (use `command` instead), malformed YAML/JSON.
|
|
395
|
-
|
|
396
|
-
## Boulder Behavior
|
|
397
|
-
|
|
398
|
-
The Stop hook calls `enact-loop hook stop` → `loop_stop_evaluate`. The boulder blocks exit if:
|
|
399
|
-
- any `required` stage is still `pending` or `failed`
|
|
400
|
-
- any judgment stage is `passed` but lacks a valid independent verdict (`grader-independence-missing`)
|
|
401
|
-
- a required grader is unavailable (`grader-unavailable`)
|
|
402
|
-
- the loop is closure-ready (all stages passed, independence satisfied) but no current closure summary exists
|
|
403
|
-
or the summary fingerprint is stale (`closure-summary-missing`) — resolve by running `enact-loop summary write`
|
|
404
|
-
- the loop phase is not terminal (exception: `paused` allows exit)
|
|
405
|
-
|
|
406
|
-
## State
|
|
30
|
+
1. Read `loop_status`; clarify the goal if needed.
|
|
31
|
+
2. Declare a contract using the exact `executor`, `mechanical`, `stage-verifier`, and `loop-grader` types needed by the outcome. Dependencies form the graph; no domain-specific Stage ids are required. Use `executor` for prompt-driven interactive work and `mechanical` only for a real executable command.
|
|
32
|
+
3. Start with `loop_start`, perform the declared work in `running`, then advance with `loop_advance toPhase=verifying`.
|
|
33
|
+
4. For an `executor` Stage, the authenticated active Executor first calls `loop_executor_stage_input({ stageId })`, performs the returned exact `prompt.text`, then calls `loop_executor_stage_complete` with the response's exact `identity`, `inputFingerprint`, and `executorContinuationId`, plus non-empty `evidenceRefs`, a lower-case SHA-256 `outputDigest`, and any mapped `assertionResults`. The operation is pass-only; status, command result, and Executor identity are not caller inputs.
|
|
34
|
+
5. Run each `mechanical` Stage through `loop_stage_run`; do not use Executor completion for a declared command.
|
|
35
|
+
6. For a `stage-verifier` Stage, reserve with `loop_stage_verifier_dispatch`, bind the launched reviewer with `loop_stage_verifier_register_session`, persist observed transport with `loop_stage_verifier_observation_record`, and submit its role-specific verdict through `loop_stage_verifier_verdict`. Record launch failure only through `loop_stage_verifier_report_spawn_failure`.
|
|
36
|
+
7. For a `loop-grader` Stage, use the distinct `loop_grader_dispatch`, `loop_grader_register_session`, `loop_grader_observation_record`, `loop_grader_verdict`, and `loop_grader_report_spawn_failure` surface. Do not select either role through a generic role flag.
|
|
37
|
+
8. Resume the same Executor after a StageVerifier GO. Fix a NO-GO within the declared contract; pause for human amendment when the contract must change. When every required Stage and assertion passes, write the summary and close with `loop_complete`.
|
|
38
|
+
9. Read [the contract reference](references/loop-contract.md) before declaring complex dependencies or budgets.
|
|
407
39
|
|
|
408
|
-
|
|
40
|
+
## Output
|
|
409
41
|
|
|
410
|
-
|
|
411
|
-
- Mutate state: `loop_*` MCP tools or `enact-loop` CLI subcommands only
|
|
412
|
-
- Active loop state stays in `~/.enact/loop/projects/<key>/state/`; closed loops move to
|
|
413
|
-
`~/.enact/loop/projects/<key>/archive/<loop-id>-<contract-id>/` on the next `loop_start`
|
|
414
|
-
- Closure summaries are append-only timestamped files at
|
|
415
|
-
`~/.enact/loop/projects/<key>/state/<YYMMDDHH>-loop-summary.md`, written via `enact-loop summary write`
|
|
416
|
-
(CLI stamps the fingerprint header and updates `summary-current.json`); read by enact-factory's brain after loop completion.
|
|
417
|
-
- SessionStart hook auto-resumes an active (`running` or `verifying`) loop when the prompt
|
|
418
|
-
contains `$enact-loop`. Paused loops are NOT auto-resumed.
|
|
42
|
+
Return the loop id, phase, contract, interactive Executor evidence, mechanical evidence, role-specific verdicts, blockers, and closure summary.
|
|
419
43
|
|
|
420
|
-
##
|
|
44
|
+
## State Contract
|
|
421
45
|
|
|
422
|
-
|
|
46
|
+
The runtime owns loop state and derives its project key from the launch workspace. Inspect state through loop tools; never fabricate evidence, stage status, or a judgment verdict.
|
|
423
47
|
|
|
424
|
-
|
|
425
|
-
id: delivery
|
|
426
|
-
name: Feature Delivery
|
|
427
|
-
stages:
|
|
428
|
-
- id: tests
|
|
429
|
-
name: Tests passing
|
|
430
|
-
type: mechanical
|
|
431
|
-
required: true
|
|
432
|
-
command: bash scripts/ci-local.sh
|
|
433
|
-
passCriteria: All tests exit 0
|
|
48
|
+
## Boundaries
|
|
434
49
|
|
|
435
|
-
|
|
436
|
-
name: Type check clean
|
|
437
|
-
type: mechanical
|
|
438
|
-
required: true
|
|
439
|
-
command: npm run typecheck && npm run typecheck:tests
|
|
440
|
-
passCriteria: No type errors in src or test files
|
|
50
|
+
### In scope
|
|
441
51
|
|
|
442
|
-
|
|
443
|
-
name: Lint clean
|
|
444
|
-
type: mechanical
|
|
445
|
-
required: true
|
|
446
|
-
command: npm run lint
|
|
447
|
-
passCriteria: No lint errors
|
|
52
|
+
Declaring, executing, grading, blocking, resuming, and closing an enact-loop contract.
|
|
448
53
|
|
|
449
|
-
|
|
450
|
-
name: Code review
|
|
451
|
-
type: judgment
|
|
452
|
-
required: true
|
|
453
|
-
grader:
|
|
454
|
-
role: code-reviewer
|
|
455
|
-
model: claude-opus-4-8
|
|
456
|
-
harness: paseo
|
|
457
|
-
rounds: 3
|
|
458
|
-
passCriteria: Reviewer approves with no blocking issues
|
|
459
|
-
```
|
|
54
|
+
### Out of scope
|
|
460
55
|
|
|
461
|
-
|
|
462
|
-
host is not acceptable — the host suite can pass green while the same deliverable
|
|
463
|
-
fails the Linux CI agent due to `HOME`/path divergence. The `command` for the
|
|
464
|
-
`tests` stage must invoke a Linux-parity / containerized runner (e.g.
|
|
465
|
-
`bash scripts/ci-local.sh`) that reproduces the CI environment locally.
|
|
56
|
+
Using an Executor session as StageVerifier or LoopGrader, using pass-only Executor completion for a mechanical or judgment Stage, editing runtime state files, bypassing a failed required Stage, or treating a proposed contract as approval.
|
|
466
57
|
|
|
467
|
-
|
|
468
|
-
test-file typecheck script, include it — either as its own mechanical stage or
|
|
469
|
-
folded into the typecheck stage command (`npm run typecheck && npm run
|
|
470
|
-
typecheck:tests`). A src-only `typecheck` lets test-file type regressions slip
|
|
471
|
-
past undetected.
|
|
58
|
+
### Fog of war
|
|
472
59
|
|
|
473
|
-
|
|
60
|
+
If scope, acceptance, dependency, or reviewer identity is unknown, block or clarify instead of starting or completing a loop.
|
|
474
61
|
|
|
475
|
-
|
|
476
|
-
id: docs-workflow
|
|
477
|
-
name: Documentation Update
|
|
478
|
-
stages:
|
|
479
|
-
- id: build
|
|
480
|
-
name: Docs build clean
|
|
481
|
-
type: mechanical
|
|
482
|
-
required: true
|
|
483
|
-
command: npm run docs:build
|
|
62
|
+
## Completion
|
|
484
63
|
|
|
485
|
-
|
|
486
|
-
name: Scope fidelity
|
|
487
|
-
type: judgment
|
|
488
|
-
required: true
|
|
489
|
-
grader:
|
|
490
|
-
role: critic
|
|
491
|
-
model: claude-opus-4-8
|
|
492
|
-
rounds: 2
|
|
493
|
-
passCriteria: Critic confirms docs match the stated scope
|
|
494
|
-
```
|
|
64
|
+
Prove closure with `loop_status` after `enact-loop summary write` and `loop_complete`; every required Stage must be `passed`, every required assertion must be met, and every judgment verdict must use its exact role-specific surface.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Enact-loop contract reference
|
|
2
|
+
|
|
3
|
+
## Contract shape
|
|
4
|
+
|
|
5
|
+
Declare a generic contract with an id, name, optional opaque skill reference, and Stages. A Stage has an opaque id, name, exact type, required flag, optional dependency ids, and optional prompt, evidence schema, and stop conditions. Use `executor` for interactive prompt-driven work; use `mechanical` only when the engine must run a real command.
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
id: <loop-id>
|
|
9
|
+
name: <outcome name>
|
|
10
|
+
skill:
|
|
11
|
+
id: <optional opaque skill id>
|
|
12
|
+
stages:
|
|
13
|
+
- id: produce
|
|
14
|
+
name: Produce the artifact
|
|
15
|
+
type: executor
|
|
16
|
+
required: true
|
|
17
|
+
prompt:
|
|
18
|
+
text: <exact prompt text>
|
|
19
|
+
sha256: <lower-case SHA-256 of text>
|
|
20
|
+
- id: validate
|
|
21
|
+
name: Validate the artifact
|
|
22
|
+
type: mechanical
|
|
23
|
+
required: true
|
|
24
|
+
requires: [produce]
|
|
25
|
+
command: <executable validation command>
|
|
26
|
+
passCriteria: The artifact satisfies its declared mechanical checks
|
|
27
|
+
- id: inspect-current
|
|
28
|
+
name: Inspect current work and predecessors
|
|
29
|
+
type: stage-verifier
|
|
30
|
+
required: true
|
|
31
|
+
requires: [validate]
|
|
32
|
+
stageVerifier:
|
|
33
|
+
role: stage-verifier
|
|
34
|
+
rounds: 3
|
|
35
|
+
- id: judge-complete
|
|
36
|
+
name: Judge whole-loop completeness
|
|
37
|
+
type: loop-grader
|
|
38
|
+
required: true
|
|
39
|
+
requires: [inspect-current]
|
|
40
|
+
loopGrader:
|
|
41
|
+
role: loop-grader
|
|
42
|
+
rounds: 3
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Interactive Executor Stages declare no command. Their authenticated active Executor records pass-only completion against the exact immutable input packet. Mechanical Stages require an executable command; `loop_stage_run` executes it in the supplied root and derives its outcome from the exit code. Caller-supplied status or evidence does not replace execution.
|
|
46
|
+
|
|
47
|
+
StageVerifier and LoopGrader are separate Stage types and separate transport surfaces. Each requires a reviewer session and agent identity distinct from the Executor. Dispatch reserves the role-specific continuation required for observation and verdict recording. Missing, unknown, overlapping, or cross-wired identity blocks closure.
|
|
48
|
+
|
|
49
|
+
## Phase transitions
|
|
50
|
+
|
|
51
|
+
`idle → running → verifying → completed` is the normal path. A loop may become `blocked` while waiting for an external dependency or `paused` by explicit human action. `aborted` is terminal. Resume a blocked or paused loop only after the reported condition is addressed.
|
|
52
|
+
|
|
53
|
+
Use `loop_advance toPhase=verifying` only after the declared Stage inputs and evidence are ready. Use `loop_complete` only from `verifying` after every required Stage passed.
|
|
54
|
+
|
|
55
|
+
## Executor Stage protocol
|
|
56
|
+
|
|
57
|
+
1. From the authenticated active Executor session, call `loop_executor_stage_input({ stageId })`. It idempotently persists the pending Stage's exact `enact.loop.stage-input/v1` packet and returns `{ stageInput, identity, inputFingerprint, executorContinuationId, prompt: { text, sha256 } }` without running freshness or timeout mutation.
|
|
58
|
+
2. Perform the returned exact `prompt.text` without changing the declared contract; `prompt.sha256` is already bound inside `stageInput.renderedPromptDigest`.
|
|
59
|
+
3. Call `loop_executor_stage_complete` with exactly:
|
|
60
|
+
|
|
61
|
+
- `stageId`
|
|
62
|
+
- the returned `identity` (`loopRunId`, `subjectRef`, `stageId`, positive `attempt`, `contractDigest`, and `cumulativeFingerprint`)
|
|
63
|
+
- the returned `inputFingerprint`
|
|
64
|
+
- the returned `executorContinuationId`
|
|
65
|
+
- one or more immutable `evidenceRefs`
|
|
66
|
+
- a lower-case SHA-256 `outputDigest`
|
|
67
|
+
- optional `assertionResults` only for assertions mapped to this Stage; every mapped required assertion must be `met`.
|
|
68
|
+
|
|
69
|
+
4. The tool derives Executor identity from the authenticated session, records only `passed`, and rejects a foreign session, continuation, input packet, Stage type, assertion, or repeat completion. It accepts no caller `status`, command, or Executor-identity field.
|
|
70
|
+
|
|
71
|
+
## StageVerifier protocol
|
|
72
|
+
|
|
73
|
+
1. Call `loop_stage_verifier_dispatch` for the `stage-verifier` Stage.
|
|
74
|
+
2. Launch the lightweight reviewer outside Loop and bind its session through `loop_stage_verifier_register_session`.
|
|
75
|
+
3. Persist observed transport through `loop_stage_verifier_observation_record`.
|
|
76
|
+
4. Record only a StageVerifier verdict with `loop_stage_verifier_verdict`.
|
|
77
|
+
5. On launch failure, call `loop_stage_verifier_report_spawn_failure`; on NO-GO, fix within contract and reserve a new round.
|
|
78
|
+
|
|
79
|
+
## LoopGrader protocol
|
|
80
|
+
|
|
81
|
+
1. Call `loop_grader_dispatch` only for the `loop-grader` Stage.
|
|
82
|
+
2. Bind the final reviewer with `loop_grader_register_session` and persist observed transport with `loop_grader_observation_record`.
|
|
83
|
+
3. Record only a LoopGrader verdict with `loop_grader_verdict`.
|
|
84
|
+
4. On launch failure, call `loop_grader_report_spawn_failure`; on NO-GO, fix within contract and reserve a new round.
|
|
85
|
+
|
|
86
|
+
For both roles, use `captureSource=relayed` when a driver relays the role envelope and `captureSource=direct` only for the bound reviewer session. A timeout or launch failure is a blocker, not a GO. No generic role selector or compatibility judgment surface exists.
|
|
87
|
+
|
|
88
|
+
CLI relay equivalents are role-specific too:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
enact-loop stage-verifier observation-record --file <json>
|
|
92
|
+
enact-loop stage-verifier verdict --file <json>
|
|
93
|
+
enact-loop loop-grader observation-record --file <json>
|
|
94
|
+
enact-loop loop-grader verdict --file <json>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Dependencies and budgets
|
|
98
|
+
|
|
99
|
+
`requires` must form an acyclic graph. A dependent stage cannot run or dispatch before all required predecessors pass.
|
|
100
|
+
|
|
101
|
+
```yaml
|
|
102
|
+
executionBudget:
|
|
103
|
+
maxMechanicalAttempts: 3
|
|
104
|
+
maxTotalMechanicalAttempts: 8
|
|
105
|
+
maxTotalJudgmentDispatches: 2
|
|
106
|
+
failurePolicy:
|
|
107
|
+
maxMechanicalFailures: 3
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Set every budget deliberately. A zero budget is an explicit no-op. Mechanical-attempt exhaustion blocks the loop; judgment-dispatch exhaustion refuses that dispatch. `failurePolicy.maxMechanicalFailures` is independent of the execution budget and blocks repeated failing mechanical work when configured.
|
|
111
|
+
|
|
112
|
+
## Evidence and summary
|
|
113
|
+
|
|
114
|
+
Use `loop_operations_snapshot` and `loop_status` for durable runtime facts. Do not read or edit runtime ledger files directly. Before closing, run `enact-loop summary write`; it records the required closure summary and fingerprint.
|