aether-colony 5.3.2 → 5.4.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 +181 -5
- package/.aether/commands/archaeology.yaml +3 -3
- package/.aether/commands/build.yaml +80 -45
- package/.aether/commands/chaos.yaml +7 -7
- package/.aether/commands/colonize.yaml +17 -17
- package/.aether/commands/continue.yaml +40 -40
- package/.aether/commands/council.yaml +6 -6
- package/.aether/commands/data-clean.yaml +3 -3
- package/.aether/commands/dream.yaml +2 -2
- package/.aether/commands/entomb.yaml +12 -12
- package/.aether/commands/export-signals.yaml +2 -2
- package/.aether/commands/feedback.yaml +6 -6
- package/.aether/commands/flag.yaml +2 -2
- package/.aether/commands/flags.yaml +4 -4
- package/.aether/commands/focus.yaml +6 -6
- package/.aether/commands/help.yaml +1 -1
- package/.aether/commands/history.yaml +1 -1
- package/.aether/commands/import-signals.yaml +2 -2
- package/.aether/commands/init.yaml +44 -27
- package/.aether/commands/insert-phase.yaml +1 -1
- package/.aether/commands/interpret.yaml +2 -2
- package/.aether/commands/lay-eggs.yaml +3 -3
- package/.aether/commands/maturity.yaml +2 -2
- package/.aether/commands/memory-details.yaml +1 -1
- package/.aether/commands/migrate-state.yaml +1 -1
- package/.aether/commands/oracle.yaml +147 -82
- package/.aether/commands/organize.yaml +5 -5
- package/.aether/commands/patrol.yaml +8 -8
- package/.aether/commands/pause-colony.yaml +7 -7
- package/.aether/commands/phase.yaml +1 -1
- package/.aether/commands/pheromones.yaml +1 -1
- package/.aether/commands/plan.yaml +14 -14
- package/.aether/commands/quick.yaml +4 -4
- package/.aether/commands/redirect.yaml +6 -6
- package/.aether/commands/resume-colony.yaml +9 -9
- package/.aether/commands/resume.yaml +5 -38
- package/.aether/commands/run.yaml +10 -10
- package/.aether/commands/seal.yaml +33 -33
- package/.aether/commands/skill-create.yaml +4 -4
- package/.aether/commands/status.yaml +14 -14
- package/.aether/commands/swarm.yaml +14 -14
- package/.aether/commands/tunnels.yaml +7 -7
- package/.aether/commands/update.yaml +1 -1
- package/.aether/commands/verify-castes.yaml +3 -3
- package/.aether/commands/watch.yaml +15 -15
- package/.aether/docs/command-playbooks/build-complete.md +48 -15
- package/.aether/docs/command-playbooks/build-context.md +11 -11
- package/.aether/docs/command-playbooks/build-full.md +76 -76
- package/.aether/docs/command-playbooks/build-prep.md +10 -10
- package/.aether/docs/command-playbooks/build-verify.md +27 -27
- package/.aether/docs/command-playbooks/build-wave.md +38 -38
- package/.aether/docs/command-playbooks/continue-advance.md +60 -27
- package/.aether/docs/command-playbooks/continue-finalize.md +25 -11
- package/.aether/docs/command-playbooks/continue-full.md +60 -46
- package/.aether/docs/command-playbooks/continue-gates.md +18 -18
- package/.aether/docs/command-playbooks/continue-verify.md +10 -10
- package/.aether/docs/source-of-truth-map.md +10 -10
- package/.aether/docs/structural-learning-stack.md +283 -0
- package/.aether/templates/colony-state-template.json +1 -0
- package/.aether/utils/consolidation-seal.sh +196 -0
- package/.aether/utils/consolidation.sh +127 -0
- package/.aether/utils/curation-ants/archivist.sh +97 -0
- package/.aether/utils/curation-ants/critic.sh +214 -0
- package/.aether/utils/curation-ants/herald.sh +102 -0
- package/.aether/utils/curation-ants/janitor.sh +121 -0
- package/.aether/utils/curation-ants/librarian.sh +99 -0
- package/.aether/utils/curation-ants/nurse.sh +153 -0
- package/.aether/utils/curation-ants/orchestrator.sh +181 -0
- package/.aether/utils/curation-ants/scribe.sh +164 -0
- package/.aether/utils/curation-ants/sentinel.sh +119 -0
- package/.aether/utils/event-bus.sh +301 -0
- package/.aether/utils/graph.sh +559 -0
- package/.aether/utils/instinct-store.sh +401 -0
- package/.aether/utils/learning.sh +79 -7
- package/.aether/utils/oracle/oracle-stop-hook.sh +896 -0
- package/.aether/utils/session.sh +13 -0
- package/.aether/utils/state-api.sh +1 -1
- package/.aether/utils/trust-scoring.sh +347 -0
- package/.aether/utils/worktree.sh +97 -0
- package/.claude/commands/ant/archaeology.md +2 -2
- package/.claude/commands/ant/chaos.md +4 -4
- package/.claude/commands/ant/colonize.md +9 -9
- package/.claude/commands/ant/council.md +6 -6
- package/.claude/commands/ant/data-clean.md +3 -3
- package/.claude/commands/ant/dream.md +2 -2
- package/.claude/commands/ant/entomb.md +9 -9
- package/.claude/commands/ant/export-signals.md +2 -2
- package/.claude/commands/ant/feedback.md +4 -4
- package/.claude/commands/ant/flag.md +2 -2
- package/.claude/commands/ant/flags.md +4 -4
- package/.claude/commands/ant/focus.md +4 -4
- package/.claude/commands/ant/help.md +1 -1
- package/.claude/commands/ant/history.md +1 -1
- package/.claude/commands/ant/import-signals.md +2 -2
- package/.claude/commands/ant/init.md +44 -27
- package/.claude/commands/ant/insert-phase.md +1 -1
- package/.claude/commands/ant/interpret.md +2 -2
- package/.claude/commands/ant/lay-eggs.md +2 -2
- package/.claude/commands/ant/maturity.md +2 -2
- package/.claude/commands/ant/memory-details.md +1 -1
- package/.claude/commands/ant/migrate-state.md +1 -1
- package/.claude/commands/ant/oracle.md +78 -42
- package/.claude/commands/ant/organize.md +3 -3
- package/.claude/commands/ant/patrol.md +8 -8
- package/.claude/commands/ant/pause-colony.md +5 -5
- package/.claude/commands/ant/phase.md +1 -1
- package/.claude/commands/ant/pheromones.md +1 -1
- package/.claude/commands/ant/plan.md +8 -8
- package/.claude/commands/ant/quick.md +4 -4
- package/.claude/commands/ant/redirect.md +4 -4
- package/.claude/commands/ant/resume-colony.md +5 -5
- package/.claude/commands/ant/resume.md +17 -29
- package/.claude/commands/ant/run.md +10 -10
- package/.claude/commands/ant/seal.md +25 -25
- package/.claude/commands/ant/skill-create.md +2 -2
- package/.claude/commands/ant/status.md +14 -14
- package/.claude/commands/ant/swarm.md +14 -14
- package/.claude/commands/ant/tunnels.md +4 -4
- package/.claude/commands/ant/update.md +1 -1
- package/.claude/commands/ant/verify-castes.md +2 -2
- package/.claude/commands/ant/watch.md +8 -8
- package/.opencode/commands/ant/archaeology.md +1 -1
- package/.opencode/commands/ant/build.md +80 -45
- package/.opencode/commands/ant/chaos.md +3 -3
- package/.opencode/commands/ant/colonize.md +8 -8
- package/.opencode/commands/ant/continue.md +40 -40
- package/.opencode/commands/ant/council.md +5 -5
- package/.opencode/commands/ant/data-clean.md +2 -2
- package/.opencode/commands/ant/dream.md +1 -1
- package/.opencode/commands/ant/entomb.md +3 -3
- package/.opencode/commands/ant/export-signals.md +1 -1
- package/.opencode/commands/ant/feedback.md +2 -2
- package/.opencode/commands/ant/flag.md +1 -1
- package/.opencode/commands/ant/flags.md +3 -3
- package/.opencode/commands/ant/focus.md +2 -2
- package/.opencode/commands/ant/import-signals.md +1 -1
- package/.opencode/commands/ant/init.md +44 -27
- package/.opencode/commands/ant/insert-phase.md +1 -1
- package/.opencode/commands/ant/interpret.md +1 -1
- package/.opencode/commands/ant/lay-eggs.md +2 -2
- package/.opencode/commands/ant/maturity.md +1 -1
- package/.opencode/commands/ant/memory-details.md +1 -1
- package/.opencode/commands/ant/oracle.md +69 -40
- package/.opencode/commands/ant/organize.md +2 -2
- package/.opencode/commands/ant/patrol.md +8 -8
- package/.opencode/commands/ant/pause-colony.md +2 -2
- package/.opencode/commands/ant/pheromones.md +1 -1
- package/.opencode/commands/ant/plan.md +6 -6
- package/.opencode/commands/ant/quick.md +4 -4
- package/.opencode/commands/ant/redirect.md +2 -2
- package/.opencode/commands/ant/resume-colony.md +4 -4
- package/.opencode/commands/ant/resume.md +5 -17
- package/.opencode/commands/ant/run.md +10 -10
- package/.opencode/commands/ant/seal.md +8 -8
- package/.opencode/commands/ant/skill-create.md +2 -2
- package/.opencode/commands/ant/status.md +10 -10
- package/.opencode/commands/ant/tunnels.md +3 -3
- package/.opencode/commands/ant/verify-castes.md +1 -1
- package/.opencode/commands/ant/watch.md +7 -7
- package/CHANGELOG.md +83 -0
- package/README.md +22 -9
- package/bin/cli.js +118 -3
- package/bin/lib/binary-downloader.js +267 -0
- package/bin/lib/update-transaction.js +27 -3
- package/bin/lib/version-gate.js +179 -0
- package/bin/npx-entry.js +0 -0
- package/package.json +1 -1
- package/.aether/agents/aether-ambassador.md +0 -140
- package/.aether/agents/aether-archaeologist.md +0 -108
- package/.aether/agents/aether-architect.md +0 -133
- package/.aether/agents/aether-auditor.md +0 -144
- package/.aether/agents/aether-builder.md +0 -184
- package/.aether/agents/aether-chaos.md +0 -115
- package/.aether/agents/aether-chronicler.md +0 -122
- package/.aether/agents/aether-gatekeeper.md +0 -116
- package/.aether/agents/aether-includer.md +0 -117
- package/.aether/agents/aether-keeper.md +0 -177
- package/.aether/agents/aether-measurer.md +0 -128
- package/.aether/agents/aether-oracle.md +0 -137
- package/.aether/agents/aether-probe.md +0 -133
- package/.aether/agents/aether-queen.md +0 -286
- package/.aether/agents/aether-route-setter.md +0 -130
- package/.aether/agents/aether-sage.md +0 -106
- package/.aether/agents/aether-scout.md +0 -101
- package/.aether/agents/aether-surveyor-disciplines.md +0 -391
- package/.aether/agents/aether-surveyor-nest.md +0 -329
- package/.aether/agents/aether-surveyor-pathogens.md +0 -264
- package/.aether/agents/aether-surveyor-provisions.md +0 -334
- package/.aether/agents/aether-tracker.md +0 -137
- package/.aether/agents/aether-watcher.md +0 -174
- package/.aether/agents/aether-weaver.md +0 -130
- package/.aether/commands/claude/archaeology.md +0 -334
- package/.aether/commands/claude/build.md +0 -65
- package/.aether/commands/claude/chaos.md +0 -336
- package/.aether/commands/claude/colonize.md +0 -259
- package/.aether/commands/claude/continue.md +0 -60
- package/.aether/commands/claude/council.md +0 -507
- package/.aether/commands/claude/data-clean.md +0 -81
- package/.aether/commands/claude/dream.md +0 -268
- package/.aether/commands/claude/entomb.md +0 -498
- package/.aether/commands/claude/export-signals.md +0 -57
- package/.aether/commands/claude/feedback.md +0 -96
- package/.aether/commands/claude/flag.md +0 -151
- package/.aether/commands/claude/flags.md +0 -169
- package/.aether/commands/claude/focus.md +0 -76
- package/.aether/commands/claude/help.md +0 -154
- package/.aether/commands/claude/history.md +0 -140
- package/.aether/commands/claude/import-signals.md +0 -71
- package/.aether/commands/claude/init.md +0 -505
- package/.aether/commands/claude/insert-phase.md +0 -105
- package/.aether/commands/claude/interpret.md +0 -278
- package/.aether/commands/claude/lay-eggs.md +0 -210
- package/.aether/commands/claude/maturity.md +0 -113
- package/.aether/commands/claude/memory-details.md +0 -77
- package/.aether/commands/claude/migrate-state.md +0 -171
- package/.aether/commands/claude/oracle.md +0 -642
- package/.aether/commands/claude/organize.md +0 -232
- package/.aether/commands/claude/patrol.md +0 -620
- package/.aether/commands/claude/pause-colony.md +0 -233
- package/.aether/commands/claude/phase.md +0 -115
- package/.aether/commands/claude/pheromones.md +0 -156
- package/.aether/commands/claude/plan.md +0 -693
- package/.aether/commands/claude/preferences.md +0 -65
- package/.aether/commands/claude/quick.md +0 -100
- package/.aether/commands/claude/redirect.md +0 -76
- package/.aether/commands/claude/resume-colony.md +0 -197
- package/.aether/commands/claude/resume.md +0 -388
- package/.aether/commands/claude/run.md +0 -231
- package/.aether/commands/claude/seal.md +0 -774
- package/.aether/commands/claude/skill-create.md +0 -286
- package/.aether/commands/claude/status.md +0 -410
- package/.aether/commands/claude/swarm.md +0 -349
- package/.aether/commands/claude/tunnels.md +0 -426
- package/.aether/commands/claude/update.md +0 -132
- package/.aether/commands/claude/verify-castes.md +0 -143
- package/.aether/commands/claude/watch.md +0 -239
- package/.aether/commands/opencode/archaeology.md +0 -331
- package/.aether/commands/opencode/build.md +0 -1168
- package/.aether/commands/opencode/chaos.md +0 -329
- package/.aether/commands/opencode/colonize.md +0 -195
- package/.aether/commands/opencode/continue.md +0 -1436
- package/.aether/commands/opencode/council.md +0 -437
- package/.aether/commands/opencode/data-clean.md +0 -77
- package/.aether/commands/opencode/dream.md +0 -260
- package/.aether/commands/opencode/entomb.md +0 -377
- package/.aether/commands/opencode/export-signals.md +0 -54
- package/.aether/commands/opencode/feedback.md +0 -99
- package/.aether/commands/opencode/flag.md +0 -149
- package/.aether/commands/opencode/flags.md +0 -167
- package/.aether/commands/opencode/focus.md +0 -73
- package/.aether/commands/opencode/help.md +0 -157
- package/.aether/commands/opencode/history.md +0 -136
- package/.aether/commands/opencode/import-signals.md +0 -68
- package/.aether/commands/opencode/init.md +0 -518
- package/.aether/commands/opencode/insert-phase.md +0 -111
- package/.aether/commands/opencode/interpret.md +0 -272
- package/.aether/commands/opencode/lay-eggs.md +0 -213
- package/.aether/commands/opencode/maturity.md +0 -108
- package/.aether/commands/opencode/memory-details.md +0 -83
- package/.aether/commands/opencode/migrate-state.md +0 -165
- package/.aether/commands/opencode/oracle.md +0 -593
- package/.aether/commands/opencode/organize.md +0 -226
- package/.aether/commands/opencode/patrol.md +0 -626
- package/.aether/commands/opencode/pause-colony.md +0 -203
- package/.aether/commands/opencode/phase.md +0 -113
- package/.aether/commands/opencode/pheromones.md +0 -162
- package/.aether/commands/opencode/plan.md +0 -684
- package/.aether/commands/opencode/preferences.md +0 -71
- package/.aether/commands/opencode/quick.md +0 -91
- package/.aether/commands/opencode/redirect.md +0 -84
- package/.aether/commands/opencode/resume-colony.md +0 -190
- package/.aether/commands/opencode/resume.md +0 -394
- package/.aether/commands/opencode/run.md +0 -237
- package/.aether/commands/opencode/seal.md +0 -452
- package/.aether/commands/opencode/skill-create.md +0 -63
- package/.aether/commands/opencode/status.md +0 -307
- package/.aether/commands/opencode/swarm.md +0 -15
- package/.aether/commands/opencode/tunnels.md +0 -400
- package/.aether/commands/opencode/update.md +0 -127
- package/.aether/commands/opencode/verify-castes.md +0 -139
- package/.aether/commands/opencode/watch.md +0 -227
|
@@ -74,7 +74,7 @@ Update COLONY_STATE.json:
|
|
|
74
74
|
|
|
75
75
|
if [[ "$patterns_count" -eq 0 ]]; then
|
|
76
76
|
# Builder skipped learning output -- fire deterministic fallback
|
|
77
|
-
fallback_result=$(
|
|
77
|
+
fallback_result=$(aether learning-extract-fallback 2>/dev/null || echo '{"learnings":[],"count":0}')
|
|
78
78
|
fallback_count=$(echo "$fallback_result" | jq '.result.count // 0')
|
|
79
79
|
fi
|
|
80
80
|
|
|
@@ -92,7 +92,7 @@ Update COLONY_STATE.json:
|
|
|
92
92
|
|
|
93
93
|
Run using the Bash tool with description "Recording learning observations...":
|
|
94
94
|
```bash
|
|
95
|
-
colony_name=$(
|
|
95
|
+
colony_name=$(aether colony-name 2>/dev/null | jq -r '.result.name // ""')
|
|
96
96
|
[[ -z "$colony_name" ]] && colony_name="unknown"
|
|
97
97
|
|
|
98
98
|
# Get learnings from the current phase
|
|
@@ -101,7 +101,7 @@ Update COLONY_STATE.json:
|
|
|
101
101
|
if [[ -n "$current_phase_learnings" ]]; then
|
|
102
102
|
echo "$current_phase_learnings" | jq -r '.learnings[]?.claim // empty' 2>/dev/null | while read -r claim; do
|
|
103
103
|
if [[ -n "$claim" ]]; then
|
|
104
|
-
|
|
104
|
+
aether memory-capture "learning" "$claim" "pattern" "worker:continue" 2>/dev/null || true
|
|
105
105
|
fi
|
|
106
106
|
done
|
|
107
107
|
echo "Recorded observations for threshold tracking"
|
|
@@ -123,7 +123,7 @@ Update COLONY_STATE.json:
|
|
|
123
123
|
|
|
124
124
|
Run using the Bash tool with description "Creating instinct from pattern...":
|
|
125
125
|
```bash
|
|
126
|
-
|
|
126
|
+
aether instinct-create \
|
|
127
127
|
--trigger "<when this situation arises>" \
|
|
128
128
|
--action "<what worked or should be done>" \
|
|
129
129
|
--confidence <0.7-0.9 based on evidence strength> \
|
|
@@ -147,7 +147,7 @@ Update COLONY_STATE.json:
|
|
|
147
147
|
|
|
148
148
|
Run using the Bash tool with description "Checking midden for error patterns...":
|
|
149
149
|
```bash
|
|
150
|
-
midden_result=$(
|
|
150
|
+
midden_result=$(aether midden-recent-failures 10 2>/dev/null || echo '{"count":0,"failures":[]}')
|
|
151
151
|
midden_count=$(echo "$midden_result" | jq '.count // 0')
|
|
152
152
|
```
|
|
153
153
|
|
|
@@ -155,7 +155,7 @@ Update COLONY_STATE.json:
|
|
|
155
155
|
|
|
156
156
|
Run using the Bash tool with description "Creating instinct from error pattern...":
|
|
157
157
|
```bash
|
|
158
|
-
|
|
158
|
+
aether instinct-create \
|
|
159
159
|
--trigger "<when this error condition arises>" \
|
|
160
160
|
--action "<how to avoid or handle this error>" \
|
|
161
161
|
--confidence 0.8 \
|
|
@@ -173,7 +173,7 @@ Update COLONY_STATE.json:
|
|
|
173
173
|
|
|
174
174
|
Run using the Bash tool with description "Creating instinct from success pattern...":
|
|
175
175
|
```bash
|
|
176
|
-
|
|
176
|
+
aether instinct-create \
|
|
177
177
|
--trigger "<when this type of task arises>" \
|
|
178
178
|
--action "<the approach that worked well>" \
|
|
179
179
|
--confidence 0.7 \ # Base value; increase if observation_count > 1 per formula
|
|
@@ -203,7 +203,7 @@ Update COLONY_STATE.json:
|
|
|
203
203
|
domain=$(echo "$encoded" | base64 -d | jq -r '.domain // "workflow"')
|
|
204
204
|
|
|
205
205
|
# queen-promote-instinct handles dedup internally (skips if already in QUEEN.md)
|
|
206
|
-
result=$(
|
|
206
|
+
result=$(aether queen-promote-instinct \
|
|
207
207
|
"$trigger" "$action" "$confidence" "$domain" 2>/dev/null || echo '{"ok":false}')
|
|
208
208
|
|
|
209
209
|
was_promoted=$(echo "$result" | jq -r '.result.promoted // false' 2>/dev/null || echo "false")
|
|
@@ -260,7 +260,7 @@ Update COLONY_STATE.json:
|
|
|
260
260
|
[[ -n "$repo_domain_tags" ]] && promote_args+=(--domain "$repo_domain_tags")
|
|
261
261
|
|
|
262
262
|
# Call hive-promote which orchestrates abstract + store
|
|
263
|
-
result=$(
|
|
263
|
+
result=$(aether "${promote_args[@]}" 2>/dev/null || echo '{}')
|
|
264
264
|
was_promoted=$(echo "$result" | jq -r '.result.action // "skipped"' 2>/dev/null || echo "skipped")
|
|
265
265
|
|
|
266
266
|
if [[ "$was_promoted" == "promoted" || "$was_promoted" == "merged" ]]; then
|
|
@@ -303,15 +303,15 @@ Write the updated state through targeted `state-mutate` calls. Each call acquire
|
|
|
303
303
|
Run using the Bash tool with description "Advancing colony state...":
|
|
304
304
|
```bash
|
|
305
305
|
# Mark current phase completed
|
|
306
|
-
|
|
306
|
+
aether state-mutate --argjson pid "$current_phase" \
|
|
307
307
|
'.plan.phases |= map(if .id == $pid then .status = "completed" else . end)'
|
|
308
308
|
|
|
309
309
|
# Append learning (if any — skip if no learnings were extracted in Step 2)
|
|
310
|
-
#
|
|
310
|
+
# aether state-mutate --argjson learning "$learning_json" \
|
|
311
311
|
# '.memory.phase_learnings += [$learning]'
|
|
312
312
|
|
|
313
313
|
# Advance to next phase
|
|
314
|
-
|
|
314
|
+
aether state-mutate \
|
|
315
315
|
--argjson pid "$current_phase" \
|
|
316
316
|
--argjson next "$next_phase" \
|
|
317
317
|
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
@@ -321,12 +321,45 @@ bash .aether/aether-utils.sh state-mutate \
|
|
|
321
321
|
Run using the Bash tool with description "Enforcing memory caps...":
|
|
322
322
|
```bash
|
|
323
323
|
# Cap enforcement — keep arrays bounded
|
|
324
|
-
|
|
324
|
+
aether state-mutate \
|
|
325
325
|
'.memory.phase_learnings = (.memory.phase_learnings[-20:]) | .memory.decisions = (.memory.decisions[-30:]) | .memory.instincts = (.memory.instincts | sort_by(.confidence) | .[-30:]) | .events = (.events[-100:])'
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
Validate the state file:
|
|
329
|
-
Run using the Bash tool with description "Validating colony state...": `
|
|
329
|
+
Run using the Bash tool with description "Validating colony state...": `aether validate-state colony`
|
|
330
|
+
|
|
331
|
+
### Step 2.0.4: Worktree Merge-Back (NON-BLOCKING)
|
|
332
|
+
|
|
333
|
+
After state update, check for any completed worktree branches from the build wave and merge them back to the target branch.
|
|
334
|
+
|
|
335
|
+
Run using the Bash tool with description "Checking for worktree branches to merge...":
|
|
336
|
+
```bash
|
|
337
|
+
# List worktree branches created during this build
|
|
338
|
+
branches=$(git -C "$AETHER_ROOT" worktree list --porcelain 2>/dev/null \
|
|
339
|
+
| grep "worktree-agent-\|worktree-" \
|
|
340
|
+
| awk '{print $NF}' || echo "")
|
|
341
|
+
|
|
342
|
+
last_merged_branch=""
|
|
343
|
+
last_merge_sha=""
|
|
344
|
+
merged_count=0
|
|
345
|
+
|
|
346
|
+
for branch in $branches; do
|
|
347
|
+
[[ -z "$branch" ]] && continue
|
|
348
|
+
result=$(aether worktree-merge --branch "$branch" 2>/dev/null || echo '{"ok":false}')
|
|
349
|
+
ok=$(echo "$result" | jq -r '.ok // false')
|
|
350
|
+
if [[ "$ok" == "true" ]]; then
|
|
351
|
+
last_merged_branch="$branch"
|
|
352
|
+
last_merge_sha=$(echo "$result" | jq -r '.result.sha // ""')
|
|
353
|
+
merged_count=$((merged_count + 1))
|
|
354
|
+
fi
|
|
355
|
+
done
|
|
356
|
+
|
|
357
|
+
if [[ "$merged_count" -gt 0 ]]; then
|
|
358
|
+
echo "Merged $merged_count worktree branch(es). Last: $last_merged_branch ($last_merge_sha)"
|
|
359
|
+
fi
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
This step sets `$last_merged_branch` and `$last_merge_sha` which activates the existing dead code paths in Steps 2.0.5 and 2.0.6.
|
|
330
363
|
|
|
331
364
|
### Step 2.0.5: Pheromone Merge-Back (SILENT, NON-BLOCKING)
|
|
332
365
|
|
|
@@ -337,7 +370,7 @@ Run using the Bash tool with description "Checking for pheromone merge-back file
|
|
|
337
370
|
# Check if a branch pheromone export was merged into main
|
|
338
371
|
export_file=".aether/exchange/pheromone-branch-export.json"
|
|
339
372
|
if [[ -f "$export_file" ]]; then
|
|
340
|
-
merge_result=$(
|
|
373
|
+
merge_result=$(aether pheromone-merge-back --export-file "$export_file" 2>/dev/null || echo '{"ok":false}')
|
|
341
374
|
merge_ok=$(echo "$merge_result" | jq -r '.ok // false' 2>/dev/null)
|
|
342
375
|
if [[ "$merge_ok" == "true" ]]; then
|
|
343
376
|
new_count=$(echo "$merge_result" | jq -r '.result.new_signals_written // 0' 2>/dev/null)
|
|
@@ -370,7 +403,7 @@ last_merge_branch="${last_merged_branch:-}"
|
|
|
370
403
|
last_merge_sha="${last_merge_sha:-}"
|
|
371
404
|
|
|
372
405
|
if [[ -n "$last_merge_branch" && -n "$last_merge_sha" ]]; then
|
|
373
|
-
collect_result=$(
|
|
406
|
+
collect_result=$(aether midden-collect \
|
|
374
407
|
--branch "$last_merge_branch" --merge-sha "$last_merge_sha" \
|
|
375
408
|
2>/dev/null || echo '{"ok":false}')
|
|
376
409
|
collect_ok=$(echo "$collect_result" | jq -r '.ok // false' 2>/dev/null)
|
|
@@ -394,7 +427,7 @@ After midden collection (Step 2.0.6), run cross-PR analysis to detect systemic f
|
|
|
394
427
|
|
|
395
428
|
Run using the Bash tool with description "Running cross-PR midden analysis...":
|
|
396
429
|
```bash
|
|
397
|
-
analysis_result=$(
|
|
430
|
+
analysis_result=$(aether midden-cross-pr-analysis --window 14 \
|
|
398
431
|
2>/dev/null || echo '{"ok":false}')
|
|
399
432
|
analysis_ok=$(echo "$analysis_result" | jq -r '.ok // false' 2>/dev/null)
|
|
400
433
|
if [[ "$analysis_ok" == "true" ]]; then
|
|
@@ -426,7 +459,7 @@ After learning extraction completes in Step 2, auto-emit a FEEDBACK signal summa
|
|
|
426
459
|
phase_feedback="Phase $phase_id ($phase_name) completed. Key patterns: {brief summary of 1-3 learnings from Step 2}"
|
|
427
460
|
# Fallback if no learnings: "Phase $phase_id ($phase_name) completed without notable patterns."
|
|
428
461
|
|
|
429
|
-
|
|
462
|
+
aether pheromone-write FEEDBACK "$phase_feedback" \
|
|
430
463
|
--strength 0.6 \
|
|
431
464
|
--source "worker:continue" \
|
|
432
465
|
--reason "Auto-emitted on phase advance: captures what worked and what was learned" \
|
|
@@ -462,7 +495,7 @@ if [[ -n "$decisions" ]]; then
|
|
|
462
495
|
[.signals[] | select(.active == true and (.source == "auto:decision" or .source == "system:decision") and (.content.text | contains($text)))] | length
|
|
463
496
|
' .aether/data/pheromones.json 2>/dev/null || echo "0")
|
|
464
497
|
if [[ "$existing" == "0" ]]; then
|
|
465
|
-
|
|
498
|
+
aether pheromone-write FEEDBACK \
|
|
466
499
|
"[decision] $dec" \
|
|
467
500
|
--strength 0.6 \
|
|
468
501
|
--source "auto:decision" \
|
|
@@ -481,7 +514,7 @@ Strength is 0.6 (auto-emitted = lower than user-emitted). Source is `"auto:decis
|
|
|
481
514
|
Query the actual failure store (`midden.json`) for recurring error categories. Categories with 3+ occurrences indicate persistent issues that should steer workers away from known failure modes.
|
|
482
515
|
|
|
483
516
|
```bash
|
|
484
|
-
midden_result=$(
|
|
517
|
+
midden_result=$(aether midden-recent-failures 50 2>/dev/null || echo '{"count":0,"failures":[]}')
|
|
485
518
|
midden_count=$(echo "$midden_result" | jq '.count // 0')
|
|
486
519
|
|
|
487
520
|
if [[ "$midden_count" -gt 0 ]]; then
|
|
@@ -508,7 +541,7 @@ if [[ "$midden_count" -gt 0 ]]; then
|
|
|
508
541
|
' .aether/data/pheromones.json 2>/dev/null || echo "0")
|
|
509
542
|
|
|
510
543
|
if [[ "$existing" == "0" ]]; then
|
|
511
|
-
|
|
544
|
+
aether pheromone-write REDIRECT \
|
|
512
545
|
"[error-pattern] Category \"$category\" recurring ($count occurrences)" \
|
|
513
546
|
--strength 0.7 \
|
|
514
547
|
--source "auto:error" \
|
|
@@ -517,7 +550,7 @@ if [[ "$midden_count" -gt 0 ]]; then
|
|
|
517
550
|
emit_count=$((emit_count + 1))
|
|
518
551
|
|
|
519
552
|
# Capture as resolution candidate for promotion tracking
|
|
520
|
-
|
|
553
|
+
aether memory-capture \
|
|
521
554
|
"resolution" \
|
|
522
555
|
"Recurring error pattern: $category ($count occurrences)" \
|
|
523
556
|
"pattern" \
|
|
@@ -564,7 +597,7 @@ for encoded in $recurring_criteria; do
|
|
|
564
597
|
' .aether/data/pheromones.json 2>/dev/null || echo "0")
|
|
565
598
|
|
|
566
599
|
if [[ "$existing" == "0" ]]; then
|
|
567
|
-
|
|
600
|
+
aether pheromone-write FEEDBACK \
|
|
568
601
|
"[success-pattern] \"$text\" recurs across phases $phases" \
|
|
569
602
|
--strength 0.6 \
|
|
570
603
|
--source "auto:success" \
|
|
@@ -580,7 +613,7 @@ Strength is 0.6 (auto-emitted). Source is `"auto:success"`. Cap: max 2 success c
|
|
|
580
613
|
|
|
581
614
|
After auto-emission, expire all signals with `expires_at == "phase_end"`. The FEEDBACK from 2.1a uses a 30d TTL and is not affected by this step.
|
|
582
615
|
|
|
583
|
-
Run using the Bash tool with description "Maintaining pheromone memory...": `
|
|
616
|
+
Run using the Bash tool with description "Maintaining pheromone memory...": `aether pheromone-expire --phase-end-only 2>/dev/null && aether eternal-init 2>/dev/null`
|
|
584
617
|
|
|
585
618
|
This is idempotent — runs every time continue fires but only creates the directory/file once.
|
|
586
619
|
|
|
@@ -594,7 +627,7 @@ If `$ARGUMENTS` contains `--deferred`:
|
|
|
594
627
|
```bash
|
|
595
628
|
if [[ "$ARGUMENTS" == *"--deferred"* ]] && [[ -f .aether/data/learning-deferred.json ]]; then
|
|
596
629
|
echo "📦 Reviewing deferred proposals..."
|
|
597
|
-
|
|
630
|
+
aether learning-approve-proposals --deferred ${verbose:+--verbose}
|
|
598
631
|
fi
|
|
599
632
|
```
|
|
600
633
|
|
|
@@ -602,7 +635,7 @@ fi
|
|
|
602
635
|
|
|
603
636
|
1. **Check for proposals:**
|
|
604
637
|
```bash
|
|
605
|
-
proposals=$(
|
|
638
|
+
proposals=$(aether learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
|
|
606
639
|
proposal_count=$(echo "$proposals" | jq '.proposals | length')
|
|
607
640
|
```
|
|
608
641
|
|
|
@@ -614,7 +647,7 @@ fi
|
|
|
614
647
|
if [[ "$proposal_count" -gt 0 ]]; then
|
|
615
648
|
verbose_flag=""
|
|
616
649
|
[[ "$ARGUMENTS" == *"--verbose"* ]] && verbose_flag="--verbose"
|
|
617
|
-
|
|
650
|
+
aether learning-approve-proposals $verbose_flag
|
|
618
651
|
fi
|
|
619
652
|
# If no proposals, silently skip without notice (per user decision)
|
|
620
653
|
```
|
|
@@ -20,7 +20,7 @@ if [[ -f "$obs_file" ]]; then
|
|
|
20
20
|
colony=$(echo "$encoded" | base64 -d | jq -r '.colonies[0] // "unknown"')
|
|
21
21
|
[[ -z "$content" ]] && continue
|
|
22
22
|
|
|
23
|
-
result=$(
|
|
23
|
+
result=$(aether learning-promote-auto "$wisdom_type" "$content" "$colony" "learning" 2>/dev/null || echo '{}')
|
|
24
24
|
was_promoted=$(echo "$result" | jq -r '.result.promoted // false' 2>/dev/null || echo "false")
|
|
25
25
|
if [[ "$was_promoted" == "true" ]]; then
|
|
26
26
|
promoted_count=$((promoted_count + 1))
|
|
@@ -63,7 +63,7 @@ learnings_count=$(echo "$learnings_json" | jq 'length' 2>/dev/null || echo "0")
|
|
|
63
63
|
if [[ "$learnings_count" -gt 0 ]] && [[ "$learnings_json" != "[]" ]]; then
|
|
64
64
|
prev_phase=$((current_phase - 1))
|
|
65
65
|
queen_error="false"
|
|
66
|
-
result=$(
|
|
66
|
+
result=$(aether queen-write-learnings \
|
|
67
67
|
"$prev_phase" "$phase_name" "$learnings_json" 2>/dev/null || echo '{"ok":false}')
|
|
68
68
|
[[ "$result" == '{"ok":false}' ]] && queen_error="true"
|
|
69
69
|
|
|
@@ -170,7 +170,7 @@ If no `CHANGELOG.md` exists, `changelog-append` creates one automatically.
|
|
|
170
170
|
**Step 2.3.1: Collect plan data**
|
|
171
171
|
|
|
172
172
|
```bash
|
|
173
|
-
|
|
173
|
+
aether changelog-collect-plan-data "{phase_identifier}" "{plan_number}"
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
Parse the returned JSON to extract `files`, `decisions`, `worked`, and `requirements` arrays.
|
|
@@ -186,7 +186,7 @@ If the command fails (e.g., no plan file found), fall back to collecting data ma
|
|
|
186
186
|
**Step 2.3.2: Append changelog entry**
|
|
187
187
|
|
|
188
188
|
```bash
|
|
189
|
-
|
|
189
|
+
aether changelog-append \
|
|
190
190
|
"$(date +%Y-%m-%d)" \
|
|
191
191
|
"{phase_identifier}" \
|
|
192
192
|
"{plan_number}" \
|
|
@@ -227,7 +227,7 @@ Store this as `ai_description` for the commit message.
|
|
|
227
227
|
#### Step 2.4.2: Generate Enhanced Commit Message
|
|
228
228
|
|
|
229
229
|
```bash
|
|
230
|
-
|
|
230
|
+
aether generate-commit-message "contextual" {phase_id} "{phase_name}" "{ai_description}" {plan_number}
|
|
231
231
|
```
|
|
232
232
|
|
|
233
233
|
Parse the returned JSON to extract:
|
|
@@ -342,18 +342,18 @@ After phase advancement is complete, update `.aether/CONTEXT.md`:
|
|
|
342
342
|
|
|
343
343
|
**Log the activity:**
|
|
344
344
|
```bash
|
|
345
|
-
|
|
345
|
+
aether context-update activity "continue" "Phase {prev_id} completed, advanced to {next_id}" "—"
|
|
346
346
|
```
|
|
347
347
|
|
|
348
348
|
**Update the phase:**
|
|
349
349
|
```bash
|
|
350
|
-
|
|
350
|
+
aether context-update update-phase {next_id} "{next_phase_name}" "YES" "Phase advanced, ready to build"
|
|
351
351
|
```
|
|
352
352
|
|
|
353
353
|
**Log any decisions from this session:**
|
|
354
354
|
If any architectural decisions were made during verification, also run:
|
|
355
355
|
```bash
|
|
356
|
-
|
|
356
|
+
aether context-update decision "{decision_description}" "{rationale}" "Queen"
|
|
357
357
|
```
|
|
358
358
|
|
|
359
359
|
### Step 2.7: Project Completion
|
|
@@ -394,7 +394,7 @@ Output:
|
|
|
394
394
|
|
|
395
395
|
```
|
|
396
396
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
397
|
-
|
|
397
|
+
➡️ P H A S E A D V A N C E M E N T
|
|
398
398
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
399
399
|
|
|
400
400
|
✅ Phase {prev_id}: {prev_name} -- COMPLETED
|
|
@@ -441,7 +441,21 @@ Output:
|
|
|
441
441
|
Update the session tracking file to enable `/ant:resume` after context clear:
|
|
442
442
|
|
|
443
443
|
```bash
|
|
444
|
-
|
|
444
|
+
aether session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"
|
|
445
445
|
```
|
|
446
446
|
|
|
447
|
-
Run using the Bash tool with description "Saving session state...": `
|
|
447
|
+
Run using the Bash tool with description "Saving session state...": `aether session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"`
|
|
448
|
+
|
|
449
|
+
### Step 4.5: Housekeeping (Non-Blocking)
|
|
450
|
+
|
|
451
|
+
Prune stale backups and temp files. This runs automatically — failures never affect phase advancement.
|
|
452
|
+
|
|
453
|
+
Run using the Bash tool with description "Pruning stale backups...":
|
|
454
|
+
```bash
|
|
455
|
+
aether backup-prune-global 2>/dev/null || true
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Run using the Bash tool with description "Cleaning temp files...":
|
|
459
|
+
```bash
|
|
460
|
+
aether temp-clean 2>/dev/null || true
|
|
461
|
+
```
|