aether-colony 3.1.17 → 5.1.0
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/.aether/aether-utils.sh +5354 -0
- package/.aether/agents-claude/aether-ambassador.md +265 -0
- package/.aether/agents-claude/aether-archaeologist.md +327 -0
- package/.aether/agents-claude/aether-architect.md +236 -0
- package/.aether/agents-claude/aether-auditor.md +271 -0
- package/.aether/agents-claude/aether-builder.md +224 -0
- package/.aether/agents-claude/aether-chaos.md +269 -0
- package/.aether/agents-claude/aether-chronicler.md +305 -0
- package/.aether/agents-claude/aether-gatekeeper.md +330 -0
- package/.aether/agents-claude/aether-includer.md +374 -0
- package/.aether/agents-claude/aether-keeper.md +272 -0
- package/.aether/agents-claude/aether-measurer.md +322 -0
- package/.aether/agents-claude/aether-oracle.md +237 -0
- package/.aether/agents-claude/aether-probe.md +211 -0
- package/.aether/agents-claude/aether-queen.md +330 -0
- package/.aether/agents-claude/aether-route-setter.md +178 -0
- package/.aether/agents-claude/aether-sage.md +418 -0
- package/.aether/agents-claude/aether-scout.md +179 -0
- package/.aether/agents-claude/aether-surveyor-disciplines.md +417 -0
- package/.aether/agents-claude/aether-surveyor-nest.md +355 -0
- package/.aether/agents-claude/aether-surveyor-pathogens.md +289 -0
- package/.aether/agents-claude/aether-surveyor-provisions.md +360 -0
- package/.aether/agents-claude/aether-tracker.md +270 -0
- package/.aether/agents-claude/aether-watcher.md +280 -0
- package/.aether/agents-claude/aether-weaver.md +248 -0
- package/.aether/commands/archaeology.yaml +653 -0
- package/.aether/commands/build.yaml +1221 -0
- package/.aether/commands/chaos.yaml +653 -0
- package/.aether/commands/colonize.yaml +438 -0
- package/.aether/commands/continue.yaml +1484 -0
- package/.aether/commands/council.yaml +304 -0
- package/.aether/commands/data-clean.yaml +80 -0
- package/.aether/commands/dream.yaml +275 -0
- package/.aether/commands/entomb.yaml +863 -0
- package/.aether/commands/export-signals.yaml +64 -0
- package/.aether/commands/feedback.yaml +158 -0
- package/.aether/commands/flag.yaml +160 -0
- package/.aether/commands/flags.yaml +177 -0
- package/.aether/commands/focus.yaml +112 -0
- package/.aether/commands/help.yaml +167 -0
- package/.aether/commands/history.yaml +137 -0
- package/.aether/commands/import-signals.yaml +79 -0
- package/.aether/commands/init.yaml +469 -0
- package/.aether/commands/insert-phase.yaml +98 -0
- package/.aether/commands/interpret.yaml +285 -0
- package/.aether/commands/lay-eggs.yaml +224 -0
- package/.aether/commands/maturity.yaml +122 -0
- package/.aether/commands/memory-details.yaml +74 -0
- package/.aether/commands/migrate-state.yaml +174 -0
- package/.aether/commands/oracle.yaml +1224 -0
- package/.aether/commands/organize.yaml +446 -0
- package/.aether/commands/patrol.yaml +621 -0
- package/.aether/commands/pause-colony.yaml +424 -0
- package/.aether/commands/phase.yaml +124 -0
- package/.aether/commands/pheromones.yaml +153 -0
- package/.aether/commands/plan.yaml +1313 -0
- package/.aether/commands/preferences.yaml +63 -0
- package/.aether/commands/redirect.yaml +123 -0
- package/.aether/commands/resume-colony.yaml +373 -0
- package/.aether/commands/resume.yaml +398 -0
- package/.aether/commands/run.yaml +193 -0
- package/.aether/commands/seal.yaml +1205 -0
- package/.aether/commands/skill-create.yaml +337 -0
- package/.aether/commands/status.yaml +364 -0
- package/.aether/commands/swarm.yaml +352 -0
- package/.aether/commands/tunnels.yaml +814 -0
- package/.aether/commands/update.yaml +131 -0
- package/.aether/commands/verify-castes.yaml +159 -0
- package/.aether/commands/watch.yaml +454 -0
- package/.aether/docs/INCIDENT_TEMPLATE.md +32 -0
- package/.aether/docs/QUEEN-SYSTEM.md +211 -0
- package/.aether/docs/README.md +98 -0
- package/.aether/docs/caste-system.md +48 -0
- package/.aether/docs/command-playbooks/README.md +23 -0
- package/.aether/docs/command-playbooks/build-complete.md +349 -0
- package/.aether/docs/command-playbooks/build-context.md +282 -0
- package/.aether/docs/command-playbooks/build-full.md +1682 -0
- package/.aether/docs/command-playbooks/build-prep.md +283 -0
- package/.aether/docs/command-playbooks/build-verify.md +405 -0
- package/.aether/docs/command-playbooks/build-wave.md +749 -0
- package/.aether/docs/command-playbooks/continue-advance.md +524 -0
- package/.aether/docs/command-playbooks/continue-finalize.md +447 -0
- package/.aether/docs/command-playbooks/continue-full.md +1724 -0
- package/.aether/docs/command-playbooks/continue-gates.md +686 -0
- package/.aether/docs/command-playbooks/continue-verify.md +406 -0
- package/.aether/docs/context-continuity.md +84 -0
- package/{runtime → .aether/docs/disciplines}/DISCIPLINES.md +13 -11
- package/.aether/docs/error-codes.md +268 -0
- package/.aether/docs/known-issues.md +94 -0
- package/{runtime → .aether}/docs/pheromones.md +86 -6
- package/.aether/docs/plans/pheromone-display-plan.md +257 -0
- package/.aether/docs/queen-commands.md +98 -0
- package/.aether/docs/source-of-truth-map.md +132 -0
- package/.aether/docs/xml-utilities.md +47 -0
- package/{runtime → .aether}/exchange/pheromone-xml.sh +2 -1
- package/{runtime → .aether}/exchange/registry-xml.sh +7 -3
- package/{runtime → .aether}/exchange/wisdom-xml.sh +11 -4
- package/.aether/rules/aether-colony.md +144 -0
- package/.aether/schemas/example-prompt-builder.xml +234 -0
- package/.aether/scripts/incident-test-add.sh +47 -0
- package/.aether/scripts/weekly-audit.sh +79 -0
- package/.aether/skills/.index.json +649 -0
- package/.aether/skills/colony/.manifest.json +16 -0
- package/.aether/skills/colony/build-discipline/SKILL.md +78 -0
- package/.aether/skills/colony/colony-interaction/SKILL.md +56 -0
- package/.aether/skills/colony/colony-lifecycle/SKILL.md +77 -0
- package/.aether/skills/colony/colony-visuals/SKILL.md +112 -0
- package/.aether/skills/colony/context-management/SKILL.md +80 -0
- package/.aether/skills/colony/error-presentation/SKILL.md +99 -0
- package/.aether/skills/colony/pheromone-protocol/SKILL.md +79 -0
- package/.aether/skills/colony/pheromone-visibility/SKILL.md +81 -0
- package/.aether/skills/colony/state-safety/SKILL.md +84 -0
- package/.aether/skills/colony/worker-priming/SKILL.md +82 -0
- package/.aether/skills/domain/.manifest.json +24 -0
- package/.aether/skills/domain/README.md +33 -0
- package/.aether/skills/domain/django/SKILL.md +49 -0
- package/.aether/skills/domain/docker/SKILL.md +52 -0
- package/.aether/skills/domain/golang/SKILL.md +52 -0
- package/.aether/skills/domain/graphql/SKILL.md +51 -0
- package/.aether/skills/domain/html-css/SKILL.md +48 -0
- package/.aether/skills/domain/nextjs/SKILL.md +45 -0
- package/.aether/skills/domain/nodejs/SKILL.md +53 -0
- package/.aether/skills/domain/postgresql/SKILL.md +53 -0
- package/.aether/skills/domain/prisma/SKILL.md +59 -0
- package/.aether/skills/domain/python/SKILL.md +50 -0
- package/.aether/skills/domain/rails/SKILL.md +52 -0
- package/.aether/skills/domain/react/SKILL.md +45 -0
- package/.aether/skills/domain/rest-api/SKILL.md +58 -0
- package/.aether/skills/domain/svelte/SKILL.md +47 -0
- package/.aether/skills/domain/tailwind/SKILL.md +45 -0
- package/.aether/skills/domain/testing/SKILL.md +53 -0
- package/.aether/skills/domain/typescript/SKILL.md +58 -0
- package/.aether/skills/domain/vue/SKILL.md +49 -0
- package/.aether/templates/QUEEN.md.template +61 -0
- package/.aether/templates/colony-state-reset.jq.template +23 -0
- package/.aether/templates/colony-state.template.json +39 -0
- package/.aether/templates/constraints.template.json +9 -0
- package/.aether/templates/crowned-anthill.template.md +36 -0
- package/.aether/templates/handoff-build-error.template.md +30 -0
- package/.aether/templates/handoff-build-success.template.md +39 -0
- package/.aether/templates/handoff.template.md +40 -0
- package/.aether/templates/learning-observations.template.json +6 -0
- package/.aether/templates/midden.template.json +13 -0
- package/.aether/templates/pheromones.template.json +6 -0
- package/.aether/templates/session.template.json +9 -0
- package/{runtime → .aether}/utils/atomic-write.sh +68 -22
- package/{runtime → .aether}/utils/chamber-compare.sh +23 -10
- package/.aether/utils/chamber-utils.sh +440 -0
- package/.aether/utils/emoji-audit.sh +166 -0
- package/{runtime → .aether}/utils/error-handler.sh +34 -8
- package/.aether/utils/file-lock.sh +313 -0
- package/.aether/utils/flag.sh +267 -0
- package/.aether/utils/hive.sh +572 -0
- package/.aether/utils/learning.sh +1928 -0
- package/.aether/utils/midden.sh +342 -0
- package/.aether/utils/oracle/oracle.md +168 -0
- package/.aether/utils/oracle/oracle.sh +1023 -0
- package/.aether/utils/pheromone.sh +2029 -0
- package/.aether/utils/queen.sh +1698 -0
- package/.aether/utils/scan.sh +860 -0
- package/.aether/utils/semantic-cli.sh +415 -0
- package/.aether/utils/session.sh +552 -0
- package/.aether/utils/skills.sh +509 -0
- package/.aether/utils/spawn-tree.sh +260 -0
- package/.aether/utils/spawn.sh +260 -0
- package/.aether/utils/state-api.sh +199 -0
- package/{runtime → .aether}/utils/state-loader.sh +8 -6
- package/.aether/utils/suggest.sh +611 -0
- package/{runtime → .aether}/utils/swarm-display.sh +10 -1
- package/.aether/utils/swarm.sh +1004 -0
- package/{runtime → .aether}/utils/watch-spawn-tree.sh +11 -2
- package/{runtime → .aether}/utils/xml-compose.sh +9 -3
- package/.aether/utils/xml-convert.sh +277 -0
- package/{runtime → .aether}/utils/xml-core.sh +5 -9
- package/.aether/utils/xml-query.sh +201 -0
- package/.aether/utils/xml-utils.sh +110 -0
- package/{runtime → .aether}/workers.md +97 -81
- package/.claude/agents/ant/aether-ambassador.md +265 -0
- package/.claude/agents/ant/aether-archaeologist.md +327 -0
- package/.claude/agents/ant/aether-architect.md +236 -0
- package/.claude/agents/ant/aether-auditor.md +271 -0
- package/.claude/agents/ant/aether-builder.md +224 -0
- package/.claude/agents/ant/aether-chaos.md +269 -0
- package/.claude/agents/ant/aether-chronicler.md +305 -0
- package/.claude/agents/ant/aether-gatekeeper.md +330 -0
- package/.claude/agents/ant/aether-includer.md +374 -0
- package/.claude/agents/ant/aether-keeper.md +272 -0
- package/.claude/agents/ant/aether-measurer.md +322 -0
- package/.claude/agents/ant/aether-oracle.md +237 -0
- package/.claude/agents/ant/aether-probe.md +211 -0
- package/.claude/agents/ant/aether-queen.md +330 -0
- package/.claude/agents/ant/aether-route-setter.md +178 -0
- package/.claude/agents/ant/aether-sage.md +418 -0
- package/.claude/agents/ant/aether-scout.md +179 -0
- package/.claude/agents/ant/aether-surveyor-disciplines.md +417 -0
- package/.claude/agents/ant/aether-surveyor-nest.md +355 -0
- package/.claude/agents/ant/aether-surveyor-pathogens.md +289 -0
- package/.claude/agents/ant/aether-surveyor-provisions.md +360 -0
- package/.claude/agents/ant/aether-tracker.md +270 -0
- package/.claude/agents/ant/aether-watcher.md +280 -0
- package/.claude/agents/ant/aether-weaver.md +248 -0
- package/.claude/commands/ant/archaeology.md +16 -14
- package/.claude/commands/ant/build.md +43 -1028
- package/.claude/commands/ant/chaos.md +19 -23
- package/.claude/commands/ant/colonize.md +52 -31
- package/.claude/commands/ant/continue.md +40 -1016
- package/.claude/commands/ant/council.md +21 -18
- package/.claude/commands/ant/data-clean.md +81 -0
- package/.claude/commands/ant/dream.md +27 -15
- package/.claude/commands/ant/entomb.md +317 -225
- package/.claude/commands/ant/export-signals.md +57 -0
- package/.claude/commands/ant/feedback.md +48 -26
- package/.claude/commands/ant/flag.md +30 -10
- package/.claude/commands/ant/flags.md +34 -12
- package/.claude/commands/ant/focus.md +45 -19
- package/.claude/commands/ant/help.md +50 -8
- package/.claude/commands/ant/history.md +13 -0
- package/.claude/commands/ant/import-signals.md +71 -0
- package/.claude/commands/ant/init.md +345 -194
- package/.claude/commands/ant/insert-phase.md +101 -0
- package/.claude/commands/ant/interpret.md +26 -4
- package/.claude/commands/ant/lay-eggs.md +184 -127
- package/.claude/commands/ant/maturity.md +32 -11
- package/.claude/commands/ant/memory-details.md +77 -0
- package/.claude/commands/ant/migrate-state.md +20 -2
- package/.claude/commands/ant/oracle.md +337 -74
- package/.claude/commands/ant/organize.md +39 -25
- package/.claude/commands/ant/patrol.md +620 -0
- package/.claude/commands/ant/pause-colony.md +23 -27
- package/.claude/commands/ant/phase.md +40 -42
- package/.claude/commands/ant/pheromones.md +156 -0
- package/.claude/commands/ant/plan.md +185 -51
- package/.claude/commands/ant/preferences.md +65 -0
- package/.claude/commands/ant/redirect.md +45 -30
- package/.claude/commands/ant/resume-colony.md +51 -27
- package/.claude/commands/ant/resume.md +314 -94
- package/.claude/commands/ant/run.md +195 -0
- package/.claude/commands/ant/seal.md +650 -221
- package/.claude/commands/ant/skill-create.md +286 -0
- package/.claude/commands/ant/status.md +196 -31
- package/.claude/commands/ant/swarm.md +16 -46
- package/.claude/commands/ant/tunnels.md +280 -105
- package/.claude/commands/ant/update.md +73 -89
- package/.claude/commands/ant/verify-castes.md +100 -42
- package/.claude/commands/ant/watch.md +14 -12
- package/.opencode/agents/aether-ambassador.md +63 -20
- package/.opencode/agents/aether-archaeologist.md +29 -12
- package/.opencode/agents/aether-architect.md +103 -36
- package/.opencode/agents/aether-auditor.md +51 -18
- package/.opencode/agents/aether-builder.md +70 -20
- package/.opencode/agents/aether-chaos.md +29 -12
- package/.opencode/agents/aether-chronicler.md +60 -18
- package/.opencode/agents/aether-gatekeeper.md +27 -18
- package/.opencode/agents/aether-includer.md +27 -18
- package/.opencode/agents/aether-keeper.md +89 -18
- package/.opencode/agents/aether-measurer.md +27 -18
- package/.opencode/agents/aether-oracle.md +137 -0
- package/.opencode/agents/aether-probe.md +60 -18
- package/.opencode/agents/aether-queen.md +172 -24
- package/.opencode/agents/aether-route-setter.md +57 -12
- package/.opencode/agents/aether-sage.md +26 -18
- package/.opencode/agents/aether-scout.md +28 -20
- package/.opencode/agents/aether-surveyor-disciplines.md +59 -2
- package/.opencode/agents/aether-surveyor-nest.md +59 -2
- package/.opencode/agents/aether-surveyor-pathogens.md +57 -2
- package/.opencode/agents/aether-surveyor-provisions.md +59 -2
- package/.opencode/agents/aether-tracker.md +64 -18
- package/.opencode/agents/aether-watcher.md +66 -19
- package/.opencode/agents/aether-weaver.md +61 -18
- package/.opencode/commands/ant/archaeology.md +7 -14
- package/.opencode/commands/ant/build.md +437 -257
- package/.opencode/commands/ant/chaos.md +7 -24
- package/.opencode/commands/ant/colonize.md +8 -17
- package/.opencode/commands/ant/continue.md +661 -142
- package/.opencode/commands/ant/council.md +11 -22
- package/.opencode/commands/ant/data-clean.md +77 -0
- package/.opencode/commands/ant/dream.md +15 -17
- package/.opencode/commands/ant/entomb.md +133 -62
- package/.opencode/commands/ant/export-signals.md +54 -0
- package/.opencode/commands/ant/feedback.md +24 -5
- package/.opencode/commands/ant/flag.md +16 -4
- package/.opencode/commands/ant/flags.md +24 -10
- package/.opencode/commands/ant/focus.md +22 -5
- package/.opencode/commands/ant/help.md +41 -8
- package/.opencode/commands/ant/history.md +9 -0
- package/.opencode/commands/ant/import-signals.md +68 -0
- package/.opencode/commands/ant/init.md +374 -167
- package/.opencode/commands/ant/insert-phase.md +107 -0
- package/.opencode/commands/ant/interpret.md +16 -0
- package/.opencode/commands/ant/lay-eggs.md +184 -112
- package/.opencode/commands/ant/maturity.md +18 -2
- package/.opencode/commands/ant/memory-details.md +83 -0
- package/.opencode/commands/ant/migrate-state.md +12 -0
- package/.opencode/commands/ant/oracle.md +322 -67
- package/.opencode/commands/ant/organize.md +18 -16
- package/.opencode/commands/ant/patrol.md +626 -0
- package/.opencode/commands/ant/pause-colony.md +12 -29
- package/.opencode/commands/ant/phase.md +30 -40
- package/.opencode/commands/ant/pheromones.md +162 -0
- package/.opencode/commands/ant/plan.md +184 -56
- package/.opencode/commands/ant/preferences.md +71 -0
- package/.opencode/commands/ant/redirect.md +22 -5
- package/.opencode/commands/ant/resume-colony.md +38 -27
- package/.opencode/commands/ant/resume.md +385 -0
- package/.opencode/commands/ant/run.md +201 -0
- package/.opencode/commands/ant/seal.md +259 -45
- package/.opencode/commands/ant/skill-create.md +63 -0
- package/.opencode/commands/ant/status.md +135 -31
- package/.opencode/commands/ant/swarm.md +3 -345
- package/.opencode/commands/ant/tunnels.md +152 -9
- package/.opencode/commands/ant/update.md +70 -91
- package/.opencode/commands/ant/verify-castes.md +96 -42
- package/.opencode/commands/ant/watch.md +7 -0
- package/CHANGELOG.md +356 -0
- package/README.md +203 -573
- package/bin/cli.js +455 -527
- package/bin/generate-commands.js +186 -0
- package/bin/generate-commands.sh +127 -88
- package/bin/lib/init.js +13 -3
- package/bin/lib/spawn-logger.js +0 -15
- package/bin/lib/update-transaction.js +392 -140
- package/bin/npx-install.js +178 -0
- package/bin/sync-to-runtime.sh +5 -137
- package/bin/validate-package.sh +166 -0
- package/package.json +14 -7
- package/.opencode/agents/aether-guardian.md +0 -107
- package/.opencode/agents/workers.md +0 -1034
- package/bin/lib/model-profiles.js +0 -445
- package/bin/lib/model-verify.js +0 -288
- package/bin/lib/proxy-health.js +0 -253
- package/bin/lib/telemetry.js +0 -441
- package/runtime/CONTEXT.md +0 -160
- package/runtime/QUEEN_ANT_ARCHITECTURE.md +0 -402
- package/runtime/aether-utils.sh +0 -3879
- package/runtime/data/signatures.json +0 -41
- package/runtime/docs/AETHER-2.0-IMPLEMENTATION-PLAN.md +0 -1343
- package/runtime/docs/AETHER-PHEROMONE-SYSTEM-MASTER-SPEC.md +0 -2642
- package/runtime/docs/PHEROMONE-INJECTION.md +0 -240
- package/runtime/docs/PHEROMONE-INTEGRATION.md +0 -192
- package/runtime/docs/PHEROMONE-SYSTEM-DESIGN.md +0 -426
- package/runtime/docs/README.md +0 -94
- package/runtime/docs/VISUAL-OUTPUT-SPEC.md +0 -219
- package/runtime/docs/biological-reference.md +0 -272
- package/runtime/docs/codebase-review.md +0 -399
- package/runtime/docs/command-sync.md +0 -164
- package/runtime/docs/constraints.md +0 -116
- package/runtime/docs/implementation-learnings.md +0 -89
- package/runtime/docs/known-issues.md +0 -217
- package/runtime/docs/namespace.md +0 -148
- package/runtime/docs/pathogen-schema-example.json +0 -36
- package/runtime/docs/pathogen-schema.md +0 -111
- package/runtime/docs/planning-discipline.md +0 -159
- package/runtime/docs/progressive-disclosure.md +0 -184
- package/runtime/lib/queen-utils.sh +0 -729
- package/runtime/model-profiles.yaml +0 -100
- package/runtime/planning.md +0 -159
- package/runtime/recover.sh +0 -136
- package/runtime/templates/QUEEN.md.template +0 -79
- package/runtime/utils/chamber-utils.sh +0 -285
- package/runtime/utils/file-lock.sh +0 -122
- package/runtime/utils/spawn-tree.sh +0 -428
- package/runtime/utils/spawn-with-model.sh +0 -56
- package/runtime/utils/xml-utils.sh +0 -2196
- package/runtime/workers-new-castes.md +0 -516
- /package/{runtime → .aether/docs/disciplines}/coding-standards.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/debugging.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/learning.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/tdd.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/verification-loop.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/verification.md +0 -0
- /package/{runtime → .aether}/schemas/aether-types.xsd +0 -0
- /package/{runtime → .aether}/schemas/colony-registry.xsd +0 -0
- /package/{runtime → .aether}/schemas/pheromone.xsd +0 -0
- /package/{runtime → .aether}/schemas/prompt.xsd +0 -0
- /package/{runtime → .aether}/schemas/queen-wisdom.xsd +0 -0
- /package/{runtime → .aether}/schemas/worker-priming.xsd +0 -0
- /package/{runtime → .aether}/utils/colorize-log.sh +0 -0
- /package/{runtime → .aether}/utils/queen-to-md.xsl +0 -0
|
@@ -1,1050 +1,65 @@
|
|
|
1
|
+
<!-- Generated from .aether/commands/build.yaml - DO NOT EDIT DIRECTLY -->
|
|
1
2
|
---
|
|
2
3
|
name: ant:build
|
|
3
4
|
description: "🔨🐜🏗️🐜🔨 Build a phase with pure emergence - colony self-organizes and completes tasks"
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
You are the **Queen**.
|
|
7
|
+
You are the **Queen**. Execute `/ant:build` through modular playbooks.
|
|
7
8
|
|
|
8
9
|
The phase to build is: `$ARGUMENTS`
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
+
## Purpose
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
This command is intentionally short. It orchestrates build execution by loading
|
|
14
|
+
smaller playbooks in sequence. This improves instruction-following reliability
|
|
15
|
+
without changing build behavior.
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
## Rules
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
1. Do **not** invoke nested slash commands like `/ant:build-prep`.
|
|
20
|
+
2. Use the Read tool to load each playbook file, then execute it.
|
|
21
|
+
3. Preserve variables/results from prior stages and pass them forward.
|
|
22
|
+
4. Stop immediately on hard failure conditions defined in any stage.
|
|
23
|
+
5. Keep existing behavior and output format from the playbooks.
|
|
17
24
|
|
|
18
|
-
|
|
25
|
+
## Stage Order
|
|
19
26
|
|
|
20
|
-
|
|
27
|
+
Run these stages in order:
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
1. `.aether/docs/command-playbooks/build-prep.md`
|
|
30
|
+
2. `.aether/docs/command-playbooks/build-context.md`
|
|
31
|
+
3. `.aether/docs/command-playbooks/build-wave.md`
|
|
32
|
+
4. `.aether/docs/command-playbooks/build-verify.md`
|
|
33
|
+
5. `.aether/docs/command-playbooks/build-complete.md`
|
|
25
34
|
|
|
26
|
-
|
|
35
|
+
## Execution Contract
|
|
27
36
|
|
|
28
|
-
|
|
37
|
+
For each stage:
|
|
29
38
|
|
|
30
|
-
|
|
39
|
+
1. Read the file with the Read tool.
|
|
40
|
+
2. Execute the instructions exactly as written.
|
|
41
|
+
3. Keep an in-memory stage result record:
|
|
42
|
+
- `stage_name`
|
|
43
|
+
- `status` (`ok` or `failed`)
|
|
44
|
+
- `key_outputs` (values needed downstream)
|
|
45
|
+
4. If `status == failed`, halt and report the failure with recovery options.
|
|
31
46
|
|
|
32
|
-
|
|
33
|
-
1. Parse error JSON
|
|
34
|
-
2. If error code is E_FILE_NOT_FOUND: "No colony initialized. Run /ant:init first." and stop
|
|
35
|
-
3. If validation error: Display error details with recovery suggestion and stop
|
|
36
|
-
4. For other errors: Display generic error and suggest /ant:status for diagnostics
|
|
47
|
+
## Required Cross-Stage State
|
|
37
48
|
|
|
38
|
-
|
|
39
|
-
1. Parse the state JSON from result field
|
|
40
|
-
2. Check if goal is null - if so: "No colony initialized. Run /ant:init first." and stop
|
|
41
|
-
3. Extract current_phase and phase name from plan.phases[current_phase - 1].name
|
|
42
|
-
4. Display brief resumption context:
|
|
43
|
-
```
|
|
44
|
-
🔄 Resuming: Phase X - Name
|
|
45
|
-
```
|
|
46
|
-
(If HANDOFF.md exists, this provides orientation before the build proceeds)
|
|
49
|
+
Carry these values forward when produced:
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
- `phase_id`
|
|
52
|
+
- `visual_mode`
|
|
53
|
+
- `verbose_mode`
|
|
54
|
+
- `suggest_enabled`
|
|
55
|
+
- `colony_depth`
|
|
56
|
+
- `prompt_section`
|
|
57
|
+
- `wave_results`
|
|
58
|
+
- `verification_status`
|
|
59
|
+
- `synthesis_status`
|
|
60
|
+
- `next_action`
|
|
49
61
|
|
|
50
|
-
|
|
62
|
+
## Final Output
|
|
51
63
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
2. Check remaining arguments for flags:
|
|
55
|
-
- If contains `--verbose` or `-v`: set `verbose_mode = true`
|
|
56
|
-
- If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
|
|
57
|
-
- If contains `--model <name>` or `-m <name>`: set `cli_model_override = <name>`
|
|
58
|
-
- Otherwise: set `visual_mode = true` (visual is default)
|
|
59
|
-
|
|
60
|
-
If the phase number is empty or not a number:
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
Usage: /ant:build <phase_number> [--verbose|-v] [--no-visual] [--model <model>|-m <model>]
|
|
64
|
-
|
|
65
|
-
Options:
|
|
66
|
-
--verbose, -v Show full completion details (spawn tree, TDD, patterns)
|
|
67
|
-
--no-visual Disable real-time visual display (visual is on by default)
|
|
68
|
-
--model, -m <name> Override model for this build (one-time)
|
|
69
|
-
|
|
70
|
-
Examples:
|
|
71
|
-
/ant:build 1 Build Phase 1 (with visual display)
|
|
72
|
-
/ant:build 1 --verbose Build Phase 1 (full details + visual)
|
|
73
|
-
/ant:build 1 --no-visual Build Phase 1 without visual display
|
|
74
|
-
/ant:build 1 --model glm-5 Build Phase 1 with glm-5 for all workers
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Stop here.
|
|
78
|
-
|
|
79
|
-
**Validate CLI model override (if provided):**
|
|
80
|
-
If `cli_model_override` is set:
|
|
81
|
-
1. Validate the model: `bash .aether/aether-utils.sh model-profile validate "$cli_model_override"`
|
|
82
|
-
2. Parse JSON result - if `.result.valid` is false:
|
|
83
|
-
- Display: `Error: Invalid model "$cli_model_override"`
|
|
84
|
-
- Display: `Valid models: {list from .result.models}`
|
|
85
|
-
- Stop here
|
|
86
|
-
3. If valid: Display `Using override model: {model}`
|
|
87
|
-
|
|
88
|
-
**Auto-upgrade old state:**
|
|
89
|
-
If `version` field is missing, "1.0", or "2.0":
|
|
90
|
-
1. Preserve: `goal`, `state`, `current_phase`, `plan.phases`
|
|
91
|
-
2. Write upgraded v3.0 state (same structure as /ant:init but preserving data)
|
|
92
|
-
3. Output: `State auto-upgraded to v3.0`
|
|
93
|
-
4. Continue with command.
|
|
94
|
-
|
|
95
|
-
Extract:
|
|
96
|
-
- `goal`, `state`, `current_phase` from top level
|
|
97
|
-
- `plan.phases` for phase data
|
|
98
|
-
- `errors.records` for error context
|
|
99
|
-
- `memory` for decisions/learnings
|
|
100
|
-
|
|
101
|
-
**Validate:**
|
|
102
|
-
- If `plan.phases` is empty -> output `No project plan. Run /ant:plan first.` and stop.
|
|
103
|
-
- Find the phase matching the requested ID. If not found -> output `Phase {id} not found.` and stop.
|
|
104
|
-
- If the phase status is `"completed"` -> output `Phase {id} already completed.` and stop.
|
|
105
|
-
|
|
106
|
-
### Step 1.5: Blocker Advisory (Non-blocking)
|
|
107
|
-
|
|
108
|
-
Check for unresolved blocker flags on the requested phase:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
bash .aether/aether-utils.sh flag-check-blockers {phase_number}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Parse the JSON result (`.result.blockers`):
|
|
115
|
-
|
|
116
|
-
- **If blockers == 0:** Display nothing (or optionally a brief `No active blockers for Phase {id}.` line). Proceed to Step 2.
|
|
117
|
-
- **If blockers > 0:** Retrieve blocker details:
|
|
118
|
-
```bash
|
|
119
|
-
bash .aether/aether-utils.sh flag-list --type blocker --phase {phase_number}
|
|
120
|
-
```
|
|
121
|
-
Parse `.result.flags` and display an advisory warning:
|
|
122
|
-
```
|
|
123
|
-
⚠️ BLOCKER ADVISORY: {blockers} unresolved blocker(s) for Phase {id}
|
|
124
|
-
{for each flag in result.flags:}
|
|
125
|
-
- [{flag.id}] {flag.title}
|
|
126
|
-
{end for}
|
|
127
|
-
|
|
128
|
-
Consider reviewing with /ant:flags or auto-fixing with /ant:swarm before building.
|
|
129
|
-
Proceeding anyway...
|
|
130
|
-
```
|
|
131
|
-
**This is advisory only — do NOT stop.** Continue to Step 2 regardless.
|
|
132
|
-
|
|
133
|
-
### Step 2: Update State
|
|
134
|
-
|
|
135
|
-
Read then update `.aether/data/COLONY_STATE.json`:
|
|
136
|
-
- Set `state` to `"EXECUTING"`
|
|
137
|
-
- Set `current_phase` to the phase number
|
|
138
|
-
- Set the phase's `status` to `"in_progress"` in `plan.phases[N]`
|
|
139
|
-
- Add `build_started_at` field with current ISO-8601 UTC timestamp
|
|
140
|
-
- Append to `events`: `"<timestamp>|phase_started|build|Phase <id>: <name> started"`
|
|
141
|
-
|
|
142
|
-
If `events` exceeds 100 entries, keep only the last 100.
|
|
143
|
-
|
|
144
|
-
Write COLONY_STATE.json.
|
|
145
|
-
|
|
146
|
-
### Step 3: Git Checkpoint
|
|
147
|
-
|
|
148
|
-
Create a git checkpoint for rollback capability.
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
git rev-parse --git-dir 2>/dev/null
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
- **If succeeds** (is a git repo):
|
|
155
|
-
1. Check for changes in Aether-managed directories only: `.aether .claude/commands/ant .claude/commands/st .opencode runtime bin`
|
|
156
|
-
2. **If changes exist**: `git stash push -m "aether-checkpoint: pre-phase-$PHASE_NUMBER" -- .aether .claude/commands/ant .claude/commands/st .opencode runtime bin`
|
|
157
|
-
- IMPORTANT: Never use `--include-untracked` — it stashes ALL files including user work!
|
|
158
|
-
- Verify: `git stash list | head -1 | grep "aether-checkpoint"` — warn if empty
|
|
159
|
-
- Store checkpoint as `{type: "stash", ref: "aether-checkpoint: pre-phase-$PHASE_NUMBER"}`
|
|
160
|
-
3. **If clean working tree**: Record `HEAD` hash via `git rev-parse HEAD`
|
|
161
|
-
- Store checkpoint as `{type: "commit", ref: "$HEAD_HASH"}`
|
|
162
|
-
- **If fails** (not a git repo): Set checkpoint to `{type: "none", ref: "(not a git repo)"}`.
|
|
163
|
-
|
|
164
|
-
Rollback procedure: `git stash pop` (if type is "stash") or `git reset --hard $ref` (if type is "commit").
|
|
165
|
-
|
|
166
|
-
Output header:
|
|
167
|
-
|
|
168
|
-
```
|
|
169
|
-
🔨🐜🏗️🐜🔨 ═══════════════════════════════════════════════════
|
|
170
|
-
B U I L D I N G P H A S E {id}
|
|
171
|
-
═══════════════════════════════════════════════════ 🔨🐜🏗️🐜🔨
|
|
172
|
-
|
|
173
|
-
📍 Phase {id}: {name}
|
|
174
|
-
💾 Git Checkpoint: {checkpoint_type} → {checkpoint_ref}
|
|
175
|
-
🔄 Rollback: `git stash pop` (stash) or `git reset --hard {ref}` (commit)
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Step 4: Load Constraints
|
|
179
|
-
|
|
180
|
-
Read `.aether/data/constraints.json` if it exists.
|
|
181
|
-
|
|
182
|
-
Format for display:
|
|
183
|
-
```
|
|
184
|
-
CONSTRAINTS:
|
|
185
|
-
FOCUS: {focus areas, comma-separated}
|
|
186
|
-
AVOID: {patterns to avoid from constraints}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
If file doesn't exist or is empty:
|
|
190
|
-
```
|
|
191
|
-
CONSTRAINTS: (none)
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Step 4.0: Load Territory Survey
|
|
195
|
-
|
|
196
|
-
Check if territory survey exists and load relevant documents:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
bash .aether/aether-utils.sh survey-load "{phase_name}" 2>/dev/null
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**Parse the JSON response:**
|
|
203
|
-
- If `.ok` is false: Set `survey_docs = null` and skip survey loading
|
|
204
|
-
- If successful: Extract `.docs` (comma-separated list) and `.dir`
|
|
205
|
-
|
|
206
|
-
**Determine phase type from phase name:**
|
|
207
|
-
| Phase Contains | Documents to Load |
|
|
208
|
-
|----------------|-------------------|
|
|
209
|
-
| UI, frontend, component, button, page | DISCIPLINES.md, CHAMBERS.md |
|
|
210
|
-
| API, endpoint, backend, route | BLUEPRINT.md, DISCIPLINES.md |
|
|
211
|
-
| database, schema, model, migration | BLUEPRINT.md, PROVISIONS.md |
|
|
212
|
-
| test, spec, coverage | SENTINEL-PROTOCOLS.md, DISCIPLINES.md |
|
|
213
|
-
| integration, external, client | TRAILS.md, PROVISIONS.md |
|
|
214
|
-
| refactor, cleanup, debt | PATHOGENS.md, BLUEPRINT.md |
|
|
215
|
-
| setup, config, initialize | PROVISIONS.md, CHAMBERS.md |
|
|
216
|
-
| *default* | PROVISIONS.md, BLUEPRINT.md |
|
|
217
|
-
|
|
218
|
-
**Read the relevant survey documents** from `.aether/data/survey/`:
|
|
219
|
-
- Extract key patterns to follow
|
|
220
|
-
- Note file locations for new code
|
|
221
|
-
- Identify known concerns to avoid
|
|
222
|
-
|
|
223
|
-
**Display summary:**
|
|
224
|
-
```
|
|
225
|
-
🗺️ SURVEY LOADED
|
|
226
|
-
================
|
|
227
|
-
{for each doc loaded}
|
|
228
|
-
{emoji} {filename} — {brief description}
|
|
229
|
-
{/for}
|
|
230
|
-
|
|
231
|
-
{if no survey}
|
|
232
|
-
(No territory survey — run /ant:colonize for deeper context)
|
|
233
|
-
{/if}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
**Store for builder injection:**
|
|
237
|
-
- `survey_patterns` — patterns to follow
|
|
238
|
-
- `survey_locations` — where to place files
|
|
239
|
-
- `survey_concerns` — concerns to avoid
|
|
240
|
-
|
|
241
|
-
### Step 4.1: Load QUEEN.md Wisdom
|
|
242
|
-
|
|
243
|
-
Call `queen-read` to extract eternal wisdom for worker priming:
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
bash .aether/aether-utils.sh queen-read 2>/dev/null
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
**Parse the JSON response:**
|
|
250
|
-
- If `.ok` is false or command fails: Set `queen_wisdom = null` and skip wisdom injection
|
|
251
|
-
- If successful: Extract wisdom sections from `.result.wisdom`
|
|
252
|
-
|
|
253
|
-
**Store wisdom variables:**
|
|
254
|
-
```
|
|
255
|
-
queen_philosophies = .result.wisdom.philosophies (if .result.priming.has_philosophies)
|
|
256
|
-
queen_patterns = .result.wisdom.patterns (if .result.priming.has_patterns)
|
|
257
|
-
queen_redirects = .result.wisdom.redirects (if .result.priming.has_redirects)
|
|
258
|
-
queen_stack_wisdom = .result.wisdom.stack_wisdom (if .result.priming.has_stack_wisdom)
|
|
259
|
-
queen_decrees = .result.wisdom.decrees (if .result.priming.has_decrees)
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**Display summary (if any wisdom exists):**
|
|
263
|
-
```
|
|
264
|
-
📜 QUEEN WISDOM LOADED
|
|
265
|
-
=====================
|
|
266
|
-
{if queen_philosophies:} 📜 Philosophies: yes{/if}
|
|
267
|
-
{if queen_patterns:} 🧭 Patterns: yes{/if}
|
|
268
|
-
{if queen_redirects:} ⚠️ Redirects: yes{/if}
|
|
269
|
-
{if queen_stack_wisdom:} 🔧 Stack Wisdom: yes{/if}
|
|
270
|
-
{if queen_decrees:} 🏛️ Decrees: yes{/if}
|
|
271
|
-
|
|
272
|
-
{if none exist:} (no eternal wisdom recorded yet){/if}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
**Graceful handling:** If QUEEN.md doesn't exist or `queen-read` fails, continue without wisdom injection. Workers will receive standard prompts.
|
|
276
|
-
|
|
277
|
-
### Step 4.2: Archaeologist Pre-Build Scan
|
|
278
|
-
|
|
279
|
-
**Conditional step — only fires when the phase modifies existing files.**
|
|
280
|
-
|
|
281
|
-
1. **Detect existing-file modification:**
|
|
282
|
-
Examine each task in the phase. Look at task descriptions, constraints, and hints for signals:
|
|
283
|
-
- Keywords: "update", "modify", "add to", "integrate into", "extend", "change", "refactor", "fix"
|
|
284
|
-
- References to existing file paths (files that already exist in the repo)
|
|
285
|
-
- Task type: if a task is purely "create new file X" with no references to existing code, it is new-file-only
|
|
286
|
-
|
|
287
|
-
**If ALL tasks are new-file-only** (no existing files will be modified):
|
|
288
|
-
- Skip this step silently — produce no output, no spawn
|
|
289
|
-
- Proceed directly to Step 5
|
|
290
|
-
|
|
291
|
-
2. **If existing code modification detected — spawn Archaeologist Scout:**
|
|
292
|
-
|
|
293
|
-
Generate archaeologist name and log:
|
|
294
|
-
```bash
|
|
295
|
-
bash .aether/aether-utils.sh generate-ant-name "archaeologist"
|
|
296
|
-
bash .aether/aether-utils.sh spawn-log "Queen" "scout" "{archaeologist_name}" "Pre-build archaeology scan"
|
|
297
|
-
bash .aether/aether-utils.sh swarm-display-update "{archaeologist_name}" "scout" "excavating" "Pre-build archaeology scan" "Queen" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 15
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Display:
|
|
301
|
-
```
|
|
302
|
-
🏺🐜 Archaeologist {archaeologist_name} spawning
|
|
303
|
-
Scanning history of files to be modified...
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
Spawn a Scout (using Task tool with `subagent_type="aether-archaeologist"`) with this prompt:
|
|
307
|
-
# FALLBACK: If "Agent type not found", use general-purpose and inject role: "You are an Archaeologist Ant - git historian that excavates why code exists."
|
|
308
|
-
|
|
309
|
-
```
|
|
310
|
-
You are {Archaeologist-Name}, a 🏺🐜 Archaeologist Ant.
|
|
311
|
-
|
|
312
|
-
Mission: Pre-build archaeology scan
|
|
313
|
-
|
|
314
|
-
Files: {list of existing files that will be modified}
|
|
315
|
-
|
|
316
|
-
Work:
|
|
317
|
-
1. Read each file to understand current state
|
|
318
|
-
2. Run: git log --oneline -15 -- "{file_path}" for history
|
|
319
|
-
3. Run: git log --all --grep="fix\|bug\|workaround\|hack\|revert" --oneline -- "{file_path}" for incident history
|
|
320
|
-
4. Run: git blame "{file_path}" | head -40 for authorship
|
|
321
|
-
5. Note TODO/FIXME/HACK markers
|
|
322
|
-
|
|
323
|
-
Log activity: bash .aether/aether-utils.sh activity-log "READ" "{Ant-Name}" "description"
|
|
324
|
-
|
|
325
|
-
Report (plain text):
|
|
326
|
-
- WHY key code sections exist (from commits)
|
|
327
|
-
- Known workarounds/hacks to preserve
|
|
328
|
-
- Key architectural decisions
|
|
329
|
-
- Areas of caution (high churn, reverts, emergencies)
|
|
330
|
-
- Stable bedrock vs volatile sand sections
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
**Wait for results** (blocking — use TaskOutput with `block: true`).
|
|
334
|
-
|
|
335
|
-
Log completion and update swarm display:
|
|
336
|
-
```bash
|
|
337
|
-
bash .aether/aether-utils.sh spawn-complete "{archaeologist_name}" "completed" "Pre-build archaeology scan"
|
|
338
|
-
bash .aether/aether-utils.sh swarm-display-update "{archaeologist_name}" "scout" "completed" "Pre-build archaeology scan" "Queen" '{"read":8,"grep":5,"edit":0,"bash":2}' 100 "fungus_garden" 100
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
3. **Store and display findings:**
|
|
342
|
-
|
|
343
|
-
Store the archaeologist's output as `archaeology_context`.
|
|
344
|
-
|
|
345
|
-
Display summary:
|
|
346
|
-
```
|
|
347
|
-
🏺 ARCHAEOLOGY CONTEXT
|
|
348
|
-
=====================
|
|
349
|
-
{summary of findings from archaeologist}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
4. **Injection into builder prompts:**
|
|
353
|
-
The `archaeology_context` will be injected into builder prompts in Step 5.1 (see below).
|
|
354
|
-
If this step was skipped (no existing files modified), the archaeology section is omitted from builder prompts.
|
|
355
|
-
|
|
356
|
-
---
|
|
357
|
-
|
|
358
|
-
### Step 5: Initialize Swarm Display and Analyze Tasks
|
|
359
|
-
|
|
360
|
-
**YOU (the Queen) will spawn workers directly. Do NOT delegate to a single Prime Worker.**
|
|
361
|
-
|
|
362
|
-
**Initialize visual swarm tracking:**
|
|
363
|
-
```bash
|
|
364
|
-
# Generate unique build ID
|
|
365
|
-
build_id="build-$(date +%s)"
|
|
366
|
-
|
|
367
|
-
# Initialize swarm display for this build
|
|
368
|
-
bash .aether/aether-utils.sh swarm-display-init "$build_id"
|
|
369
|
-
|
|
370
|
-
# Log phase start
|
|
371
|
-
bash .aether/aether-utils.sh activity-log "EXECUTING" "Queen" "Phase {id}: {name} - Queen dispatching workers"
|
|
372
|
-
|
|
373
|
-
# Display animated header
|
|
374
|
-
bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Phase {id}: {name}" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 10 "fungus_garden" 0
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
**Show real-time display header:**
|
|
378
|
-
```
|
|
379
|
-
🔨 COLONY BUILD INITIATED
|
|
380
|
-
═══════════════════════════════════════════════════
|
|
381
|
-
Phase {id}: {name}
|
|
382
|
-
Build ID: {build_id}
|
|
383
|
-
|
|
384
|
-
Launching swarm display...
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
Analyze the phase tasks:
|
|
388
|
-
|
|
389
|
-
Analyze the phase tasks:
|
|
390
|
-
|
|
391
|
-
1. **Group tasks by dependencies:**
|
|
392
|
-
- **Wave 1:** Tasks with `depends_on: "none"` or `depends_on: []` (can run in parallel)
|
|
393
|
-
- **Wave 2:** Tasks depending on Wave 1 tasks
|
|
394
|
-
- **Wave 3+:** Continue until all tasks assigned
|
|
395
|
-
|
|
396
|
-
2. **Assign castes:**
|
|
397
|
-
- Implementation tasks → 🔨🐜 Builder
|
|
398
|
-
- Research/docs tasks → 🔍🐜 Scout
|
|
399
|
-
- Testing/validation → 👁️🐜 Watcher (ALWAYS spawn at least one)
|
|
400
|
-
- Resilience testing → 🎲🐜 Chaos (ALWAYS spawn one after Watcher)
|
|
401
|
-
|
|
402
|
-
3. **Generate ant names for each worker:**
|
|
403
|
-
```bash
|
|
404
|
-
bash .aether/aether-utils.sh generate-ant-name "builder"
|
|
405
|
-
bash .aether/aether-utils.sh generate-ant-name "watcher"
|
|
406
|
-
bash .aether/aether-utils.sh generate-ant-name "chaos"
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
Display spawn plan with caste emojis:
|
|
410
|
-
```
|
|
411
|
-
🐜 SPAWN PLAN
|
|
412
|
-
|
|
413
|
-
Wave 1 — Parallel
|
|
414
|
-
🔨🐜 {Builder-Name} Task {id} {description}
|
|
415
|
-
🔨🐜 {Builder-Name} Task {id} {description}
|
|
416
|
-
|
|
417
|
-
Wave 2 — After Wave 1
|
|
418
|
-
🔨🐜 {Builder-Name} Task {id} {description}
|
|
419
|
-
|
|
420
|
-
Verification
|
|
421
|
-
👁️🐜 {Watcher-Name} Verify all work independently
|
|
422
|
-
🎲🐜 {Chaos-Name} Resilience testing (after Watcher)
|
|
423
|
-
|
|
424
|
-
Total: {N} Builders + 1 Watcher + 1 Chaos = {N+2} spawns
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
**Caste Emoji Legend:**
|
|
428
|
-
- 🔨🐜 Builder (cyan if color enabled)
|
|
429
|
-
- 👁️🐜 Watcher (green if color enabled)
|
|
430
|
-
- 🎲🐜 Chaos (red if color enabled)
|
|
431
|
-
- 🔍🐜 Scout (yellow if color enabled)
|
|
432
|
-
- 🏺🐜 Archaeologist (magenta if color enabled)
|
|
433
|
-
- 🥚 Queen/Prime
|
|
434
|
-
|
|
435
|
-
**Every spawn must show its caste emoji.**
|
|
436
|
-
|
|
437
|
-
### Step 5.1: Spawn Wave 1 Workers (Parallel)
|
|
438
|
-
|
|
439
|
-
**CRITICAL: Spawn ALL Wave 1 workers in a SINGLE message using multiple Task tool calls.**
|
|
440
|
-
|
|
441
|
-
**First, mark build start in context:**
|
|
442
|
-
```bash
|
|
443
|
-
bash .aether/aether-utils.sh context-update build-start {phase_id} {wave_1_worker_count} {wave_1_task_count}
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
For each Wave 1 task, use Task tool with `subagent_type="aether-builder"` (DO NOT use run_in_background - multiple Task calls in a single message run in parallel and block until complete):
|
|
447
|
-
|
|
448
|
-
Log each spawn and update swarm display:
|
|
449
|
-
```bash
|
|
450
|
-
bash .aether/aether-utils.sh spawn-log "Queen" "builder" "{ant_name}" "{task_description}"
|
|
451
|
-
bash .aether/aether-utils.sh swarm-display-update "{ant_name}" "builder" "excavating" "{task_description}" "Queen" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 10
|
|
452
|
-
bash .aether/aether-utils.sh context-update worker-spawn "{ant_name}" "builder" "{task_description}"
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
**Builder Worker Prompt (CLEAN OUTPUT):**
|
|
456
|
-
```
|
|
457
|
-
You are {Ant-Name}, a 🔨🐜 Builder Ant.
|
|
458
|
-
|
|
459
|
-
Task {id}: {description}
|
|
460
|
-
|
|
461
|
-
Goal: "{colony_goal}"
|
|
462
|
-
|
|
463
|
-
{ archaeology_context if exists }
|
|
464
|
-
|
|
465
|
-
{ queen_wisdom_section if any wisdom exists }
|
|
466
|
-
|
|
467
|
-
Work:
|
|
468
|
-
1. Read .aether/workers.md for Builder discipline
|
|
469
|
-
2. Implement task, write tests
|
|
470
|
-
3. Log activity: bash .aether/aether-utils.sh activity-log "ACTION" "{Ant-Name}" "description"
|
|
471
|
-
4. Update display: bash .aether/aether-utils.sh swarm-display-update "{Ant-Name}" "builder" "excavating" "current task" "Queen" '{"read":0,"grep":0,"edit":0,"bash":0}' {progress} "fungus_garden" 50
|
|
472
|
-
|
|
473
|
-
Spawn sub-workers ONLY if 3x complexity:
|
|
474
|
-
- Check: bash .aether/aether-utils.sh spawn-can-spawn {depth}
|
|
475
|
-
- Generate name: bash .aether/aether-utils.sh generate-ant-name "builder"
|
|
476
|
-
- Announce: "🐜 Spawning {child_name} for {reason}"
|
|
477
|
-
- Log: bash .aether/aether-utils.sh spawn-log "{Ant-Name}" "builder" "{child_name}" "{task}"
|
|
478
|
-
|
|
479
|
-
Return ONLY this JSON (no other text):
|
|
480
|
-
{"ant_name": "{Ant-Name}", "task_id": "{id}", "status": "completed|failed|blocked", "summary": "What you did", "files_created": [], "files_modified": [], "tests_written": [], "blockers": []}
|
|
481
|
-
```
|
|
482
|
-
|
|
483
|
-
**Queen Wisdom Section Template (injected only if wisdom exists):**
|
|
484
|
-
```
|
|
485
|
-
--- QUEEN WISDOM (Eternal Guidance) ---
|
|
486
|
-
{ if queen_philosophies: }
|
|
487
|
-
📜 Philosophies:
|
|
488
|
-
{queen_philosophies}
|
|
489
|
-
{ endif }
|
|
490
|
-
{ if queen_patterns: }
|
|
491
|
-
🧭 Patterns:
|
|
492
|
-
{queen_patterns}
|
|
493
|
-
{ endif }
|
|
494
|
-
{ if queen_redirects: }
|
|
495
|
-
⚠️ Redirects (AVOID these):
|
|
496
|
-
{queen_redirects}
|
|
497
|
-
{ endif }
|
|
498
|
-
{ if queen_stack_wisdom: }
|
|
499
|
-
🔧 Stack Wisdom:
|
|
500
|
-
{queen_stack_wisdom}
|
|
501
|
-
{ endif }
|
|
502
|
-
{ if queen_decrees: }
|
|
503
|
-
🏛️ Decrees:
|
|
504
|
-
{queen_decrees}
|
|
505
|
-
{ endif }
|
|
506
|
-
--- END QUEEN WISDOM ---
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
### Step 5.2: Process Wave 1 Results
|
|
510
|
-
|
|
511
|
-
**Task calls return results directly (no TaskOutput needed).**
|
|
512
|
-
|
|
513
|
-
**As each worker result arrives, immediately display:**
|
|
514
|
-
```
|
|
515
|
-
✅ 🔨🐜 {Builder-Name} completed Task {id}
|
|
516
|
-
📖{read_count} 🔍{grep_count} ✏️{edit_count} ⚡{bash_count} {elapsed_time}
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
Log and update swarm display:
|
|
520
|
-
```bash
|
|
521
|
-
bash .aether/aether-utils.sh spawn-complete "{ant_name}" "completed" "{summary}"
|
|
522
|
-
bash .aether/aether-utils.sh swarm-display-update "{ant_name}" "builder" "completed" "{task_description}" "Queen" '{"read":5,"grep":3,"edit":2,"bash":1}' 100 "fungus_garden" 100
|
|
523
|
-
bash .aether/aether-utils.sh context-update worker-complete "{ant_name}" "completed"
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
**Parse each worker's JSON output to collect:** status, files_created, files_modified, blockers
|
|
527
|
-
|
|
528
|
-
**Visual Mode: Render live display (if enabled):**
|
|
529
|
-
If `visual_mode` is true, render the swarm display after all workers complete:
|
|
530
|
-
```bash
|
|
531
|
-
bash .aether/aether-utils.sh swarm-display-inline "$build_id"
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
### Step 5.3: Spawn Wave 2+ Workers (Sequential Waves)
|
|
535
|
-
|
|
536
|
-
Repeat Step 5.1-5.2 for each subsequent wave, waiting for previous wave to complete.
|
|
537
|
-
|
|
538
|
-
### Step 5.4: Spawn Watcher for Verification
|
|
539
|
-
|
|
540
|
-
**MANDATORY: Always spawn a Watcher — testing must be independent.**
|
|
541
|
-
|
|
542
|
-
Spawn the Watcher using Task tool with `subagent_type="aether-watcher"` (DO NOT use run_in_background - task blocks until complete):
|
|
543
|
-
|
|
544
|
-
```bash
|
|
545
|
-
bash .aether/aether-utils.sh spawn-log "Queen" "watcher" "{watcher_name}" "Independent verification"
|
|
546
|
-
bash .aether/aether-utils.sh swarm-display-update "{watcher_name}" "watcher" "observing" "Verification in progress" "Queen" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "nursery" 50
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
**Watcher Worker Prompt (CLEAN OUTPUT):**
|
|
550
|
-
```
|
|
551
|
-
You are {Watcher-Name}, a 👁️🐜 Watcher Ant.
|
|
552
|
-
|
|
553
|
-
Verify all work done by Builders in Phase {id}.
|
|
554
|
-
|
|
555
|
-
Files to verify:
|
|
556
|
-
- Created: {list from builder results}
|
|
557
|
-
- Modified: {list from builder results}
|
|
558
|
-
|
|
559
|
-
Verification:
|
|
560
|
-
1. Check files exist (Read each)
|
|
561
|
-
2. Run build/type-check
|
|
562
|
-
3. Run tests if they exist
|
|
563
|
-
4. Check success criteria: {list}
|
|
564
|
-
|
|
565
|
-
Spawn sub-workers if needed:
|
|
566
|
-
- Log: bash .aether/aether-utils.sh spawn-log "{Watcher-Name}" "watcher" "{child}" "{task}"
|
|
567
|
-
- Announce: "🐜 Spawning {child} to investigate {issue}"
|
|
568
|
-
|
|
569
|
-
Return ONLY this JSON:
|
|
570
|
-
{"ant_name": "{Watcher-Name}", "verification_passed": true|false, "files_verified": [], "issues_found": [], "quality_score": N, "recommendation": "proceed|fix_required"}
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
### Step 5.5: Process Watcher Results
|
|
574
|
-
|
|
575
|
-
**Task call returns results directly (no TaskOutput needed).**
|
|
576
|
-
|
|
577
|
-
**Parse the Watcher's JSON response:** verification_passed, issues_found, quality_score, recommendation
|
|
578
|
-
|
|
579
|
-
**Store results for synthesis in Step 5.7**
|
|
580
|
-
|
|
581
|
-
**Update swarm display when Watcher completes:**
|
|
582
|
-
```bash
|
|
583
|
-
bash .aether/aether-utils.sh swarm-display-update "{watcher_name}" "watcher" "completed" "Verification complete" "Queen" '{"read":3,"grep":2,"edit":0,"bash":1}' 100 "nursery" 100
|
|
584
|
-
```
|
|
585
|
-
|
|
586
|
-
### Step 5.6: Spawn Chaos Ant for Resilience Testing
|
|
587
|
-
|
|
588
|
-
**After the Watcher completes, spawn a Chaos Ant to probe the phase work for edge cases and boundary conditions.**
|
|
589
|
-
|
|
590
|
-
Generate a chaos ant name and log the spawn:
|
|
591
|
-
```bash
|
|
592
|
-
bash .aether/aether-utils.sh generate-ant-name "chaos"
|
|
593
|
-
bash .aether/aether-utils.sh spawn-log "Queen" "chaos" "{chaos_name}" "Resilience testing of Phase {id} work"
|
|
594
|
-
bash .aether/aether-utils.sh swarm-display-update "{chaos_name}" "chaos" "probing" "Resilience testing" "Queen" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "refuse_pile" 75
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
**Retrieve existing flags for this phase** (to avoid duplicate findings):
|
|
598
|
-
```bash
|
|
599
|
-
bash .aether/aether-utils.sh flag-list --phase {phase_number}
|
|
600
|
-
```
|
|
601
|
-
Parse the result and extract unresolved flag titles into a list: `{existing_flag_titles}` (comma-separated titles from `.result.flags[].title`). If no flags exist, set `{existing_flag_titles}` to "None".
|
|
602
|
-
|
|
603
|
-
Spawn the Chaos Ant using Task tool with `subagent_type="aether-chaos"` (DO NOT use run_in_background - task blocks until complete):
|
|
604
|
-
# FALLBACK: If "Agent type not found", use general-purpose and inject role: "You are a Chaos Ant - resilience tester that probes edge cases and boundary conditions."
|
|
605
|
-
|
|
606
|
-
**Chaos Ant Prompt (CLEAN OUTPUT):**
|
|
607
|
-
```
|
|
608
|
-
You are {Chaos-Name}, a 🎲🐜 Chaos Ant.
|
|
609
|
-
|
|
610
|
-
Test Phase {id} work for edge cases and boundary conditions.
|
|
611
|
-
|
|
612
|
-
Files to test:
|
|
613
|
-
- {list from builder results}
|
|
614
|
-
|
|
615
|
-
Skip these known issues: {existing_flag_titles}
|
|
616
|
-
|
|
617
|
-
Rules:
|
|
618
|
-
- Max 5 scenarios
|
|
619
|
-
- Read-only (don't modify code)
|
|
620
|
-
- Focus: edge cases, boundaries, error handling
|
|
621
|
-
|
|
622
|
-
Return ONLY this JSON:
|
|
623
|
-
{"ant_name": "{Chaos-Name}", "scenarios_tested": 5, "findings": [{"id": 1, "category": "edge_case|boundary|error_handling", "severity": "critical|high|medium|low", "title": "...", "description": "..."}], "overall_resilience": "strong|moderate|weak", "summary": "..."}
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
### Step 5.7: Process Chaos Ant Results
|
|
627
|
-
|
|
628
|
-
**Task call returns results directly (no TaskOutput needed).**
|
|
629
|
-
|
|
630
|
-
**Parse the Chaos Ant's JSON response:** findings, overall_resilience, summary
|
|
631
|
-
|
|
632
|
-
**Store results for synthesis in Step 5.9**
|
|
633
|
-
|
|
634
|
-
**Flag critical/high findings:**
|
|
635
|
-
|
|
636
|
-
If any findings have severity `"critical"` or `"high"`:
|
|
637
|
-
```bash
|
|
638
|
-
# Create a blocker flag for each critical/high chaos finding
|
|
639
|
-
bash .aether/aether-utils.sh flag-add "blocker" "{finding.title}" "{finding.description}" "chaos-testing" {phase_number}
|
|
640
|
-
```
|
|
641
|
-
|
|
642
|
-
Log the flag:
|
|
643
|
-
```bash
|
|
644
|
-
bash .aether/aether-utils.sh activity-log "FLAG" "Chaos" "Created blocker: {finding.title}"
|
|
645
|
-
```
|
|
646
|
-
|
|
647
|
-
Log chaos ant completion and update swarm display:
|
|
648
|
-
```bash
|
|
649
|
-
bash .aether/aether-utils.sh spawn-complete "{chaos_name}" "completed" "{summary}"
|
|
650
|
-
bash .aether/aether-utils.sh swarm-display-update "{chaos_name}" "chaos" "completed" "Resilience testing done" "Queen" '{"read":2,"grep":1,"edit":0,"bash":0}' 100 "refuse_pile" 100
|
|
651
|
-
```
|
|
652
|
-
|
|
653
|
-
### Step 5.8: Create Flags for Verification Failures
|
|
654
|
-
|
|
655
|
-
If the Watcher reported `verification_passed: false` or `recommendation: "fix_required"`:
|
|
656
|
-
|
|
657
|
-
For each issue in `issues_found`:
|
|
658
|
-
```bash
|
|
659
|
-
# Create a blocker flag for each verification failure
|
|
660
|
-
bash .aether/aether-utils.sh flag-add "blocker" "{issue_title}" "{issue_description}" "verification" {phase_number}
|
|
661
|
-
```
|
|
662
|
-
|
|
663
|
-
Log the flag creation:
|
|
664
|
-
```bash
|
|
665
|
-
bash .aether/aether-utils.sh activity-log "FLAG" "Watcher" "Created blocker: {issue_title}"
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
This ensures verification failures are persisted as blockers that survive context resets. Chaos Ant findings are flagged in Step 5.7.
|
|
669
|
-
|
|
670
|
-
### Step 5.9: Synthesize Results
|
|
671
|
-
|
|
672
|
-
**This step runs after all worker tasks have completed (Builders, Watcher, Chaos).**
|
|
673
|
-
|
|
674
|
-
Collect all worker outputs and create phase summary:
|
|
675
|
-
|
|
676
|
-
```json
|
|
677
|
-
{
|
|
678
|
-
"status": "completed" | "failed" | "blocked",
|
|
679
|
-
"summary": "...",
|
|
680
|
-
"tasks_completed": [...],
|
|
681
|
-
"tasks_failed": [...],
|
|
682
|
-
"files_created": [...],
|
|
683
|
-
"files_modified": [...],
|
|
684
|
-
"spawn_metrics": {
|
|
685
|
-
"spawn_count": {total workers spawned, including archaeologist if Step 4.5 fired},
|
|
686
|
-
"builder_count": {N},
|
|
687
|
-
"watcher_count": 1,
|
|
688
|
-
"chaos_count": 1,
|
|
689
|
-
"archaeologist_count": {0 or 1, conditional on Step 4.5},
|
|
690
|
-
"parallel_batches": {number of waves}
|
|
691
|
-
},
|
|
692
|
-
"spawn_tree": {
|
|
693
|
-
"{Archaeologist-Name}": {"caste": "archaeologist", "task": "pre-build history scan", "status": "completed"},
|
|
694
|
-
"{Builder-Name}": {"caste": "builder", "task": "...", "status": "completed"},
|
|
695
|
-
"{Watcher-Name}": {"caste": "watcher", "task": "verify", "status": "completed"},
|
|
696
|
-
"{Chaos-Name}": {"caste": "chaos", "task": "resilience testing", "status": "completed"}
|
|
697
|
-
},
|
|
698
|
-
"verification": {from Watcher output},
|
|
699
|
-
"resilience": {from Chaos Ant output},
|
|
700
|
-
"archaeology": {from Archaeologist output, or null if Step 4.5 was skipped},
|
|
701
|
-
"quality_notes": "..."
|
|
702
|
-
}
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
**Graveyard Recording:**
|
|
706
|
-
For each worker that returned `status: "failed"`:
|
|
707
|
-
For each file in that worker's `files_modified` or `files_created`:
|
|
708
|
-
```bash
|
|
709
|
-
bash .aether/aether-utils.sh grave-add "{file}" "{ant_name}" "{task_id}" {phase} "{first blocker or summary}"
|
|
710
|
-
```
|
|
711
|
-
Log the grave marker:
|
|
712
|
-
```bash
|
|
713
|
-
bash .aether/aether-utils.sh activity-log "GRAVE" "Queen" "Grave marker placed at {file} — {ant_name} failed: {summary}"
|
|
714
|
-
```
|
|
715
|
-
|
|
716
|
-
**Error Handoff Update:**
|
|
717
|
-
If workers failed, update handoff with error context for recovery:
|
|
718
|
-
```bash
|
|
719
|
-
cat > .aether/HANDOFF.md << 'HANDOFF_EOF'
|
|
720
|
-
# Colony Session — Build Errors
|
|
721
|
-
|
|
722
|
-
## ⚠️ Build Status: ISSUES DETECTED
|
|
723
|
-
**Phase:** {phase_number} — {phase_name}
|
|
724
|
-
**Status:** Build completed with failures
|
|
725
|
-
**Updated:** $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
726
|
-
|
|
727
|
-
## Failed Workers
|
|
728
|
-
{for each failed worker:}
|
|
729
|
-
- {ant_name}: {failure_summary}
|
|
730
|
-
{end for}
|
|
731
|
-
|
|
732
|
-
## Grave Markers Placed
|
|
733
|
-
{for each grave:}
|
|
734
|
-
- {file}: {caution_level} caution
|
|
735
|
-
{end for}
|
|
736
|
-
|
|
737
|
-
## Recovery Options
|
|
738
|
-
1. Review failures: Check `.aether/data/activity.log`
|
|
739
|
-
2. Fix and retry: `/ant:build {phase_number}`
|
|
740
|
-
3. Swarm fix: `/ant:swarm` for auto-repair
|
|
741
|
-
4. Manual fix: Address issues, then `/ant:continue`
|
|
742
|
-
|
|
743
|
-
## Session Note
|
|
744
|
-
Build completed but workers failed. Grave markers placed.
|
|
745
|
-
Review failures before advancing.
|
|
746
|
-
HANDOFF_EOF
|
|
747
|
-
```
|
|
748
|
-
|
|
749
|
-
Only fires when workers fail. Zero impact on successful builds.
|
|
750
|
-
|
|
751
|
-
--- SPAWN TRACKING ---
|
|
752
|
-
|
|
753
|
-
The spawn tree will be visible in `/ant:watch` because each spawn is logged.
|
|
754
|
-
|
|
755
|
-
--- OUTPUT FORMAT ---
|
|
756
|
-
|
|
757
|
-
Return JSON:
|
|
758
|
-
{
|
|
759
|
-
"status": "completed" | "failed" | "blocked",
|
|
760
|
-
"summary": "What the phase accomplished",
|
|
761
|
-
"tasks_completed": ["1.1", "1.2"],
|
|
762
|
-
"tasks_failed": [],
|
|
763
|
-
"files_created": ["path1", "path2"],
|
|
764
|
-
"files_modified": ["path3"],
|
|
765
|
-
"spawn_metrics": {
|
|
766
|
-
"spawn_count": 6,
|
|
767
|
-
"watcher_count": 1,
|
|
768
|
-
"chaos_count": 1,
|
|
769
|
-
"archaeologist_count": 1,
|
|
770
|
-
"builder_count": 3,
|
|
771
|
-
"parallel_batches": 2,
|
|
772
|
-
"sequential_tasks": 1
|
|
773
|
-
},
|
|
774
|
-
"spawn_tree": {
|
|
775
|
-
"Relic-8": {"caste": "archaeologist", "task": "pre-build history scan", "status": "completed", "children": {}},
|
|
776
|
-
"Hammer-42": {"caste": "builder", "task": "...", "status": "completed", "children": {}},
|
|
777
|
-
"Vigil-17": {"caste": "watcher", "task": "...", "status": "completed", "children": {}},
|
|
778
|
-
"Entropy-9": {"caste": "chaos", "task": "resilience testing", "status": "completed", "children": {}}
|
|
779
|
-
},
|
|
780
|
-
"verification": {
|
|
781
|
-
"build": {"command": "npm run build", "exit_code": 0, "passed": true},
|
|
782
|
-
"tests": {"command": "npm test", "passed": 24, "failed": 0, "total": 24},
|
|
783
|
-
"success_criteria": [
|
|
784
|
-
{"criterion": "API endpoint exists", "evidence": "GET /api/users returns 200", "passed": true},
|
|
785
|
-
{"criterion": "Tests cover happy path", "evidence": "3 tests in users.test.ts", "passed": true}
|
|
786
|
-
]
|
|
787
|
-
},
|
|
788
|
-
"debugging": {
|
|
789
|
-
"issues_encountered": 0,
|
|
790
|
-
"issues_resolved": 0,
|
|
791
|
-
"fix_attempts": 0,
|
|
792
|
-
"architectural_concerns": []
|
|
793
|
-
},
|
|
794
|
-
"tdd": {
|
|
795
|
-
"cycles_completed": 5,
|
|
796
|
-
"tests_added": 5,
|
|
797
|
-
"tests_total": 47,
|
|
798
|
-
"coverage_percent": 85,
|
|
799
|
-
"all_passing": true
|
|
800
|
-
},
|
|
801
|
-
"learning": {
|
|
802
|
-
"patterns_observed": [
|
|
803
|
-
{
|
|
804
|
-
"type": "success",
|
|
805
|
-
"trigger": "when implementing API endpoints",
|
|
806
|
-
"action": "use repository pattern with DI",
|
|
807
|
-
"evidence": "All tests passed first try"
|
|
808
|
-
}
|
|
809
|
-
],
|
|
810
|
-
"instincts_applied": ["instinct_123"],
|
|
811
|
-
"instinct_outcomes": [
|
|
812
|
-
{"id": "instinct_123", "success": true}
|
|
813
|
-
]
|
|
814
|
-
},
|
|
815
|
-
"quality_notes": "Any concerns or recommendations",
|
|
816
|
-
"ui_touched": true | false
|
|
817
|
-
}
|
|
818
|
-
```
|
|
819
|
-
|
|
820
|
-
### Step 6: Visual Checkpoint (if UI touched)
|
|
821
|
-
|
|
822
|
-
Parse synthesis result. If `ui_touched` is true:
|
|
823
|
-
|
|
824
|
-
```
|
|
825
|
-
Visual Checkpoint
|
|
826
|
-
=================
|
|
827
|
-
|
|
828
|
-
UI changes detected. Verify appearance before continuing.
|
|
829
|
-
|
|
830
|
-
Files touched:
|
|
831
|
-
{list files from files_created + files_modified that match UI patterns}
|
|
832
|
-
|
|
833
|
-
Options:
|
|
834
|
-
1. Approve - UI looks correct
|
|
835
|
-
2. Reject - needs changes (describe issues)
|
|
836
|
-
3. Skip - defer visual review
|
|
837
|
-
```
|
|
838
|
-
|
|
839
|
-
Use AskUserQuestion to get approval. Record in events:
|
|
840
|
-
- If approved: `"<timestamp>|visual_approved|build|Phase {id} UI approved"`
|
|
841
|
-
- If rejected: `"<timestamp>|visual_rejected|build|Phase {id} UI rejected: {reason}"`
|
|
842
|
-
|
|
843
|
-
### Step 6.5: Update Handoff Document
|
|
844
|
-
|
|
845
|
-
After synthesis is complete, update the handoff document with current state for session recovery:
|
|
846
|
-
|
|
847
|
-
```bash
|
|
848
|
-
# Update handoff with build results
|
|
849
|
-
jq -n \
|
|
850
|
-
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
851
|
-
--arg goal "$(jq -r '.goal' .aether/data/COLONY_STATE.json)" \
|
|
852
|
-
--arg phase "$(jq -r '.current_phase' .aether/data/COLONY_STATE.json)" \
|
|
853
|
-
--arg phase_name "{phase_name}" \
|
|
854
|
-
--arg status "{synthesis.status}" \
|
|
855
|
-
--arg summary "{synthesis.summary}" \
|
|
856
|
-
--argjson tasks_completed '{synthesis.tasks_completed | length}' \
|
|
857
|
-
--argjson tasks_failed '{synthesis.tasks_failed | length}' \
|
|
858
|
-
--arg next_action "{if synthesis.status == "completed" then "/ant:continue" else "/ant:flags" end}" \
|
|
859
|
-
'{
|
|
860
|
-
"last_updated": $timestamp,
|
|
861
|
-
"goal": $goal,
|
|
862
|
-
"current_phase": $phase,
|
|
863
|
-
"phase_name": $phase_name,
|
|
864
|
-
"build_status": $status,
|
|
865
|
-
"summary": $summary,
|
|
866
|
-
"tasks_completed": $tasks_completed,
|
|
867
|
-
"tasks_failed": $tasks_failed,
|
|
868
|
-
"next_recommended_action": $next_action,
|
|
869
|
-
"can_resume": true,
|
|
870
|
-
"note": "Phase build completed. Run /ant:continue to advance if verification passed."
|
|
871
|
-
}' > .aether/data/last-build-result.json
|
|
872
|
-
|
|
873
|
-
# Write handoff markdown
|
|
874
|
-
cat > .aether/HANDOFF.md << 'HANDOFF_EOF'
|
|
875
|
-
# Colony Session — Build Complete
|
|
876
|
-
|
|
877
|
-
## Quick Resume
|
|
878
|
-
Run `/ant:continue` to advance phase, or `/ant:resume-colony` to restore full context.
|
|
879
|
-
|
|
880
|
-
## State at Build Completion
|
|
881
|
-
- Goal: "$(jq -r '.goal' .aether/data/COLONY_STATE.json)"
|
|
882
|
-
- Phase: {phase_number} — {phase_name}
|
|
883
|
-
- Build Status: {synthesis.status}
|
|
884
|
-
- Updated: $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
885
|
-
|
|
886
|
-
## Build Summary
|
|
887
|
-
{summary}
|
|
888
|
-
|
|
889
|
-
## Tasks
|
|
890
|
-
- Completed: {synthesis.tasks_completed | length}
|
|
891
|
-
- Failed: {synthesis.tasks_failed | length}
|
|
892
|
-
|
|
893
|
-
## Files Changed
|
|
894
|
-
- Created: {synthesis.files_created | length} files
|
|
895
|
-
- Modified: {synthesis.files_modified | length} files
|
|
896
|
-
|
|
897
|
-
## Next Steps
|
|
898
|
-
- If verification passed: `/ant:continue` to advance to next phase
|
|
899
|
-
- If issues found: `/ant:flags` to review blockers
|
|
900
|
-
- To pause: `/ant:pause-colony`
|
|
901
|
-
|
|
902
|
-
## Session Note
|
|
903
|
-
$(if synthesis.status == "completed" then "Build succeeded — ready to advance." else "Build completed with issues — review before continuing." end)
|
|
904
|
-
HANDOFF_EOF
|
|
905
|
-
```
|
|
906
|
-
|
|
907
|
-
This ensures the handoff always reflects the latest build state, even if the session crashes before explicit pause.
|
|
908
|
-
|
|
909
|
-
### Step 6.5: Update Context Document
|
|
910
|
-
|
|
911
|
-
Log this build activity to `.aether/CONTEXT.md`:
|
|
912
|
-
|
|
913
|
-
```bash
|
|
914
|
-
bash .aether/aether-utils.sh context-update activity "build {phase_id}" "{synthesis.status}" "{files_created_count + files_modified_count}"
|
|
915
|
-
```
|
|
916
|
-
|
|
917
|
-
Mark build as complete in context:
|
|
918
|
-
```bash
|
|
919
|
-
bash .aether/aether-utils.sh context-update build-complete "{synthesis.status}" "{synthesis.status == 'completed' ? 'success' : 'failed'}"
|
|
920
|
-
```
|
|
921
|
-
|
|
922
|
-
Also update safe-to-clear status:
|
|
923
|
-
- If build completed successfully: `context-update safe-to-clear "YES" "Build complete, ready to continue"`
|
|
924
|
-
- If build failed: `context-update safe-to-clear "NO" "Build failed — run /ant:swarm or /ant:flags"`
|
|
925
|
-
|
|
926
|
-
### Step 7: Display Results
|
|
927
|
-
|
|
928
|
-
**This step runs ONLY after synthesis is complete. All values come from actual worker results.**
|
|
929
|
-
|
|
930
|
-
**First, render the final swarm display showing all completed workers:**
|
|
931
|
-
```bash
|
|
932
|
-
# Final swarm display update - mark Queen as completed
|
|
933
|
-
bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Phase {id} complete" "Colony" '{"read":10,"grep":5,"edit":5,"bash":2}' 100 "fungus_garden" 100
|
|
934
|
-
|
|
935
|
-
# Render the final swarm display
|
|
936
|
-
bash .aether/aether-utils.sh swarm-display-inline "$build_id"
|
|
937
|
-
```
|
|
938
|
-
|
|
939
|
-
The swarm display will show:
|
|
940
|
-
- 🐜 All workers with their caste emojis (🔨🐜 Builder, 👁️🐜 Watcher, 🎲🐜 Chaos)
|
|
941
|
-
- 📖 Tool usage stats (Read, Grep, Edit, Bash counts)
|
|
942
|
-
- 🏠 Chamber activity map (Fungus Garden, Nursery, Refuse Pile)
|
|
943
|
-
- ✅ Progress bars at 100% for completed work
|
|
944
|
-
- 🌈 Color-coded by caste
|
|
945
|
-
|
|
946
|
-
**Then display build summary based on synthesis results AND `verbose_mode` from Step 1:**
|
|
947
|
-
|
|
948
|
-
**If verbose_mode = false (compact output, ~12 lines):**
|
|
949
|
-
|
|
950
|
-
```
|
|
951
|
-
🔨 PHASE {id} {status_icon}
|
|
952
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
953
|
-
📍 {name}
|
|
954
|
-
📊 {status} | 📁 {files_created count} created, {files_modified count} modified
|
|
955
|
-
🐜 {spawn_count} workers | 🧪 {tests_total} tests {if all_passing}passing{else}{passed}/{total}{end if}
|
|
956
|
-
{if learning.patterns_observed.length > 0:}🧠 +{patterns_observed.length} patterns{end if}
|
|
957
|
-
|
|
958
|
-
{if synthesis.status == "failed" OR verification.recommendation == "fix_required":}
|
|
959
|
-
⚠️ BLOCKERS: {first 2 issues, comma-separated}
|
|
960
|
-
{end if}
|
|
961
|
-
|
|
962
|
-
➡️ Next: {primary_command}
|
|
963
|
-
--verbose for spawn tree, TDD details, patterns
|
|
964
|
-
```
|
|
965
|
-
|
|
966
|
-
**Status icon logic:** completed+proceed = checkmark, blockers = warning, failed = X
|
|
967
|
-
|
|
968
|
-
**Primary command logic:**
|
|
969
|
-
- completed + proceed: `/ant:continue`
|
|
970
|
-
- has blockers: `/ant:flags`
|
|
971
|
-
- failed: `/ant:swarm`
|
|
972
|
-
|
|
973
|
-
**If verbose_mode = true (full output):**
|
|
974
|
-
|
|
975
|
-
```
|
|
976
|
-
🔨🐜🏗️🐜🔨 ═══════════════════════════════════════════════════
|
|
977
|
-
P H A S E {id} C O M P L E T E
|
|
978
|
-
═══════════════════════════════════════════════════ 🔨🐜🏗️🐜🔨
|
|
979
|
-
|
|
980
|
-
📍 Phase {id}: {name}
|
|
981
|
-
📊 Status: {status}
|
|
982
|
-
💾 Git Checkpoint: {commit_hash}
|
|
983
|
-
|
|
984
|
-
📝 Summary:
|
|
985
|
-
{summary from synthesis}
|
|
986
|
-
|
|
987
|
-
🐜 Colony Work Tree:
|
|
988
|
-
👑Queen
|
|
989
|
-
{for each spawn in spawn_tree:}
|
|
990
|
-
├── {caste_emoji}{ant_name}: {task} [{status}]
|
|
991
|
-
{end for}
|
|
992
|
-
|
|
993
|
-
✅ Tasks Completed:
|
|
994
|
-
{for each task in tasks_completed:}
|
|
995
|
-
🐜 {task_id}: done
|
|
996
|
-
{end for}
|
|
997
|
-
{for each task in tasks_failed:}
|
|
998
|
-
❌ {task_id}: failed
|
|
999
|
-
{end for}
|
|
1000
|
-
|
|
1001
|
-
📁 Files: {files_created count} created, {files_modified count} modified
|
|
1002
|
-
|
|
1003
|
-
{if tdd.tests_added > 0:}
|
|
1004
|
-
🧪 TDD: {tdd.cycles_completed} cycles | {tdd.tests_added} tests | {tdd.coverage_percent}% coverage
|
|
1005
|
-
{end if}
|
|
1006
|
-
|
|
1007
|
-
{if learning.patterns_observed not empty:}
|
|
1008
|
-
🧠 Patterns Learned:
|
|
1009
|
-
{for each pattern in learning.patterns_observed:}
|
|
1010
|
-
🐜 {pattern.trigger} → {pattern.action}
|
|
1011
|
-
{end for}
|
|
1012
|
-
{end if}
|
|
1013
|
-
|
|
1014
|
-
{if debugging.issues_encountered > 0:}
|
|
1015
|
-
🔧 Debugging: {debugging.issues_resolved}/{debugging.issues_encountered} resolved
|
|
1016
|
-
{end if}
|
|
1017
|
-
|
|
1018
|
-
🤖 Model Routing:
|
|
1019
|
-
{for each spawn in spawn_tree where model_context exists:}
|
|
1020
|
-
{caste_emoji}{ant_name}: {model_context.assigned} {if model_context.assigned matches caste expectation:}✓{else}⚠️{end if}
|
|
1021
|
-
{end for}
|
|
1022
|
-
Proxy: {if proxy_healthy:}✓ Healthy @ http://localhost:4000{else}✗ Not running (using default model){end if}
|
|
1023
|
-
|
|
1024
|
-
🐜 Next Steps:
|
|
1025
|
-
{if synthesis.status == "completed" AND verification.recommendation == "proceed":}
|
|
1026
|
-
/ant:continue ➡️ Advance to next phase
|
|
1027
|
-
/ant:feedback 💬 Give feedback first
|
|
1028
|
-
{else if synthesis.status == "failed" OR verification.recommendation == "fix_required":}
|
|
1029
|
-
⚠️ BLOCKERS DETECTED - Cannot proceed until resolved
|
|
1030
|
-
/ant:flags 🚩 View blockers
|
|
1031
|
-
/ant:swarm 🔥 Auto-fix issues
|
|
1032
|
-
{end if}
|
|
1033
|
-
|
|
1034
|
-
💾 State persisted — safe to /clear, then run /ant:continue
|
|
1035
|
-
```
|
|
1036
|
-
|
|
1037
|
-
**Conditional Next Steps:** The suggestions above are based on actual worker results. If verification failed or blockers exist, `/ant:continue` is NOT suggested.
|
|
1038
|
-
|
|
1039
|
-
**IMPORTANT:** Build does NOT update task statuses or advance state. Run `/ant:continue` to:
|
|
1040
|
-
- Mark tasks as completed
|
|
1041
|
-
- Extract learnings
|
|
1042
|
-
- Advance to next phase
|
|
1043
|
-
|
|
1044
|
-
### Step 8: Update Session
|
|
1045
|
-
|
|
1046
|
-
Update the session tracking file to enable `/ant:resume` after context clear:
|
|
1047
|
-
|
|
1048
|
-
```bash
|
|
1049
|
-
bash .aether/aether-utils.sh session-update "/ant:build {phase_id}" "/ant:continue" "Phase {phase_id} build completed: {synthesis.status}"
|
|
1050
|
-
```
|
|
64
|
+
After `build-complete.md` finishes, return the normal build summary and next-step
|
|
65
|
+
routing exactly as defined there.
|