@antoneeo/mkt-agentic-sdlc-skill 0.13.0 → 0.14.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/CHANGELOG.md CHANGED
@@ -1,13 +1,36 @@
1
1
  # Changelog
2
2
 
3
- ## [0.13.0] - 2026-09-19
4
-
5
- ### Added
6
- - F-057: shared project memory in every lens, no sibling installation required.
7
- `index` catalogs original documents; `recall QUERY` searches live metadata.
8
- KB integrity is shared; domain ownership and marketing numerical checks remain.
9
- Vendored validators now require entry point + sdlc_core.py + knowledge.py.
10
-
3
+ ## [0.14.0] - 2026-09-25
4
+
5
+ ### Changed
6
+ - **F-026 revised: a real doubt is asked when it emerges.** The question discipline
7
+ no longer sends doubts to the deliverable ("Default non-blocking" is gone). A real
8
+ doubt (a fact the search leaves open, or a choice whose pros and cons do not
9
+ settle it) is asked before the first write that would embed its answer, grouped,
10
+ with the pros and cons of each option. A choice that clearly wins the weighing is
11
+ taken without asking, and the weighing is written next to it — each rejected option
12
+ stated at its strongest; options that serve different needs, none good enough at
13
+ both, that nothing the user wrote ranks are a real doubt, however clear the
14
+ agent's own ranking. Reserved approvals
15
+ are always asked. A real doubt becomes a declared assumption only in unattended
16
+ or delegated work. `review.md` makes an unasked doubt a design-review finding; `dispatch.md`
17
+ tells a subagent to return its real doubts instead of deciding them.
18
+
19
+ ### Fixed
20
+ - **`stale` no longer counts the audit plan against the area that holds it.**
21
+ Committing a hash mark of `ai_docs/` changed `ai_docs/audit/audit_plan.md` after
22
+ the recorded commit, so the area went stale again and every re-mark repeated the
23
+ loop. The plan's own edits are now excluded; any other change in the area still
24
+ counts.
25
+
26
+ ## [0.13.0] - 2026-09-19
27
+
28
+ ### Added
29
+ - F-057: shared project memory in every lens, no sibling installation required.
30
+ `index` catalogs original documents; `recall QUERY` searches live metadata.
31
+ KB integrity is shared; domain ownership and marketing numerical checks remain.
32
+ Vendored validators now require entry point + sdlc_core.py + knowledge.py.
33
+
11
34
 
12
35
  ### Fixed
13
36
  - **F-056: `stale` no longer reports an area fresh when it cannot evaluate it.** An
