Add planning-cldk-work: the mode upstream of design - #35
Merged
Conversation
The ladder had no entry point for work that is not yet a single change. Every routing row assumed the change had already been chosen, so a team shaping a quarter -- or a theme like "microservice static analysis" -- had to run design mode repeatedly and got N unrelated specs with nothing expressing order, dependency, or what was deliberately excluded. The entry test is "can this be stated as a single contract decision?" Two shapes fail it and both belong here: a theme that decomposes into several decisions, and several initiatives competing for the same quarter. Plurality lives in the contract decisions, not in how many things the user named -- counting nouns gets both directions wrong, which is what S2 and S3 pin down. The core is the contract-collision sweep, and it is the reason the mode is worth having: microservice analysis and polyglot analysis both need boundary-edge vocabulary, so that is ONE design decision. Designed in separate sessions they produce two vocabularies for one concept, and the parity clause forbids renaming either afterwards. No other mode can see this -- they are all single-change scoped. Output is a committed roadmap (codellm-devkit/.github -> docs/design/roadmap.md) plus an epic for the one decision actually starting. Not one epic per candidate: that is the July flood with a nicer name, and it is called out in the red flags. Deliberately excluded: estimation, capacity, velocity. The mode reasons about contracts, dependencies and release trains -- the things specific to a multi-repo ecosystem under a shared schema -- and records and challenges rather than facilitating, since a planning session between people is a meeting an agent cannot run. Wires into the dispatcher (diagram, routing row, two scope-guard red flags), the README, and designing-cldk-changes' entry preconditions, which now note that work arriving from planning comes with its collision group already known.
tests/consistency/check-readme-dispatcher-sync.sh was failing on two blocks and had not been run before opening #35: - the dispatcher's ladder diagram still read "spec + GitHub epic" after 0.3.0 renamed it to "spec + tracking record" -- stale since #34 merged, which the check would have caught then - the README's routing row for planning-cldk-work disagreed word-for-word with the dispatcher's Both now match and the check passes. Adds CHANGELOG.md. 0.3.0 changed HARD-GATE semantics, removed two Red Flags rows that forbade smaller tracking shapes, moved epics to another repo, retired "Part of #N" trailers, relocated specs, and made every ladder transition stop for the user -- all behaviour-breaking for anyone on 0.2.0 conventions, and none of it declared anywhere. #34's PR body never filled in the org template's "Breaking Changes" section, so this is the first place it is written down.
ponytail-review pass over the branch. The skill said the same thing three times
because the entry test, the loop step and the red-flag row were written in
separate passes and the whole file was never re-read.
- plugin.json: a json.dumps rewrite had escaped the em-dash and exploded the
keywords array onto 8 lines -- 12 lines of churn for a one-character version
bump. Restored to a one-line diff.
- SKILL.md: dropped the second and third copies of "microservice is a theme,
decompose it", and two restatements of why the mode exists.
- SKILL.md: cut 4 of 8 Red Flags rows that echoed prose on the same page. The
table is where restatement accumulates.
- roadmap-template.md: dropped "Why a doc and not issues" -- the fourth copy of
that argument, after the skill's red flags, the org CONTRIBUTING and CLAUDE.md.
A template shows the shape; it does not re-argue the policy. "Amending it"
shrank from 7 lines to 2.
- scenarios: dropped the closing meta-paragraphs explaining which scenario each
was a counterpart to. s2's also still asserted the OLD precondition ("two or
more candidate features, none chosen"), contradicting the entry test it
exists to check -- cutting it removed the contradiction.
- CHANGELOG: dropped the 0.4.0 "Fixed" entry, which documented doc-sync churn
introduced and resolved inside the same unreleased version, and the empty
0.2.0 baseline stub.
Consistency check still passes; no reference to the old precondition survives.
The HARD-GATE required the collision sweep to have run. A sweep across undecomposed themes runs clean, reports no groups, and satisfies the gate -- while the collision it exists to catch is still there, just invisible. Gate now requires both halves: themes decomposed to contract-decision altitude AND the sweep run over the result. Restores the "'Microservice analysis' is one row" red flag, reworded to state the failure rather than repeat the instruction. The previous ponytail pass cut it as a duplicate of the loop prose; it was not -- it was the second guard on this hole, and the complexity review had no way to see that. Resolves the contradiction between "vagueness is fine and expected" and step 1's demand for decision altitude: vague wording is fine, vague altitude is not.
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
planning-cldk-work, a new mode upstream of design mode, for work that cannot yet be stated as a single contract decision. Also syncs two out-of-sync doc blocks and adds a CHANGELOG that declares 0.3.0's undeclared breaking change.Motivation and Context
Every routing row in the ladder was singular — "New language", "a language", "a facade surface" — and assumed the change had already been chosen.
sprint,prioriti*,capacity,portfolioappear zero times across the skills. A team shaping a quarter, or anyone holding a theme like "microservice static analysis", had no entry point and would run design mode repeatedly, producing N unrelated specs with nothing expressing order, dependency, or deliberate exclusion.The entry test is "can this be stated as a single contract decision?" — not a count of features named, which gets both directions wrong:
The mode earns its place through the contract-collision sweep: microservice analysis and polyglot analysis both need boundary-edge vocabulary (
http/rpc/queue), so that is ONE design decision. Designed separately they produce two vocabularies for one concept, and the parity clause forbids renaming either afterwards. Nothing else in the ladder can see this — every other mode is single-change scoped.Output is a committed roadmap plus an epic for the one decision actually starting. Not one epic per candidate: that is the July issue flood with a nicer name.
How Has This Been Tested?
Not tested by execution. This is the honest answer and worth stating plainly:
tests/scenarios/planning-cldk-work/s1–s3are scenario specifications — prose describing what a subagent run should conclude. They were written alongside the skill and have not been run.tests/consistency/check-readme-dispatcher-sync.shwas run and now passes. It failed on first run against this branch, catching two real defects (below) that would otherwise have shipped.Breaking Changes
No for this PR —
planning-cldk-workis additive, and the dispatcher gains a routing row without altering any existing route.Yes for 0.3.0, which this PR documents for the first time in the new
CHANGELOG.md. That release changed<HARD-GATE>semantics, removed two Red Flags rows forbidding smaller tracking shapes, moved epics tocodellm-devkit/.github, retiredPart of #Ntrailers andCHILDRENchecklists in favour of sub-issues, relocated specs todocs/design/, and made every ladder transition stop for the user. #34's body never filled in this section, so it went undeclared.Types of changes
Checklist
Additional context
Also in this PR
check-readme-dispatcher-sync.shfailed on first run, on two blocks:Both fixed; the check passes.
Design decisions worth reviewing
Known gaps