Good Planning
Security Notice
This extension includes AI agent skills that can modify AI assistant behavior. Review the skill files before installing.
Good-planning model that operationalizes Felipe Bovolon's "Good Planning Bad Planning" four-layer architecture as queryable swamp state. Strategy chooses; planning commits — this model holds the commitment.
Article: https://bovolon.substack.com/p/good-planning-bad-planning
A plan is not a slide deck. The article's thesis: the real plan is the pattern of commitments the organization has actually funded, sequenced, protected, and agreed to review. This model makes those commitments first- class state with explicit assumptions, signposts, tripwires, ceiling trigger points, and a pullback ladder — so the plan can be evaluated and revised on a cadence rather than executed-as-written until reality breaks it.
Four Layers (from the article)
- Layer 1 — Assumption: what the plan believes about the world. Each assumption has impact, vulnerability, and a signpost.
- Layer 2 — Allocative: what is actually funded and protected. Targets, forecasts, and allocations are tracked separately (Beyond Budgeting).
- Layer 3 — Coordinative: how commitments interlock.
Captured via
dependsOnon each commitment. - Layer 4 — Adaptive: how the plan revises.
Ceiling discipline (first-binding crux + trigger formula) and
floor discipline (signposts → tripwires → pre-authorized actions
- pullback ladder + max tolerable loss).
State Machine
drafted ──[commit]──> committed (gated: all four layers populated)
committed ──[monitor]──> monitoring
monitoring ──[evaluate]──> monitoring (read signposts, update layer state)
monitoring ──[trigger]──> adapting (tripwire fired or ceiling crossed)
adapting ──[adapt]──> committed (pullback or option exercised)
adapting ──[revise]──> drafted (assumption broken — re-plan)
committed ──[archive]──> archived
monitoring ──[archive]──> archivedcommit is the gate the article calls for: it refuses to leave drafted
unless every layer is materially populated, including the six properties
on every commitment (owner, resource, time, dependencies, review rule,
consequence-if-changed) and at least one tripwire on the floor side.
Methods
start— create a draft plan with strategicChoice + horizonadd_assumption— record an assumption with impact / vulnerability / signpostadd_commitment— record a commitment or hypothesis (six-property gate)add_allocation— record protected budget per priority (Layer 2)add_ceiling— record a first-binding crux + lead time + signpostadd_tripwire— record a signpost threshold + pre-authorized actionset_pullback_ladder— ordered list of cuts (what to cut first)set_loss_budget— sunk + shutdown + liabilities + working-capital + tailcommit— gate; transitions drafted → committedmonitor— committed → monitoringevaluate— read a signpost; updates assumption/tripwire/ceiling statetrigger— explicit transition into adapting (action required)adapt— record adaptation taken; back to committedrevise— assumption broken; back to draftedarchive— terminalhydrate— write a compact governability scorecard summaryaudit— answer the four diagnostic questions (one per layer)
Release 2026.07.16.2 — align model versions with manifests
Maintenance release across the @magistr extensions. For most packages this
carries no functional change: the only edit is the model's version: field,
brought back in line with its manifest version so the published model type
version and the package version no longer drift.
Functional changes in this release are limited to:
anime-cron: normalizeTitle now strips a ": subtitle" suffix and a trailing parenthesized year before comparison, fixing dedup false-misses where the torrent title carries a subtitle or year that the AniList romaji does not.
arckit: first publish. Standalone ArcKit port — a 12-phase architecture governance state machine with 65 bundled templates, driven by a bundled skill.
Also tracks three extensions (kaiten, observability-agent, music-library) that previously existed only as untracked working-tree directories, recovered from stashes.
| Argument | Type | Description |
|---|---|---|
| strategicChoice | string | The where-to-play / how-to-win sentence in one line |
| horizon | string | e.g. '3y', '12m' |
| notes? | string |
| Argument | Type | Description |
|---|---|---|
| statement | string | |
| signpostName | string | |
| signpostExpr? | string | |
| lastReading? | string |
| Argument | Type | Description |
|---|---|---|
| description | string | |
| owner | string | |
| budgetUsd | number | |
| byDate | string | |
| dependsOn | array | |
| reviewCadence | string | |
| consequenceIfChanged | string |
| Argument | Type | Description |
|---|---|---|
| priority | string | |
| protectedBudgetUsd | number | |
| target? | string | |
| forecast? | string | |
| raidLog | array |
| Argument | Type | Description |
|---|---|---|
| crux | string | |
| leadTimeWeeks | number | |
| safetyMarginWeeks | number | |
| signpostName | string | |
| optionPremiums | array | |
| lastTimeToCruxWeeks? | number | |
| lastTriggerPointWeeks? | number |
| Argument | Type | Description |
|---|---|---|
| signpostName | string | |
| thresholdExpr | string | |
| preAuthorizedAction | string | |
| pullbackRung? | number | |
| lastReading? | string |
| Argument | Type | Description |
|---|---|---|
| rungs | array |
| Argument | Type | Description |
|---|---|---|
| sunkCostUsd | number | |
| shutdownCostUsd | number | |
| committedLiabilitiesUsd | number | |
| workingCapitalUnwindUsd | number | |
| tailProvisionsUsd | number |
| Argument | Type | Description |
|---|---|---|
| signpostName | string | |
| reading | string | Observed value, free-form string |
| timeToCruxWeeks? | number | If reading impacts a ceiling: observed weeks until crux. |
| Argument | Type | Description |
|---|---|---|
| signpostName | string | |
| reason | string |
| Argument | Type | Description |
|---|---|---|
| triggeredBy | string | Signpost name or ceiling crux that caused the adapt |
| actionTaken | string | |
| reason | string | |
| reading? | string | |
| exercisedCeilingCrux? | string | If the action exercised a ceiling option, name the crux to mark it |
| Argument | Type | Description |
|---|---|---|
| reason | string | |
| brokenAssumptions | array |
| Argument | Type | Description |
|---|---|---|
| reason | string |
Resources
2026.05.01.1 — Add article link to extension description
Surface the source article URL directly in the manifest description so the swamp.club extension page links to it without forcing readers into the README:
Article: https://bovolon.substack.com/p/good-planning-bad-planning
The link was already present in README.md, SKILL.md, and the model source file as a citation, but missing from the manifest description that drives the registry summary card. No code or schema changes — this is a metadata-only release.
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License declared1/1earned
- Verified public repository2/2earned