@antoneeo/mkt-agentic-sdlc-skill 0.27.0 → 0.29.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 +48 -0
- package/README.md +29 -13
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/skills/mkt-agentic-sdlc/SKILL.md +2 -2
- package/skills/mkt-agentic-sdlc/elicitation.md +3 -1
- package/skills/mkt-agentic-sdlc/review.md +31 -1
- package/skills/mkt-agentic-sdlc/scripts/sdlc_core.py +54 -14
- package/skills/mkt-agentic-sdlc/templates.md +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.29.0] - 2026-10-31
|
|
4
|
+
|
|
5
|
+
### What's new
|
|
6
|
+
|
|
7
|
+
**Decisions taken on your behalf are labelled.** In the request record, a decision a session took under a delegation you gave it, and words you gave one session for an engagement another session records, now carry their own heading. They are never read later as something you said yourself, and a delegated decision never overrides one of yours: a choice that would change it comes back to you as a question.
|
|
8
|
+
|
|
9
|
+
#### What to do
|
|
10
|
+
|
|
11
|
+
**1. Update (everyone).** The changes arrive only with the update.
|
|
12
|
+
1. Run `npm install -g @antoneeo/mkt-agentic-sdlc-skill@latest`, then `mkt-sdlc-install-skill`.
|
|
13
|
+
2. Close and reopen your agent sessions: the new version loads only at startup.
|
|
14
|
+
|
|
15
|
+
To check: `npm ls -g @antoneeo/mkt-agentic-sdlc-skill` shows 0.29.0.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Request record (`templates.md`, F-088): labelled entries `decided under delegation R<m>` and `received for <unit>`; `review.md` and `elicitation.md` treat them as the deciding session's choice or relayed words, never an owner statement.
|
|
19
|
+
|
|
20
|
+
## [0.28.0] - 2026-10-31
|
|
21
|
+
|
|
22
|
+
### What's new
|
|
23
|
+
|
|
24
|
+
**One approval, not two.** The other skills of the family now have the owner approve a design before the work starts. In marketing that approval already exists: you approve the strategy before any tactic. It now counts as that approval, so the agent asks you nothing more.
|
|
25
|
+
|
|
26
|
+
**The npm page tells you what is new.** This section, at the top of the package page, now summarizes each version for the people who install it.
|
|
27
|
+
|
|
28
|
+
**From 0.27.0, published without notes:**
|
|
29
|
+
- **The process checks can no longer be bypassed by accident.** Quoting a work level inside a sentence no longer counts as declaring it, and protected parts of the project stay protected when the agent changes folder.
|
|
30
|
+
- **You know what the project memory has not read yet.** The agent can tell how much of the project it has never examined (automatically in projects with a corpus, on request otherwise).
|
|
31
|
+
|
|
32
|
+
#### What to do
|
|
33
|
+
|
|
34
|
+
**1. Update (everyone).** The changes arrive only with the update.
|
|
35
|
+
1. Run `npm install -g @antoneeo/mkt-agentic-sdlc-skill@latest`, then `mkt-sdlc-install-skill`.
|
|
36
|
+
2. Close and reopen your agent sessions: the new version loads only at startup.
|
|
37
|
+
|
|
38
|
+
To check: `npm ls -g @antoneeo/mkt-agentic-sdlc-skill` shows 0.28.0.
|
|
39
|
+
|
|
40
|
+
**2. Protected folders in a repository with several docs folders (only if you use them; from 0.27.0).**
|
|
41
|
+
- **This concerns you if** your agent settings contain `gate --hook --protected` and the repository has more than one docs folder (`mkt_docs/` or `ai_docs/`), for example a package with its own.
|
|
42
|
+
- **Why:** protected paths are now read from the docs folder nearest to the edited file. A path written from the repository root, such as `packages/api/src/auth`, no longer matches the files inside `packages/api`, so the agent could change them without an analysis.
|
|
43
|
+
- **Steps:** rewrite those paths from the package: `packages/api/src/auth` becomes `src/auth`. Note that `src/auth` then protects the folder with that name in every project that has its own docs folder.
|
|
44
|
+
- **To check:** in a session with no open analysis, ask the agent for a small change to a protected file. It must be refused.
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- The client's approval of the strategy (phase 6 USER GATE) is now named as the owner's design approval of the shared `review.md`: no second question is added, and the lens's own unattended path applies. The shared `review.md` carries the rule the other lenses follow (F-087).
|
|
48
|
+
- The shared validator: `validate` notes an L3 ANALYSIS in implementation, started on or after 2026-10-31, whose request record holds no entry whose label begins `design approved`. It is a `[note]`: `--strict` exits as before. The `gate` refusal message adds that at L3 the ANALYSIS goes `IN_PROGRESS` only after the owner's design approval; its exit codes are unchanged (F-087).
|
|
49
|
+
- The package's npm page (its README) gains a "What's new in <version>" section right after the introduction, written for the people who install the package and linking the full CHANGELOG. It appears from the first version that carries one; each version's notes are the `### What's new` at the top of its CHANGELOG section (F-070). The "Shared project memory" section moves from the top of the page to just after the features, unchanged.
|
|
50
|
+
|
|
3
51
|
## [0.27.0] - 2026-10-27
|
|
4
52
|
|
|
5
53
|
### Added
|
package/README.md
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
# Marketing Agentic SDLC Skill
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Evidence-First marketing planning protocol for AI coding agents (Claude Code, Gemini CLI, Google Antigravity, Codex). The sibling of [`@antoneeo/agentic-sdlc-skill`](https://www.npmjs.com/package/@antoneeo/agentic-sdlc-skill), transplanted from software engineering to marketing strategy.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`recall "onboarding"` finds related metadata across domains; optional
|
|
9
|
-
`topics: [onboarding]` links documents by subject. Read the originals for authority,
|
|
10
|
-
status and evidence: discovery is not approval or proof of implementation.
|
|
5
|
+
<!-- whats-new:begin -->
|
|
6
|
+
<!-- generated by scripts/whats_new.js from distributions/mkt-agentic-sdlc/CHANGELOG.md: edit the CHANGELOG, then run node scripts/whats_new.js --write -->
|
|
7
|
+
## What's new in 0.29.0
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
watcher. Existing projects acquire the catalog on their next `index`; `recall`
|
|
14
|
-
also sees live metadata. The KB lens remains the specialist for ingestion and
|
|
15
|
-
taxonomy. Marketing retains its numerical validators. See the skill's `memory.md`.
|
|
16
|
-
Vendoring requires all three files: the entry point, `sdlc_core.py`, `knowledge.py`.
|
|
9
|
+
**Decisions taken on your behalf are labelled.** In the request record, a decision a session took under a delegation you gave it, and words you gave one session for an engagement another session records, now carry their own heading. They are never read later as something you said yourself, and a delegated decision never overrides one of yours: a choice that would change it comes back to you as a question.
|
|
17
10
|
|
|
11
|
+
#### What to do
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
**1. Update (everyone).** The changes arrive only with the update.
|
|
14
|
+
1. Run `npm install -g @antoneeo/mkt-agentic-sdlc-skill@latest`, then `mkt-sdlc-install-skill`.
|
|
15
|
+
2. Close and reopen your agent sessions: the new version loads only at startup.
|
|
16
|
+
|
|
17
|
+
To check: `npm ls -g @antoneeo/mkt-agentic-sdlc-skill` shows 0.29.0.
|
|
18
|
+
|
|
19
|
+
Full history: [CHANGELOG](https://github.com/Antoneeo/agentic-sdlc-skill/blob/main/distributions/mkt-agentic-sdlc/CHANGELOG.md)
|
|
20
|
+
<!-- whats-new:end -->
|
|
20
21
|
|
|
21
22
|
## What it does
|
|
22
23
|
|
|
@@ -31,6 +32,21 @@ The **docs site** (`scripts/docs_site.py --root <project> [--open] [--zip <file>
|
|
|
31
32
|
|
|
32
33
|
The agent asks the user only for facts the user uniquely owns (product, price, budget, capacity); everything else — market sizing, competitor analysis, channel benchmarks — is derived from real web research.
|
|
33
34
|
|
|
35
|
+
## Shared project memory
|
|
36
|
+
|
|
37
|
+
All four lenses include project memory by default; install the lens you need,
|
|
38
|
+
not a second skill just for recall. `index` registers guides, decisions and plans
|
|
39
|
+
in the docs root's `memory/INDEX.md`, linking originals without copying them.
|
|
40
|
+
`recall "onboarding"` finds related metadata across domains; optional
|
|
41
|
+
`topics: [onboarding]` links documents by subject. Read the originals for authority,
|
|
42
|
+
status and evidence: discovery is not approval or proof of implementation.
|
|
43
|
+
|
|
44
|
+
Registration happens at `index`/documentation closure, not through a background
|
|
45
|
+
watcher. Existing projects acquire the catalog on their next `index`; `recall`
|
|
46
|
+
also sees live metadata. The KB lens remains the specialist for ingestion and
|
|
47
|
+
taxonomy. Marketing retains its numerical validators. See the skill's `memory.md`.
|
|
48
|
+
Vendoring requires all three files: the entry point, `sdlc_core.py`, `knowledge.py`.
|
|
49
|
+
|
|
34
50
|
## Install
|
|
35
51
|
|
|
36
52
|
```bash
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mkt-agentic-sdlc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.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.
|
|
3
|
+
"version": "0.29.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",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mkt-agentic-sdlc
|
|
3
|
-
version: 0.
|
|
3
|
+
version: 0.29.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
|
|
@@ -161,7 +161,7 @@ Deliverable language: ask for (or infer) the target market's language in Discove
|
|
|
161
161
|
- **Design review gate:** the strategy is reviewed by somebody other than its author before any tactic is executed — a subagent with fresh context, or a declared self-pass when no higher rung is usable — a permission-gated rung is asked about, never silently skipped (`review.md`). Follow `review.md`; log the outcome in `audit/reviews/REVIEW_LOG.md` under the docs root. A strategy reviewed only by the person who wrote it is not reviewed.
|
|
162
162
|
- Draft `STRATEGY.md`: segmentation, targeting choice with rationale, positioning (Dunford components + statement), messaging house.
|
|
163
163
|
- **Adversarial review** (`review.md`) before the user sees it. Fix or answer every finding.
|
|
164
|
-
- The user approves the strategy. Hybrid: propose as governed doc, user accepts in devPNT.
|
|
164
|
+
- The user approves the strategy. This is the owner's design approval of `review.md` §When a review is due, so no second question follows. Hybrid: propose as governed doc, user accepts in devPNT.
|
|
165
165
|
|
|
166
166
|
### 7. Tactics — **VALIDATOR GATE**
|
|
167
167
|
- Run elicitation **Wave 3** (execution capacity: who writes, who runs ads, tooling, sales follow-up).
|
|
@@ -71,7 +71,9 @@ intent choice with neither a source nor a weighing is a finding (`review.md`
|
|
|
71
71
|
- **Unattended** — the user is not reachable (the Unattended path above).
|
|
72
72
|
- **Delegated** — their own words handed you this choice; cite their entry in the
|
|
73
73
|
request record, or quote them where the engagement has none (below E3). A general
|
|
74
|
-
"go ahead" is not a delegation.
|
|
74
|
+
"go ahead" is not a delegation. A choice you make under it goes, where the
|
|
75
|
+
engagement has a request record, into it as a delegated entry (`templates.md` §REQUEST) and the artifact
|
|
76
|
+
cites that entry; it never changes an earlier decision of theirs — ask instead.
|
|
75
77
|
|
|
76
78
|
Each states **what it is taken from** and **the alternative it excludes** —
|
|
77
79
|
a number goes in the ledger as an ASSUMPTION row, anything else in the artifact it
|
|
@@ -198,6 +198,34 @@ is a belief: the row would say a gate ran and never whether it could do its job,
|
|
|
198
198
|
the correlation with `revise_rounds` and `findings_real` — the only evidence the
|
|
199
199
|
policy pays — could not be drawn.
|
|
200
200
|
|
|
201
|
+
**The owner approves the design before the work starts (L3).** The reviewer judges
|
|
202
|
+
whether the design holds and serves the Vision; only the owner can say whether it is
|
|
203
|
+
what they meant beyond what the Vision wrote, and an intent error costs least before
|
|
204
|
+
the work exists. So the final design PASS — final once any scoped re-review it owed
|
|
205
|
+
has passed (§Review-driven corrections) — does not start the work: the agent
|
|
206
|
+
presents the design and asks the owner whether to proceed, in the form
|
|
207
|
+
`elicitation.md` §The form of a question gives a reserved approval. The presentation
|
|
208
|
+
is a short summary — what the change does (the Functional Spec, or the lens's
|
|
209
|
+
equivalent), for whom and through which surfaces (use cases, contract), what it
|
|
210
|
+
touches (Impact), the threats and their mitigations, the review's verdict with any
|
|
211
|
+
open findings — and the path of the full design. At the round cap, the hand-over the
|
|
212
|
+
cap prescribes, followed by this one question, takes the place of the form, and the
|
|
213
|
+
owner's answer settles both. An approval is recorded verbatim in the request record
|
|
214
|
+
under a label that begins `design approved`; a no or a correction takes its own
|
|
215
|
+
label, and the design goes back — where the revision changes what the review judged,
|
|
216
|
+
moment 1 runs again on that part first (the delta rule above). Only after the
|
|
217
|
+
approval does the ANALYSIS go `PLANNED` → `IN_PROGRESS` and the work start: code,
|
|
218
|
+
drafting or production, by lens. An instruction given before the design was shown
|
|
219
|
+
("carry on", "do the whole unit") does not approve it. Where a lens's own phases
|
|
220
|
+
already have the owner approve the design — the marketing lens's strategy USER GATE
|
|
221
|
+
— that gate is this approval, never a second question, and the lens's own unattended
|
|
222
|
+
path applies. Otherwise, unattended, the unit is `BLOCKED on the user`
|
|
223
|
+
(`elicitation.md` Unattended path), never approved by assumption; a late arrival
|
|
224
|
+
(moment 1b) asks before any further work. Hybrid: the owner's approval of the
|
|
225
|
+
`E-ISP`/`E-TDD` proposal in devPNT, under devPNT's own authorization rules, is this
|
|
226
|
+
approval. In Standalone, `validate` notes an L3 ANALYSIS in implementation, started
|
|
227
|
+
on or after 2026-10-31, whose request record holds no `design approved` entry.
|
|
228
|
+
|
|
201
229
|
**One schema for both modes**, meaning one required CORE plus each mode's own
|
|
202
230
|
**mode-specific** realization columns. The core is what both modes actually share: `date`, `doc_key`,
|
|
203
231
|
`tier`, `model`, `findings_raised`, `findings_real`, `verdict`, `revise_rounds`.
|
|
@@ -439,7 +467,9 @@ When you are the reviewer:
|
|
|
439
467
|
the artifact relies on — an answer, an approval, a cost acceptance, a ruling, a
|
|
440
468
|
delegation — that resolves to no entry of the unit's request record, or that the
|
|
441
469
|
record contradicts, is a finding; so is a quotation in the record carrying what
|
|
442
|
-
its template says to redact
|
|
470
|
+
its template says to redact, a delegated entry citing no delegation or changing
|
|
471
|
+
an earlier owner decision, and an artifact of a shared unit citing a received
|
|
472
|
+
entry instead of the shared record (`templates.md` §REQUEST, labelled entries). What makes a ground
|
|
443
473
|
or an assumption legal is each lens's `elicitation.md` §The question discipline —
|
|
444
474
|
cite it, never restate it. The fix is the question, not a better justification.
|
|
445
475
|
- **Restated facts (cite, never copy).** Every governance slot has ONE owning document
|
|
@@ -100,6 +100,10 @@ CHRONOLOGY_EPOCH = "2026-10-18"
|
|
|
100
100
|
# filled '## Guide check'. The day AFTER the rule was written, so the analyses
|
|
101
101
|
# opened that day by parallel units (which never saw the template) stay quiet.
|
|
102
102
|
GUIDE_CHECK_EPOCH = "2026-10-24"
|
|
103
|
+
# Owner design approval (F-087): an L3 started on/after this date owes a request-
|
|
104
|
+
# record entry labelled `design approved` before implementation. The day AFTER the
|
|
105
|
+
# rule was written, like GUIDE_CHECK_EPOCH.
|
|
106
|
+
DESIGN_APPROVAL_EPOCH = "2026-10-31"
|
|
103
107
|
NEXT_MAX_CHARS = 240 # this repository's longest `next:` was 214 at the epoch
|
|
104
108
|
ID_SCAN_MAX_REFS = 300 # A3 is skipped above it (one advisory says so, T9)
|
|
105
109
|
ID_SCAN_REFS_PER_CALL = 50 # keeps one git command line far below 32k chars
|
|
@@ -1479,17 +1483,50 @@ def id_advisories(root):
|
|
|
1479
1483
|
return out
|
|
1480
1484
|
|
|
1481
1485
|
|
|
1482
|
-
def
|
|
1483
|
-
"""True when an L3 ANALYSIS
|
|
1484
|
-
|
|
1485
|
-
shipped. PLANNED is exempt -- the review is due at the END of Phase 3, so an
|
|
1486
|
-
analysis still being drafted is not late."""
|
|
1486
|
+
def _l3_in_work_since(meta, epoch):
|
|
1487
|
+
"""True when an L3 ANALYSIS is in implementation or done and began on/after
|
|
1488
|
+
`epoch` (an ISO date string)."""
|
|
1487
1489
|
if meta.get("level", "").upper() != "L3":
|
|
1488
1490
|
return False
|
|
1489
1491
|
if meta.get("status") not in ("IN_PROGRESS", "COMPLETED"):
|
|
1490
1492
|
return False
|
|
1491
1493
|
started = parse_iso((meta.get("start_date") or "").strip().strip("'\""))
|
|
1492
|
-
return started is not None and started >= parse_iso(
|
|
1494
|
+
return started is not None and started >= parse_iso(epoch)
|
|
1495
|
+
|
|
1496
|
+
|
|
1497
|
+
def design_review_due(meta):
|
|
1498
|
+
"""True when an L3 ANALYSIS owes a design-review row (review.md moment 1):
|
|
1499
|
+
implementation has started or finished, and it began on/after the gate
|
|
1500
|
+
shipped. PLANNED is exempt -- the review is due at the END of Phase 3, so an
|
|
1501
|
+
analysis still being drafted is not late."""
|
|
1502
|
+
return _l3_in_work_since(meta, DESIGN_REVIEW_EPOCH)
|
|
1503
|
+
|
|
1504
|
+
|
|
1505
|
+
def design_approval_due(meta):
|
|
1506
|
+
"""True when an L3 ANALYSIS owes the owner's design approval (review.md
|
|
1507
|
+
section When a review is due): in implementation or done, begun on/after
|
|
1508
|
+
DESIGN_APPROVAL_EPOCH. PLANNED is exempt -- the question comes after the PASS."""
|
|
1509
|
+
return _l3_in_work_since(meta, DESIGN_APPROVAL_EPOCH)
|
|
1510
|
+
|
|
1511
|
+
|
|
1512
|
+
def requests_naming(root, analysis_name):
|
|
1513
|
+
"""The request records whose `analysis:` field names this ANALYSIS file."""
|
|
1514
|
+
req = ai_path(root, "audit", "requests")
|
|
1515
|
+
if not req.is_dir():
|
|
1516
|
+
return []
|
|
1517
|
+
return [r for r in sorted(req.glob("REQUEST_*.md"))
|
|
1518
|
+
if str(load_frontmatter(read_text(r).splitlines()).get("analysis") or "")
|
|
1519
|
+
.strip().strip("'\"`") == analysis_name]
|
|
1520
|
+
|
|
1521
|
+
|
|
1522
|
+
def design_approval_logged(root, analysis_name):
|
|
1523
|
+
"""True when a request record naming this ANALYSIS has an entry whose LABEL
|
|
1524
|
+
begins `design approved` (case-insensitive). Only the label is read, never
|
|
1525
|
+
the quoted words: a quotation is data, and a 'design approved?' inside a
|
|
1526
|
+
refusal approves nothing."""
|
|
1527
|
+
return any(label.lower().startswith("design approved")
|
|
1528
|
+
for r in requests_naming(root, analysis_name)
|
|
1529
|
+
for _, _, label, _ in request_entries(read_text(r))[0])
|
|
1493
1530
|
|
|
1494
1531
|
|
|
1495
1532
|
def review_logged(root, analysis_name):
|
|
@@ -1801,6 +1838,12 @@ def cmd_validate(root, strict=False, hybrid=False):
|
|
|
1801
1838
|
advisories.append(f"{rel}: L3 in implementation with no design-review row in "
|
|
1802
1839
|
f"{review_log_rel()} -- the design was reviewed by nobody but its "
|
|
1803
1840
|
"author before code was written (review.md moment 1)")
|
|
1841
|
+
if (not hybrid and design_approval_due(meta)
|
|
1842
|
+
and not design_approval_logged(root, p.name)):
|
|
1843
|
+
advisories.append(f"{rel}: L3 in implementation with no design approval in its "
|
|
1844
|
+
"request record (no entry whose label begins 'design approved') -- the "
|
|
1845
|
+
"owner never said the design was what they meant before the "
|
|
1846
|
+
"work started (review.md, When a review is due)")
|
|
1804
1847
|
if ledger_due(meta) and not has_ledger_heading(text):
|
|
1805
1848
|
advisories.append(f"{rel}: L3 without '## Capability Ledger' -- the architect pass "
|
|
1806
1849
|
"left no record (architect.md); run it before the Impact")
|
|
@@ -2562,7 +2605,8 @@ def cmd_gate(args):
|
|
|
2562
2605
|
sys.stderr.write(
|
|
2563
2606
|
f"[sdlc gate] '{rel}' is on a protected path but no ANALYSIS_*.md is IN_PROGRESS. "
|
|
2564
2607
|
"If your analysis already exists, set its frontmatter to 'status: IN_PROGRESS' "
|
|
2565
|
-
"(that flip is what opens the gate
|
|
2608
|
+
"(that flip is what opens the gate; at L3, only after the owner's design approval, "
|
|
2609
|
+
"review.md); otherwise write it first (Phase 3).\n")
|
|
2566
2610
|
return 2
|
|
2567
2611
|
|
|
2568
2612
|
|
|
@@ -3063,13 +3107,9 @@ def _unit_documents(root, p):
|
|
|
3063
3107
|
reading or writing any of them is working on the unit."""
|
|
3064
3108
|
slug = p.stem[len("ANALYSIS_"):]
|
|
3065
3109
|
docs = {p, ai_path(root, "audit", f"HANDOFF_{slug}.md")}
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
meta = load_frontmatter(read_text(r).splitlines())
|
|
3070
|
-
if str(meta.get("analysis") or "").strip().strip("'\"`") == p.name:
|
|
3071
|
-
docs.add(r)
|
|
3072
|
-
docs.add(ai_path(root, "audit", f"HANDOFF_{r.stem[len('REQUEST_'):]}.md"))
|
|
3110
|
+
for r in requests_naming(root, p.name):
|
|
3111
|
+
docs.add(r)
|
|
3112
|
+
docs.add(ai_path(root, "audit", f"HANDOFF_{r.stem[len('REQUEST_'):]}.md"))
|
|
3073
3113
|
return {_norm_rel(d.resolve().as_posix()) for d in docs}
|
|
3074
3114
|
|
|
3075
3115
|
|
|
@@ -159,6 +159,14 @@ Context (agent): "the question it answered, quoted"
|
|
|
159
159
|
entered only as `[NOT VERBATIM — from <source>]`, never as a quote.
|
|
160
160
|
- **Unattended**: R1 quotes the trigger that started the engagement, labelled as such.
|
|
161
161
|
Declared assumptions are not owner statements and never enter the record.
|
|
162
|
+
- **Labelled entries** (r41): a decision taken under the owner's delegation is
|
|
163
|
+
`### R<n> — YYYY-MM-DD — decided under delegation R<m> — <what it settles>`, citing
|
|
164
|
+
the delegation entry (in Hybrid also the devPNT proposal it accepted); it is the
|
|
165
|
+
deciding session's choice, never an owner statement, and never changes an earlier
|
|
166
|
+
owner decision — that goes to the owner as a question. Owner words received for a
|
|
167
|
+
unit whose record another session writes are
|
|
168
|
+
`### R<n> — YYYY-MM-DD — received for <unit> — <what it settles>`, then sent to that
|
|
169
|
+
record's writer, who enters them verbatim citing this entry.
|
|
162
170
|
- **Hybrid**: always on the filesystem; an approval given in devPNT is named by its
|
|
163
171
|
proposal, not quoted.
|
|
164
172
|
|