package/README.md CHANGED
@@ -102,7 +102,7 @@ that no update overrides -- ENFORCEMENT.md par.4).
102
102
  | [`@antoneeo/kb-agentic-skill`](https://www.npmjs.com/package/@antoneeo/kb-agentic-skill) | the documents you supply | topic |
103
103
  | `@antoneeo/mkt-agentic-sdlc-skill` (this one) | market evidence | engagement |
104
104
 
105
- Triage, the Vision Gate, the review gates, the guide router, question discipline and the validator spine are byte-identical across the three; only the fidelity discipline and the vocabulary change. When two live in the same project, `routing.md` decides which lens owns a given piece of work — with the market-facing override: anything whose purpose is to persuade the market is this lens's, whatever its source.
105
+ Triage, the Vision Gate, the review gates, the guide router and the validator spine are byte-identical across the three, and the question discipline is the same rule restated in each lens's vocabulary; only the fidelity discipline and the vocabulary change. When two live in the same project, `routing.md` decides which lens owns a given piece of work — with the market-facing override: anything whose purpose is to persuade the market is this lens's, whatever its source.
106
106
 
107
107
  ## Which model to run it on
108
108
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mkt-agentic-sdlc",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Evidence-First marketing planning protocol with engagement triage, SOSTAC workflow, evidence ledger and optional devPNT integration.",
5
5
  "author": "Antonio Pinto (https://github.com/Antoneeo)"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antoneeo/mkt-agentic-sdlc-skill",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Evidence-First marketing planning protocol for Claude Code, Gemini CLI, Google Antigravity and Codex: engagement triage, SOSTAC workflow, evidence ledger, mechanical validator and optional devPNT integration.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -32,9 +32,9 @@
32
32
  "skills/mkt-agentic-sdlc/research.md",
33
33
  "skills/mkt-agentic-sdlc/templates.md",
34
34
  "skills/mkt-agentic-sdlc/review.md",
35
- "skills/mkt-agentic-sdlc/scripts/sdlc_core.py",
36
- "skills/mkt-agentic-sdlc/scripts/knowledge.py",
37
- "skills/mkt-agentic-sdlc/memory.md",
35
+ "skills/mkt-agentic-sdlc/scripts/sdlc_core.py",
36
+ "skills/mkt-agentic-sdlc/scripts/knowledge.py",
37
+ "skills/mkt-agentic-sdlc/memory.md",
38
38
  "skills/mkt-agentic-sdlc/routing.md",
39
39
  "skills/mkt-agentic-sdlc/guides.md",
40
40
  "skills/mkt-agentic-sdlc/vision.md",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mkt-agentic-sdlc
3
- version: 0.13.0
3
+ version: 0.14.0
4
4
  description: Evidence-First marketing planning protocol with engagement triage, SOSTAC workflow, evidence ledger, adversarial CMO review, a complete Standalone mode and optional symbiosis with devPNT. Use for marketing plans, go-to-market strategy, campaign planning and market research.
5
5
  author: Antonio Pinto (https://github.com/Antoneeo)
6
6
  copyright: (c) 2026 Antonio Pinto
@@ -17,7 +17,7 @@ Support files in the skill directory:
17
17
  - `research.md`: the research playbook and the evidence ledger discipline.
18
18
  - `templates.md`: templates for every artifact and deliverable.
19
19
  - `review.md`: the family's shared review discipline (independence ladder, rounds, log). The marketing-specific attack surface — swap test, untraced numbers, orphan tactics, missing kill/scale — lives in `frameworks.md`'s falsification rules; the adversarial CMO review applies them through `review.md`'s procedure.
20
- - `scripts/mkt_check.py` + `scripts/sdlc_core.py`: the mechanical validator (`check`, `validate`, `ledger`, `benefit`, `budget`, `funnel`, `trace`, `index`, plus the spine's `stale`/`mark`/`gate`/`orient`/`plan`/`migrate`). Keep the entry point, `scripts/sdlc_core.py` and `scripts/knowledge.py` together; the last supplies common memory and KB integrity.
20
+ - `scripts/mkt_check.py` + `scripts/sdlc_core.py`: the mechanical validator (`check`, `validate`, `ledger`, `benefit`, `budget`, `funnel`, `trace`, `index`, plus the spine's `stale`/`mark`/`gate`/`orient`/`plan`/`migrate`). Keep the entry point, `scripts/sdlc_core.py` and `scripts/knowledge.py` together; the last supplies common memory and KB integrity.
21
21
  - `hybrid.md`: the devPNT seam — the authoritative hierarchy, the ownership matrix (which artifact is mastered where), and the Hybrid rules. Read it when the `devpnt_*` tools point at this project; a Standalone engagement never needs it.
22
22
  - `ENFORCEMENT.md`: optional setup for CI and hooks.
23
23
 
@@ -40,15 +40,15 @@ No process guarantees market success, and this skill never claims one. What it g
40
40
 
41
41
  If a strategic choice looks obvious but you cannot trace it to evidence, research first.
42
42
 
43
- ## Shared project memory
44
-
45
- Project memory is available by default, independently of installed sibling lenses.
46
- Read `memory.md` for the common consult/capture contract during orientation and
47
- closure. Use `recall` for cross-domain discovery; `index` registers original guides,
48
- plans and decisions without copying them. One owner still governs each unit.
49
- The validator now ships as three files: entry point, `sdlc_core.py`, `knowledge.py`.
50
-
51
- ## Rule Zero: Triage
43
+ ## Shared project memory
44
+
45
+ Project memory is available by default, independently of installed sibling lenses.
46
+ Read `memory.md` for the common consult/capture contract during orientation and
47
+ closure. Use `recall` for cross-domain discovery; `index` registers original guides,
48
+ plans and decisions without copying them. One owner still governs each unit.
49
+ The validator now ships as three files: entry point, `sdlc_core.py`, `knowledge.py`.
50
+
51
+ ## Rule Zero: Triage
52
52
 
53
53
 
54
54
  **Declare the level WITH the router verdict** (one line, for every engagement level above the trivial one): the result of the guide-router lookup, i.e. `Level: E2 · router: no match` or `Level: E3 · router: GUIDE_brand_voice.md → read`. The lookup is the consult trigger; making its result a declared output is what keeps it from being skipped — a level declared without a verdict makes "did not look" indistinguishable from "looked, nothing matched". Name the guide you matched, or `no match`.
@@ -65,7 +65,7 @@ Always classify the request before choosing the process. Declare the chosen leve
65
65
  | **Research Spike** | Time-boxed market question that reduces uncertainty ("is there demand for X in market Y?") | Outcome in `mkt_docs/spikes/RESEARCH_[topic].md`. Ledger discipline applies. For strategy decisions, feed into E2/E3. |
66
66
 
67
67
  Cross-cutting rules:
68
- - Every question to the user passes the legality test of the question discipline (`elicitation.md`): searched first with the search named, and the blocked decision named. The waves are where asking is planned; outside them the test gates each ask.
68
+ - A real doubt is asked when it emerges, before its answer is written; every question passes the legality test of the question discipline (`elicitation.md`): searched first with the search named, and the blocked decision named. The waves are where asking is planned; outside them the test gates each ask.
69
69
  - Anything touching pricing strategy, brand repositioning, or a new market entry is never E1: those decisions cascade.
70
70
  - If a bigger scope emerges during E1/E2 work (e.g. the campaign reveals there is no positioning), stop, reclassify and declare it.
71
71
  - When in doubt, pick the higher level.
@@ -26,7 +26,11 @@ without an E-ISP.
26
26
  - `sdlc_check.py plan brief PLAN_[feature].md --task <id>` — prints the
27
27
  task block, the `produces` of prior-order tasks (interfaces), and
28
28
  `guides` pointers (paths, never pasted content) to stdout.
29
- - Spawn the subagent with that brief as its entire context window.
29
+ - Spawn the subagent with that brief plus the return-doubts line as its
30
+ entire context window. The line: "An open point whose answer changes the
31
+ work is not yours to decide: return it in your final output with what you
32
+ searched." The orchestrator treats them as its own candidate doubts
33
+ (`elicitation.md` §When a doubt emerges).
30
34
  - Run `task.verify` out of band (the orchestrator executes it — the
31
35
  validator only ever prints it, never runs it) plus the one-shot review
32
36
  below.
@@ -1,147 +1,217 @@
1
- # Elicitation — question waves
2
-
3
- `## The question discipline` below governs EVERY question to the user — any
4
- phase, any level, inside or outside the waves. The waves are the only place the
5
- process *plans* the cost of asking.
6
-
7
- Ask for the **benefit** the user wants, never for the mechanism they imagine delivers it: a mechanism stated as a requirement forecloses every better one.
8
-
9
- The cardinal rule: **ask only what the user uniquely owns.** Facts about their
10
- business come from them; everything derivable from research comes from
11
- research. Asking the user "who are your competitors and how are you
12
- positioned?" is outsourcing the skill's own job — the failure mode this file
13
- exists to prevent.
14
-
15
- ## The question discipline
16
-
17
- A question outside the waves is legal only when BOTH hold:
18
-
19
- 1. **Searched first, and the search is named — with its result.** The answer is
20
- not on record (MKT-VISION, ledger, session notes) and not derivable from
21
- research — and the question states what you searched or researched **and what
22
- it returned**. **Never fake the search**: "I looked and found nothing" that
23
- names no sources and no queries is a search not run. A question research can
24
- answer is research outsourced to the client — the cardinal rule's own
25
- failure mode, restated as a legality test.
26
- 2. **It names what is blocked.** The question states the decision or fact that
27
- cannot be resolved without the reply — what changes in the plan depending on
28
- the answer. If nothing downstream changes, there is no question.
29
-
30
- Never legal:
31
-
32
- - **Generic confirmation** — "shall I proceed?", "is the plan OK so far?". The
33
- gates are where approval lives; if a real risk motivates the ask, name the
34
- risk and the fork — that is a blocking question and carries the form below.
35
- - **Preference-fishing** — asking the client to pick among options equivalent
36
- in their effect on the objective. Cheapness to undo is NOT the test.
37
- - **Re-asking the record** — anything an approved MKT-VISION, a ledger entry
38
- or an earlier answer already states.
39
-
40
- **Precedence:** a choice the user uniquely owns (budget, risk appetite,
41
- non-negotiables, brand red lines, approvals the gates reserve) is never
42
- preference-fishing; the list above reaches choices that are *not* theirs.
43
-
44
- **Default non-blocking.** An unknown on which no fork of the plan depends:
45
- record it as a ledger **ASSUMPTION** — the native mechanism this lens already
46
- has — proceed, and present the open points **batched** with the next wave or
47
- the deliverable, answered by exception. Same evidence duty as a question: each
48
- assumption states **what it is taken from** (a benchmark, a comparable, a
49
- stated policy) and **the alternative it excludes**, and every assumption
50
- reaches the batch — an assumption nobody is shown is a silent decision, and an
51
- unshown ASSUMPTION row is exactly a fabricated FACT waiting to happen.
52
-
53
- **Blocking is reserved** for three cases: proceeding under ANY assumption would
54
- waste the work (the forks diverge at once); the decision is one the user
55
- uniquely owns; or the doctrine itself mandates the stop. One mandating file
56
- prescribes its own hand-over, and there this form does not apply:
57
- `review.md`'s round cap (the artifact plus the open findings). That list is closed.
58
- Every other blocking question carries the form:
59
-
60
- - the fork: the concrete options and what each implies for the plan;
61
- - the evidence: what you researched and what it leaves undecided;
62
- - why no assumption survives — what work is discarded if you assume and are
63
- wrong;
64
- - why it is the user's call;
65
- - what stays blocked until answered.
66
-
67
- Question style (all waves):
68
- - Plain language, zero marketing jargon. Not "what's your ICP?" but "describe
69
- your best current customer".
70
- - Max 4 questions per round; multiple rounds per wave allowed but each round
71
- must be worth the interruption.
72
- - Offer concrete options where a real choice exists (narrows the reply,
73
- speeds the round). Use the client's structured-question facility when
74
- available.
75
- - **Pre-authorize "I don't know" on numeric asks.** When you ask for a figure
76
- the client may never have measured (conversion rate, CAC, open rate),
77
- append the permission in the question itself — "...ma se non l'avete mai
78
- misurato, va bene 'non lo so'." It removes the pressure to invent a number
79
- and keeps the ledger honest (an unmeasured figure becomes a researched
80
- BENCHMARK or a declared ASSUMPTION, never a fabricated FACT).
81
- - Every answer that is a fact becomes a `FACT` entry in the evidence ledger,
82
- same discipline as researched numbers.
83
- - **Seeds are allowed, analysis is not:** "which competitors do you lose
84
- deals to?" is a fact the user owns (their perceived competitive set) and a
85
- legitimate research seed. "What are their strengths and weaknesses?" is
86
- analysis — forbidden to ask, mandatory to research.
87
-
88
- ## Wave 1 — Discovery (phase 2, before any research)
89
-
90
- Cover, across rounds:
91
- 1. **Offer** — what they sell, in their words; what problem it solves.
92
- 2. **Price & margin** — price point(s), rough margin, discount reality.
93
- 3. **Current traction** — customers today (how many, what kind), revenue
94
- order of magnitude, where the current customers came from.
95
- 4. **Market & language** — geography, target market, language for the
96
- deliverables.
97
- 5. **Budget & horizon** — marketing budget range (a range is fine), planning
98
- horizon (quarter / year / launch window).
99
- 6. **Team & capacity** — who will execute marketing (nobody / founder /
100
- person / team / agency), hours realistically available.
101
- 7. **Sales motion** — how a sale happens today (self-serve, demo calls,
102
- proposals, retail...), typical cycle length.
103
- 8. **Existing assets** — website, mailing list, social accounts and their
104
- real state; brand materials.
105
- 9. **Constraints** — legal/regulatory limits, channels they refuse, brand
106
- red lines.
107
- 10. **Competitor seeds** — who they lose deals to / who customers compare
108
- them with (seed, not analysis).
109
-
110
- Skip path: any item already answered by an approved MKT-VISION or earlier
111
- session record is not re-asked — note where the answer came from.
112
-
113
- ## Wave 2 — Ambition (phase 5 entry, after research)
114
-
115
- Now the user chooses with research on the table. Present the relevant
116
- evidence first (one short paragraph), then ask:
117
- 1. **Growth vs margin** — push volume or protect profitability?
118
- 2. **Risk appetite** — proven channels only, or reserve an experimental slice?
119
- 3. **Timeline pressure** — is there a hard date (launch, season, runway)?
120
- 4. **Non-negotiables** — anything the objectives must include or avoid?
121
-
122
- ## Wave 3 — Execution capacity (phase 7 entry)
123
-
124
- 1. **Content capacity** — who writes/records, in which language, how often
125
- realistically?
126
- 2. **Paid capacity** — who runs ads; any platform experience in-house?
127
- 3. **Follow-up capacity** — if leads double, who answers them? CRM/tooling?
128
- 4. **Budget flexibility** — is the budget fixed or scalable if a channel
129
- proves itself?
130
-
131
- ## Reflect
132
-
133
- Fold answers into the artifacts (MKT_VISION, OBJECTIVES, TACTICAL_PLAN) and
134
- the ledger — never leave them only in chat. The written document is what the
135
- next session and the reviewer read.
136
-
137
- ## Anti-patterns
138
-
139
- - **Outsourcing analysis**: asking the user for market size, competitor
140
- strengths, channel choice, or positioning. That is the skill's work.
141
- - **Jargon**: ICP, CAC, SOM, funnel — translate or don't ask.
142
- - **Interrogation**: more than 4 questions per round, or drip-feeding across
143
- many turns instead of structured rounds.
144
- - **Re-asking the recorded**: anything an approved vision or ledger FACT
145
- already answers.
146
- - **Collecting without folding in**: answers that never reach a document or
147
- the ledger are lost to the next session.
1
+ # Elicitation — question waves
2
+
3
+ `## The question discipline` below governs EVERY doubt and EVERY question to the
4
+ user — any phase, any level, inside or outside the waves. The waves are the only
5
+ place the process *plans* the cost of asking.
6
+
7
+ Ask for the **benefit** the user wants, never for the mechanism they imagine delivers it: a mechanism stated as a requirement forecloses every better one.
8
+
9
+ The cardinal rule: **ask only what the user uniquely owns.** Facts about their
10
+ business come from them; everything derivable from research comes from
11
+ research. Asking the user "who are your competitors and how are you
12
+ positioned?" is outsourcing the skill's own job — the failure mode this file
13
+ exists to prevent.
14
+
15
+ Unattended path: when the user is not reachable (a scheduled or autonomous run)
16
+ and a real doubt remains, do not stall and do not invent consensus. Record it as
17
+ a **declared assumption** (§Ask before the write). At E3 the artifact stays
18
+ `DRAFT` and the plan holds at the next user gate; at E1/E2, proceed and list the
19
+ assumption in the reply.
20
+
21
+ ## The question discipline
22
+
23
+ A doubt kept silent is decided by the agent alone and reaches the plan looking
24
+ settled; a useless question wastes the user's attention. This section rules on
25
+ both.
26
+
27
+ ### When a doubt emerges
28
+
29
+ A **candidate doubt** is an open point whose answer changes the plan. The usual
30
+ signals — they illustrate, they do not close the definition:
31
+
32
+ | Thought | What it means |
33
+ |---|---|
34
+ | "They probably mean…", "I'll assume…" | you are choosing between readings of the request |
35
+ | "The brief doesn't say, so I'll fill it in" | a gap in scope, a non-goal, a budget or a priority |
36
+ | "Either would work, I'll pick one" | equivalent in effect: yours, pick and do not ask; different in effect: weigh them below |
37
+ | "I'll note it as an assumption and move on" | with the user reachable, that note is where doubts go to be forgotten |
38
+
39
+ - **A fact about the business, or information only the user holds** (a budget,
40
+ a margin, a red line): settled only by evidence, cited —
41
+ never settled by a weighing. A ledger ASSUMPTION backed by a benchmark, a
42
+ comparable or a stated policy is a researched answer with its confidence, not a
43
+ doubt; a gap only the user can fill is a real doubt.
44
+ - **A choice** — a reading of the brief, a strategic trade-off: cite the user's
45
+ statement that settles it (the brief, an APPROVED MKT-VISION, an earlier answer);
46
+ failing one, weigh the pros and cons of each option, stating each rejected option
47
+ at its strongest — the need it serves best; a weighing won against a weak version
48
+ of the alternative is not a weighing. One clearly outweighs: take it and write the
49
+ weighing with the choice — "I take X over Z: pro …, contro …". Balanced, or
50
+ turning on a priority of theirs not on record: a **real doubt** — and it turns on
51
+ one whenever the options serve different needs of the audience or the business,
52
+ each better at one the user would notice in the results (reach against
53
+ conversion, speed to market against completeness of the launch) and
54
+ none good enough at both, and nothing the user wrote ranks those needs — however
55
+ clear your own ranking feels. "The more natural reading" with no pros and cons
56
+ written is not a weighing. Reserved approvals never enter this test
57
+ (§The form of a question).
58
+
59
+ ### Ask before the write
60
+
61
+ A real doubt that passes the legality test below is **owed**, not merely allowed.
62
+ Ask it before the first write that would embed its answer, grouped with every
63
+ doubt open at that point — the next wave when one is due, otherwise one round —
64
+ following the question style below. Never defer a doubt to the deliverable, where
65
+ the user must find it inside the plan; never drip one question per turn. An
66
+ intent choice with neither a source nor a weighing is a finding (`review.md`
67
+ §Reviewing).
68
+
69
+ **Declared assumptions exist only where no question can be asked:**
70
+
71
+ - **Unattended** — the user is not reachable (the Unattended path above).
72
+ - **Delegated** — their own words handed you this choice; quote them. A general
73
+ "go ahead" is not a delegation.
74
+
75
+ Each states **what it is taken from** and **the alternative it excludes** —
76
+ a number goes in the ledger as an ASSUMPTION row, anything else in the artifact it
77
+ touches — and is listed where the user will read it: an unshown assumption is a
78
+ fabricated FACT waiting to happen. (A researched ASSUMPTION row, with its range and
79
+ confidence, is an answer, not a declared assumption.) A dispatched subagent returns
80
+ its open points in its final output (`dispatch.md`); the orchestrator treats them as
81
+ its own candidate doubts (§When a doubt emerges).
82
+
83
+ ### The legality test
84
+
85
+ A question outside the waves is legal only when BOTH hold:
86
+
87
+ 1. **Searched first, and the search is named — with its result.** The answer is
88
+ not on record (MKT-VISION, ledger, session notes) and not derivable from
89
+ research — and the question states what you searched or researched **and what
90
+ it returned**. **Never fake the search**: "I looked and found nothing" that
91
+ names no sources and no queries is a search not run. A question research can
92
+ answer is research outsourced to the client — the cardinal rule's own
93
+ failure mode, restated as a legality test.
94
+ 2. **It names what is blocked.** The question states the decision or fact that
95
+ cannot be resolved without the reply — what changes in the plan depending on
96
+ the answer. If nothing downstream changes, there is no question.
97
+
98
+ Never legal:
99
+
100
+ - **Generic confirmation** — "shall I proceed?", "is the plan OK so far?". The
101
+ gates are where approval lives; if a real risk motivates the ask, name the
102
+ risk and the fork — that is a blocking question and carries the form below.
103
+ - **Preference-fishing** — asking the client to pick among options equivalent
104
+ in their effect on the objective. Cheapness to undo is NOT the test.
105
+ - **Re-asking the record** — anything an approved MKT-VISION, a ledger entry
106
+ or an earlier answer already states.
107
+
108
+ **Precedence:** a choice the user uniquely owns (budget, risk appetite,
109
+ non-negotiables, brand red lines, approvals the gates reserve) is never
110
+ preference-fishing; the list above reaches choices that are *not* theirs.
111
+
112
+ ### The form of a question
113
+
114
+ The approvals the gates reserve and every stop the doctrine mandates are asked
115
+ whatever you expect the answer: **legal by mandate**, never weighed, never
116
+ re-argued here. Unattended, they are never assumed: the plan holds at the gate,
117
+ unless the mandating rule prescribes its own unattended handling (`review.md`'s
118
+ gated rung does).
119
+
120
+ One mandating file prescribes its own hand-over, and there this form does not
121
+ apply: `review.md`'s round cap (the artifact plus the open findings).
122
+ That list is closed. A question outside the waves carries the **blocking form**,
123
+ one line per element:
124
+
125
+ - the fork: the options, each with its pros and cons, and what each implies for
126
+ the plan;
127
+ - the evidence: what you researched and what it leaves undecided;
128
+ - why no assumption survives — why the weighing does not settle it, and what a
129
+ wrong pick costs; a reserved approval or a mandated stop cites the approval or
130
+ the mandate instead;
131
+ - why it is the user's call;
132
+ - what stays blocked until answered.
133
+
134
+ Question style (all waves):
135
+ - Plain language, zero marketing jargon. Not "what's your ICP?" but "describe
136
+ your best current customer".
137
+ - Max 4 questions per round; multiple rounds per wave allowed but each round
138
+ must be worth the interruption. More than 4 open doubts: the next round follows
139
+ at once, still before the write.
140
+ - Offer concrete options where a real choice exists, each with its pros and
141
+ cons (narrows the reply, speeds the round). Use the client's
142
+ structured-question facility when available.
143
+ - **Pre-authorize "I don't know" on numeric asks.** When you ask for a figure
144
+ the client may never have measured (conversion rate, CAC, open rate),
145
+ append the permission in the question itself — "...ma se non l'avete mai
146
+ misurato, va bene 'non lo so'." It removes the pressure to invent a number
147
+ and keeps the ledger honest (an unmeasured figure becomes a researched
148
+ BENCHMARK or a declared ASSUMPTION, never a fabricated FACT).
149
+ - Every answer that is a fact becomes a `FACT` entry in the evidence ledger,
150
+ same discipline as researched numbers.
151
+ - **Seeds are allowed, analysis is not:** "which competitors do you lose
152
+ deals to?" is a fact the user owns (their perceived competitive set) and a
153
+ legitimate research seed. "What are their strengths and weaknesses?" is
154
+ analysis — forbidden to ask, mandatory to research.
155
+
156
+ ## Wave 1 — Discovery (phase 2, before any research)
157
+
158
+ Cover, across rounds:
159
+ 1. **Offer** — what they sell, in their words; what problem it solves.
160
+ 2. **Price & margin** — price point(s), rough margin, discount reality.
161
+ 3. **Current traction** — customers today (how many, what kind), revenue
162
+ order of magnitude, where the current customers came from.
163
+ 4. **Market & language** — geography, target market, language for the
164
+ deliverables.
165
+ 5. **Budget & horizon** — marketing budget range (a range is fine), planning
166
+ horizon (quarter / year / launch window).
167
+ 6. **Team & capacity** — who will execute marketing (nobody / founder /
168
+ person / team / agency), hours realistically available.
169
+ 7. **Sales motion** — how a sale happens today (self-serve, demo calls,
170
+ proposals, retail...), typical cycle length.
171
+ 8. **Existing assets** — website, mailing list, social accounts and their
172
+ real state; brand materials.
173
+ 9. **Constraints** — legal/regulatory limits, channels they refuse, brand
174
+ red lines.
175
+ 10. **Competitor seeds** — who they lose deals to / who customers compare
176
+ them with (seed, not analysis).
177
+
178
+ Skip path: any item already answered by an approved MKT-VISION or earlier
179
+ session record is not re-asked — note where the answer came from.
180
+
181
+ ## Wave 2 — Ambition (phase 5 entry, after research)
182
+
183
+ Now the user chooses with research on the table. Present the relevant
184
+ evidence first (one short paragraph), then ask:
185
+ 1. **Growth vs margin** — push volume or protect profitability?
186
+ 2. **Risk appetite** — proven channels only, or reserve an experimental slice?
187
+ 3. **Timeline pressure** — is there a hard date (launch, season, runway)?
188
+ 4. **Non-negotiables** — anything the objectives must include or avoid?
189
+
190
+ ## Wave 3 — Execution capacity (phase 7 entry)
191
+
192
+ 1. **Content capacity** — who writes/records, in which language, how often
193
+ realistically?
194
+ 2. **Paid capacity** — who runs ads; any platform experience in-house?
195
+ 3. **Follow-up capacity** — if leads double, who answers them? CRM/tooling?
196
+ 4. **Budget flexibility** — is the budget fixed or scalable if a channel
197
+ proves itself?
198
+
199
+ ## Reflect
200
+
201
+ Fold answers into the artifacts (MKT_VISION, OBJECTIVES, TACTICAL_PLAN) and
202
+ the ledger — never leave them only in chat. The written document is what the
203
+ next session and the reviewer read.
204
+
205
+ ## Anti-patterns
206
+
207
+ - **Deferring a doubt into the plan**: writing a guess into the artifact and
208
+ leaving the user to find it there.
209
+ - **Outsourcing analysis**: asking the user for market size, competitor
210
+ strengths, channel choice, or positioning. That is the skill's work.
211
+ - **Jargon**: ICP, CAC, SOM, funnel — translate or don't ask.
212
+ - **Interrogation**: more than 4 questions per round, or drip-feeding across
213
+ many turns instead of structured rounds.
214
+ - **Re-asking the recorded**: anything an approved vision or ledger FACT
215
+ already answers.
216
+ - **Collecting without folding in**: answers that never reach a document or
217
+ the ledger are lost to the next session.
@@ -55,7 +55,7 @@ above is already satisfiable and no stop fires (the row still carries
55
55
  rung 2 is not "usable" for this clause, it joins the question instead. When the best rung is gated and no
56
56
  ungated rung works, the gate STOPS and asks: descending to rung 3 on silence is
57
57
  illegal while a user is reachable. The stop is doctrine-mandated (legal by mandate,
58
- `elicitation.md` §Blocking is reserved) and carries that file's five-bullet
58
+ `elicitation.md` §The form of a question) and carries that file's five-bullet
59
59
  blocking form — its closed-list exemption covers this file's round-cap hand-over
60
60
  only, not this stop. The question offers the gated rung(s) against the fallback, with what each
61
61
  buys; states each higher rung's status (tried / unusable / gated) with the
@@ -335,6 +335,13 @@ When you are the reviewer:
335
335
  statement is the proof the check ran; an unfalsifiable "I checked" is the review
336
336
  theater this discipline exists to prevent (the reviewer-side twin of §Receiving's
337
337
  silent-drop rule). Plain code reviews stay findings-only.
338
+ - **An unasked doubt is a finding (impact/solution-analysis & design reviews).** An
339
+ intent choice written with no owner-authored source and no weighing, a weighing
340
+ that names no rejected option or turns on an owner priority not on record, and a
341
+ fact or owner-held datum settled by a weighing instead of evidence are findings;
342
+ so is a cited source that does not say what the line claims. What makes a ground
343
+ or an assumption legal is each lens's `elicitation.md` §The question discipline —
344
+ cite it, never restate it. The fix is the question, not a better justification.
338
345
  - **Restated facts (cite, never copy).** Every governance slot has ONE owning document
339
346
  per project. A fact restated in the artifact under review when another document owns
340
347
  it is a **finding**: the fix is a citation naming the owner, not a better copy. This
@@ -1574,6 +1574,13 @@ def cmd_stale(root, hybrid=False):
1574
1574
  return rc # was: return 0 — MUST carry guide rc
1575
1575
  use_git = git_available(root)
1576
1576
  entry = entry_script()
1577
+ # The audit plan records the marks: its own edits are not a change to the area
1578
+ # that contains it. Counting them made a committed hash mark of that area
1579
+ # stale again, and every re-mark repeated the loop.
1580
+ try:
1581
+ plan_rel = f.resolve().relative_to(Path(root).resolve()).as_posix()
1582
+ except ValueError:
1583
+ plan_rel = None
1577
1584
  # F-056: an ANALYZED row whose reference cannot be evaluated is UNVERIFIED,
1578
1585
  # never fresh. Each `continue` below that skips such a row records it here;
1579
1586
  # skipping silently is how a pruned reference printed `[ok]` over three areas.
@@ -1641,6 +1648,7 @@ def cmd_stale(root, hybrid=False):
1641
1648
  except ValueError: # symlink out of the tree: report absolute, never crash
1642
1649
  name = str(fp)
1643
1650
  changed.append(name)
1651
+ changed = [c for c in changed if c != plan_rel]
1644
1652
  if changed:
1645
1653
  stale.append((rel, changed))
1646
1654