| name | build-close |
| description | Post-build synthesis for Pulse builds. Aggregates all deposits, synthesizes
decisions and learnings, extracts positions, generates build AAR.
Replaces N per-worker closes with 1 build-level close.
For normal threads use thread-close. For Pulse workers use drop-close.
|
Build Close
Post-build synthesis for Pulse orchestrated builds.
When to Use
- After
pulse finalize <slug> completes
- When all Drops have deposited
- To generate build-level synthesis
Wrong tool?
- If normal thread → use
thread-close
- If you're a Pulse Drop → use
drop-close
Quick Start
python3 Skills/build-close/scripts/close.py --slug my-build
python3 Skills/build-close/scripts/close.py --slug my-build --dry-run
What It Does
- Validates build — Must exist and be terminal (complete/partial/failed)
- Loads all deposits from
N5/builds/<slug>/deposits/
- Generates title — 3-slot emoji system for orchestrator thread
- Aggregates decisions — All decisions with rationale across Drops
- Aggregates learnings — Key insights from all workers
- Aggregates concerns — Issues raised by workers
- Extracts positions — Belief candidates from aggregate context
- Scans content library — Reusable artifacts from build
- Generates BUILD_CLOSE.md — Human-readable synthesis
- Generates BUILD_AAR.md — Comprehensive after-action report
- Generates Pedagogical Review (learning_mode builds) — Aggregates
concepts_exercised from all deposits, cross-references N5/config/understanding_bank.json, proposes level updates, generates application questions
- Updates Understanding Bank (learning_mode builds) — Writes level changes to
N5/config/understanding_bank.json based on build evidence
Title Generation (REQUIRED)
After the script outputs aggregated context, you MUST generate a title for the orchestrator thread using the 3-slot emoji system.
Format
MMM DD | {state} {type} {content} Build Title
For Build Orchestrators:
- Slot 1 (State): Based on build outcome
✅ — All drops complete, no major concerns
⏸️ — Partial completion, work remaining
❌ — Build failed or blocked
- Slot 2 (Type): Always
🐙 (orchestrator)
- Slot 3 (Content):
🏗️ (build) unless build was primarily something else
- NO brackets — Orchestrator threads ARE the parent, don't bracket themselves
Example Titles
Jan 24 | ✅ 🐙 🏗️ Pulse System Validation Build
Jan 24 | ✅ 🐙 🏗️ Close Skills Refactor
Jan 24 | ⏸️ 🐙 🏗️ API Integration (3/5 drops complete)
Jan 24 | ❌ 🐙 🏗️ Auth System Build (blocked on credentials)
Title Generation Steps
- Load build meta.json for the build title
- Assess build outcome from deposits:
- All complete with no concerns → ✅
- Partial or concerns noted → ⏸️
- Failed/blocked → ❌
- Use 🐙 for type (always orchestrator)
- Use 🏗️ for content (standard for builds)
- Use the build's title as the semantic portion
- Add parenthetical if partial/failed explaining why
Emoji Quick Reference
| Slot | Emoji | Meaning |
|---|
| State | ✅ | Complete, successful |
| State | ⏸️ | Partial, work remaining |
| State | ❌ | Failed/blocked |
| Type | 🐙 | Orchestrator (always for build-close) |
| Content | 🏗️ | Build (default) |
| Content | 🛠️ | Repair-focused build |
| Content | 🔎 | Research-focused build |
Options
--slug (required): Build slug
--dry-run: Preview without writing files
--force: Bypass guards (use if build not in terminal state)
--skip-positions: Skip position extraction
Output Files
After running, you'll find:
N5/builds/<slug>/
├── BUILD_CLOSE.md # Human-readable synthesis
├── BUILD_AAR.md # After-action report
└── deposits/ # (unchanged)
BUILD_CLOSE.md Format
# Build Close: my-build
## Summary
Synthesized 7 deposits.
## Decisions (12)
- Chose async over threads: Better for I/O-bound operations
- Used SQLite over Postgres: Simpler deployment for V1
...
## Learnings
- [D1.1] The API requires auth even for public endpoints
- [D2.1] Rate limiting kicks in after 100 req/min
...
## Concerns
- [D1.2] Error handling is incomplete for edge cases
- [D2.3] No tests for the new auth flow
...
## Position Candidates (3)
- [D1.1] "Simple beats clever in production systems" — multiple drops reinforced this
...
## Content Library Candidates (2)
- Artifact: auth-flow-diagram.md
...
BUILD_AAR.md Pedagogical Review Section
When a build has build_mode: "learning" in its meta.json, append this section to BUILD_AAR.md after the standard AAR content:
## Pedagogical Review
<!-- Generated by aggregating concepts_exercised across all deposits -->
### Concepts Engaged
<!-- Deduplicated list of concepts_exercised from all deposits -->
| Concept | Drops That Exercised It | Previous Level | Demonstrated Level |
|---------|------------------------|----------------|-------------------|
| <concept> | D1.1, D1.3 | learning | familiar |
### Decisions Made by V
<!-- Aggregated from DECISIONS.md in the build folder -->
| Decision | V's Choice | Reasoning | Concepts |
|----------|-----------|-----------|----------|
| <question> | <choice> | <reasoning> | <concepts> |
### Understanding Bank Updates
<!-- Proposed level changes based on build evidence -->
| Concept | Before | After | Evidence |
|---------|--------|-------|----------|
| <concept> | learning | familiar | Engaged in DP-1, discussed tradeoffs |
**Action:** Update `N5/config/understanding_bank.json` with these level changes.
### Application Questions
<!-- 3 Socratic questions testing whether V can apply what was learned -->
1. <Question testing conceptual understanding in a new context>
2. <Question testing ability to evaluate tradeoffs>
3. <Question connecting build concepts to V's broader technical growth>
### Next Learning Frontier
<!-- Based on this build, what should V tackle next? -->
- <Concept that appeared but wasn't deeply explored>
- <Adjacent concept that would deepen understanding>
Pedagogical Review Generation Steps
- Load all deposits from
N5/builds/<slug>/deposits/
- Collect all
concepts_exercised arrays; deduplicate
- For each concept, look up current level in
N5/config/understanding_bank.json
- Assess demonstrated level based on how the concept was engaged (used vs discussed vs decided upon)
- Aggregate decisions from
DECISIONS.md (if present) with concept tags
- Propose level changes where evidence supports advancement
- Generate 3 application questions that test transfer, not recall
- Identify next learning frontier from concepts that appeared but weren't deeply exercised
Integration with Pulse
Call after Pulse finalization:
python3 Skills/pulse/scripts/pulse.py finalize my-build
python3 Skills/build-close/scripts/close.py --slug my-build
Or integrate into Pulse finalize step.
Fail-Safes
This skill includes context guards:
⚠️ WRONG SKILL DETECTED
You called: build-close
Suggested: drop-close
Reason: Build not in terminal state (status: active)
Run the suggested skill instead, or use --force to override.
Checklist Before Completing
Related
file 'N5/config/emoji-legend.json' — Full emoji definitions
file 'N5/lib/close/emoji.py' — Title generation helpers
file 'Skills/thread-close/SKILL.md' — Normal thread close
file 'Skills/drop-close/SKILL.md' — Drop worker close