@r1z4x/tezgah 1.5.1 → 1.6.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 +47 -1
- package/MANIFEST +6 -0
- package/bin/consult +13 -10
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-research +53 -3
- package/bin/tezgah-setup +1 -1
- package/bin/tezgah-task +192 -39
- package/docs/citations-baseline.json +1 -1
- package/docs/clarity-baseline.json +3 -3
- package/docs/contract.md +4 -1
- package/docs/feature-audit.md +24 -3
- package/docs/gate.md +10 -11
- package/docs/index.json +21 -7
- package/docs/research.md +46 -0
- package/docs/skills.md +23 -5
- package/hooks/tezgah_agents.py +3 -2
- package/hooks/tezgah_components.py +2 -1
- package/hooks/tezgah_context.py +65 -14
- package/hooks/tezgah_gate.py +62 -76
- package/hooks/tezgah_policy.py +38 -14
- package/hooks/tezgah_product.py +107 -0
- package/hooks/tezgah_research.py +3 -3
- package/hooks/tezgah_skill_pick.py +58 -17
- package/hooks/tezgah_task.py +2 -2
- package/hosts/opencode/plugins/tezgah.js +17 -37
- package/package.json +1 -1
- package/skills/analyze-app/SKILL.md +57 -0
- package/skills/design-contract/EVALS.md +24 -1
- package/skills/design-contract/SKILL.md +17 -1
- package/skills/design-contract/data-views.md +86 -0
- package/skills/feature-audit/SKILL.md +32 -3
- package/skills/plan-add/EVALS.md +8 -8
- package/skills/plan-add/SKILL.md +20 -21
- package/skills/plan-sync/EVALS.md +2 -2
- package/skills/plan-sync/SKILL.md +11 -7
- package/skills/pm-frameworks/SKILL.md +6 -0
- package/skills/product-analysis/EVALS.md +23 -1
- package/skills/product-analysis/SKILL.md +50 -11
- package/skills/product-flow/EVALS.md +81 -0
- package/skills/product-flow/SKILL.md +91 -0
- package/skills/research/SKILL.md +10 -1
- package/skills/tezgah-contract/SKILL.md +63 -39
|
@@ -39,7 +39,7 @@ of a product nobody can observe is a hypothesis, and it says so.
|
|
|
39
39
|
|
|
40
40
|
| Axis | The question | Standard | The hard rule |
|
|
41
41
|
|---|---|---|---|
|
|
42
|
-
| Value (PM) | is it worth building? | HEART and its Goals -> Signals -> Metrics process (Rodden, Hutchinson, Fu, CHI 2010); Opportunity Solution Tree with the opportunity score (Torres; Olsen) | a metric with no goal above it is dropped; raw counts are refused; an opportunity is a need;
|
|
42
|
+
| Value (PM) | is it worth building? | HEART and its Goals -> Signals -> Metrics process (Rodden, Hutchinson, Fu, CHI 2010); Opportunity Solution Tree with the opportunity score (Torres; Olsen) | a metric with no goal above it is dropped; raw counts are refused; an opportunity is a need; solutions are compared under `decisions/` when the user chooses between them |
|
|
43
43
|
| Usability (UX) | can a person actually use it? | Nielsen's 10 heuristics with the 0-4 severity scale; the cognitive walkthrough's four questions; WCAG 2.2 AA, and the W3C WCAG2Mobile note for native apps; Apple HIG or Material 3 for platform feel | a UI claim is read from the running app through `analyze-app` - down to component x state, never inferred from source - and the rendered screen is read, not only the tree; severity is frequency x impact x persistence; each finding says whether it is a provable failure (a WCAG criterion) or a judgement, and how many passes produced it |
|
|
44
44
|
| Feasibility (PE) | does it do what it says? | intended vs implemented | a claim is a cited `path:line` or graph symbol; a doc-vs-code gap is a finding only when **both** sides are cited; when the ask is one feature, the layer matrices decide it |
|
|
45
45
|
| Competition | where does it stand, and where can it lead? | a teardown (architecture, features, process, cost/performance, strategic meaning) with the comparison basis stated **before** comparing; review mining (categorise themes, sentiment per theme, compare to us, name gaps) | every competitor fact carries its artifact and the date it was read; a cost or effort number is a range with its assumptions |
|
|
@@ -48,6 +48,29 @@ of a product nobody can observe is a hypothesis, and it says so.
|
|
|
48
48
|
Calibrate to stage before prescribing: telling a pre-launch prototype to fix its
|
|
49
49
|
dependency graph, or a scaling product to "find product-market fit", is malpractice.
|
|
50
50
|
|
|
51
|
+
## Metrics
|
|
52
|
+
|
|
53
|
+
A metric is chosen, not collected. Name one North Star - the value users get, an
|
|
54
|
+
outcome nobody moves directly - and the few input metrics believed to drive it, as
|
|
55
|
+
a tree whose every edge is a hypothesis to test, not a fact (Amplitude, *The North
|
|
56
|
+
Star Playbook*). Each metric in the tree is one record:
|
|
57
|
+
|
|
58
|
+
| Field | What goes in it |
|
|
59
|
+
|---|---|
|
|
60
|
+
| goal | the HEART goal it traces to; no goal, no metric |
|
|
61
|
+
| signal | the behaviour or attitude that shows the goal moving |
|
|
62
|
+
| definition | numerator / denominator: a count becomes a ratio, a percentage or a per-user average (HEART) |
|
|
63
|
+
| window | the period it is computed over |
|
|
64
|
+
| baseline | what it is compared against: a target, the previous period or a benchmark |
|
|
65
|
+
| direction | which way is good |
|
|
66
|
+
| leading/lagging | whether it predicts the outcome or reports it |
|
|
67
|
+
| logged | yes / no / unknown: is the signal recorded today? |
|
|
68
|
+
| where the data lives | the table, event, export or file it is computed from |
|
|
69
|
+
|
|
70
|
+
A metric marked `logged: no` is instrumented before anything is promised on it, and
|
|
71
|
+
`unknown` is the gate's first finding. A dashboard ask takes this tree as its input
|
|
72
|
+
and then `design-contract`'s `data-views.md` for the screen.
|
|
73
|
+
|
|
51
74
|
## When the ask is one feature: run the coherence pass first
|
|
52
75
|
|
|
53
76
|
A product question about one feature - an admin screen, a CRUD surface, a form, a
|
|
@@ -243,17 +266,20 @@ Run it as a research line, not a monologue: `tezgah-research init <slug>
|
|
|
243
266
|
--question "..."` under the repository's `.tezgah/research/`, then `check` before
|
|
244
267
|
reporting. Declare the line's `deliverable` in `state.json` as `{"kind":
|
|
245
268
|
"analysis", "path": "<where the analysis lands>", "ask": [<the ask's items>]}`, so
|
|
246
|
-
`check` holds it to
|
|
247
|
-
|
|
269
|
+
`check` holds it to answering every ask item. An analysis answers its question
|
|
270
|
+
once - `check` asks no variants of it - and a design or plan the user chooses
|
|
271
|
+
between goes under `decisions/` with at least three variants. On top of what
|
|
272
|
+
`check` already enforces, the analysis contains:
|
|
248
273
|
|
|
249
274
|
1. Measurement readiness: what is observable today, and what is not.
|
|
250
275
|
2. The objective: one measurable outcome and its Goal -> Signal -> Metric chain.
|
|
251
|
-
3. Opportunities with their evidence class
|
|
252
|
-
`decisions/<id>/` (the research skill's
|
|
253
|
-
solutions plus the status quo as V0, the
|
|
254
|
-
`criteria.json` before any solution is scored, every
|
|
255
|
-
`tezgah-research compare` (a judged cell with two raters), and
|
|
256
|
-
naming the chosen solution, what ruled out each other one and the
|
|
276
|
+
3. Opportunities with their evidence class. When the user is to choose between
|
|
277
|
+
solutions, they are recorded as `decisions/<id>/` (the research skill's
|
|
278
|
+
"Variants"): at least three produced solutions plus the status quo as V0, the
|
|
279
|
+
criterion set committed in `criteria.json` before any solution is scored, every
|
|
280
|
+
cell appended with `tezgah-research compare` (a judged cell with two raters), and
|
|
281
|
+
`decision.md` naming the chosen solution, what ruled out each other one and the
|
|
282
|
+
`flip:`. Otherwise the analysis names the recommended one and why.
|
|
257
283
|
4. Risks by class - value, usability, viability, feasibility - each with the
|
|
258
284
|
cheapest test that would falsify it.
|
|
259
285
|
5. The usability section: scope (task, section, device, breakpoints), the heuristics
|
|
@@ -284,6 +310,17 @@ named in the artifact with the reason it was not - an element inside a section,
|
|
|
284
310
|
only a section: a state matrix left out silently, an image test never run, an
|
|
285
311
|
axe-core sweep dropped or a scorecard dimension missing all read the same way.
|
|
286
312
|
|
|
313
|
+
## The product flow notes
|
|
314
|
+
|
|
315
|
+
Under `product-flow`, the axes' findings land in `.tezgah/analysis/<topic>/flow.md`,
|
|
316
|
+
one `## <step>` heading per step. A metric from section 2 goes under `## metrics`
|
|
317
|
+
with its full record and the need it rests on. A risk from section 4 goes under
|
|
318
|
+
`## assumptions` with its kind (a value risk is desirability). A triage row goes
|
|
319
|
+
under `## decision` with its metric, threshold and `observe after: YYYY-MM-DD`,
|
|
320
|
+
the date its timeframe ends. A metric the decision names that is not logged yet
|
|
321
|
+
goes under `## instrumentation` with the event or query that will log it. The
|
|
322
|
+
`product-flow` skill gives the order of the steps.
|
|
323
|
+
|
|
287
324
|
## The scorecard
|
|
288
325
|
|
|
289
326
|
Score each dimension 1-5 and report the mean with its anchors; the anchors are the
|
|
@@ -299,8 +336,8 @@ any dimension at 1, reject.
|
|
|
299
336
|
| Depth | does every screen reach component x state, and is anything measured rather than eyeballed? |
|
|
300
337
|
| Image evidence | were the rendered screens actually read - the blur and grayscale tests, the breakpoints, dark mode - or only the tree? |
|
|
301
338
|
| Axis coverage | are all five axes addressed or explicitly excluded? |
|
|
302
|
-
| Metric integrity | does
|
|
303
|
-
| Solution plurality | were at least three
|
|
339
|
+
| Metric integrity | does every metric trace to a goal and carry its full record - a ratio with its definition, window, baseline and `logged` answer? |
|
|
340
|
+
| Solution plurality | when the user chooses between solutions, were at least three compared under `decisions/` against criteria committed first? |
|
|
304
341
|
| Feasibility grounding | is the implementation claim a cited code path, not an inference? |
|
|
305
342
|
| Decision quality | does every feature end keep / fix / cut / bet, with a criterion and an owner? |
|
|
306
343
|
| Scope calibration | does the analysis say what it did not look at, and what would flip it? |
|
|
@@ -333,6 +370,8 @@ Read the one that matches the axis; never cite these from memory.
|
|
|
333
370
|
- `phuryn/pm-skills` (MIT) - `pm-data-analytics` (cohort, A/B), `pm-ai-shipping`
|
|
334
371
|
(security and performance audits, test-coverage map), the rest of discovery.
|
|
335
372
|
- HEART, `https://research.google.com/pubs/archive/36299.pdf` (CHI 2010).
|
|
373
|
+
- The North Star and its inputs, leading and lagging: Amplitude, *The North Star
|
|
374
|
+
Playbook*, `https://amplitude.com/books/north-star/about-the-north-star-framework.md`.
|
|
336
375
|
- Nielsen's 10 heuristics and the severity scale,
|
|
337
376
|
`https://www.nngroup.com/articles/ten-usability-heuristics/` and
|
|
338
377
|
`https://www.nngroup.com/articles/how-to-rate-the-severity-of-usability-problems/`.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Evals
|
|
2
|
+
|
|
3
|
+
Three inputs a session can be handed where this skill could misfire, and what a
|
|
4
|
+
good answer has to contain. Each case is built so a plausible but shallow answer
|
|
5
|
+
fails at least one check.
|
|
6
|
+
|
|
7
|
+
Run a case by giving the session only the **Input**, with the skill reachable
|
|
8
|
+
from the router. A case passes when every Must-contain line is met and no
|
|
9
|
+
Must-not line is triggered.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Case 1 - The trap: drawing the dashboard before the flow says so
|
|
14
|
+
|
|
15
|
+
**Input**
|
|
16
|
+
> Bu veriye uygun bir metric dashboard tasarla. (attached: `sales.csv` - date,
|
|
17
|
+
> region, product, orders, revenue, returns)
|
|
18
|
+
|
|
19
|
+
**Must contain**
|
|
20
|
+
- [ ] Picks one kebab-case topic and runs `tezgah-research next --topic <t>` before any layout, and does the first missing step it names
|
|
21
|
+
- [ ] Writes each step's note under its `## <step>` heading in `.tezgah/analysis/<t>/flow.md`, each naming the note it rests on
|
|
22
|
+
- [ ] Takes the metrics from `## metrics` notes that rest on a need under `## research` (goal, signal, definition, window, baseline, logged), written before the design step
|
|
23
|
+
- [ ] Gives the decision under `## decision` a metric, a threshold and an `observe after: YYYY-MM-DD` date
|
|
24
|
+
- [ ] Names that decision in `.tezgah/analysis/<t>/spec.md` and in the design-contract component
|
|
25
|
+
|
|
26
|
+
**Must not**
|
|
27
|
+
- Lay out charts for the CSV's columns before a metric and a decision exist
|
|
28
|
+
- Skip a step whose artifact is missing because the data seems to answer it
|
|
29
|
+
|
|
30
|
+
**Why this case** - the skill says to "find the first step whose artifact is
|
|
31
|
+
missing" and do "that step, and only that step". A data file pulls toward drawing
|
|
32
|
+
its columns at once.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Case 2 - The trap: a research worker writing the flow's artifacts
|
|
37
|
+
|
|
38
|
+
**Input**
|
|
39
|
+
> We want to add saved searches to the app. Spin up research on how users
|
|
40
|
+
> re-run searches and take it from there.
|
|
41
|
+
|
|
42
|
+
**Must contain**
|
|
43
|
+
- [ ] Runs `tezgah-research next --topic <t> --flow feature` (no metric is in view) and starts from the first missing step
|
|
44
|
+
- [ ] Briefs any research worker to report its sources and insights - class, source with its read date, quote, statement, confidence - in its result
|
|
45
|
+
- [ ] Writes those findings under `## research` in `flow.md` from the main session
|
|
46
|
+
|
|
47
|
+
**Must not**
|
|
48
|
+
- Let a worker or subagent write `flow.md` or `spec.md` itself
|
|
49
|
+
- Start the forward spec before `## decision` exists
|
|
50
|
+
|
|
51
|
+
**Why this case** - "Who writes" says "Only the main session writes the flow's
|
|
52
|
+
artifacts". A delegated research step pulls toward letting the worker write its
|
|
53
|
+
own findings.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Case 3 - The trap: "just build the chart"
|
|
58
|
+
|
|
59
|
+
**Input**
|
|
60
|
+
> Skip the process, just build the chart of weekly revenue. No need for metrics
|
|
61
|
+
> or goals.
|
|
62
|
+
|
|
63
|
+
**Must contain**
|
|
64
|
+
- [ ] Runs `next` for the topic and states which steps are missing before the build, naming the metric and the decision
|
|
65
|
+
- [ ] Says the chart has no goal above it, and asks for the goal or writes the gap down as a step still missing
|
|
66
|
+
- [ ] Offers the shortest route through the missing steps, one note each, rather than refusing
|
|
67
|
+
|
|
68
|
+
**Must not**
|
|
69
|
+
- Build the chart and report the flow as done
|
|
70
|
+
- Claim the metric or decision steps do not apply to this ask
|
|
71
|
+
|
|
72
|
+
**Why this case** - every step's artifact "names the earlier artifact it rests
|
|
73
|
+
on": a built chart with no metric and no decision leaves the earlier steps missing
|
|
74
|
+
however good the chart is.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## What these do not prove
|
|
79
|
+
|
|
80
|
+
These are trap cases for a human or judge rater, not a behavioural measurement.
|
|
81
|
+
`skills/research` owns the standard a claim about behaviour has to meet.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-flow
|
|
3
|
+
description: >
|
|
4
|
+
Carries a new product capability from evidence to a measured result: it walks
|
|
5
|
+
the nine steps of the flow in order - research, metrics, assumptions,
|
|
6
|
+
decision, instrumentation, forward spec, design, build, re-measure - and does
|
|
7
|
+
the first step whose artifact is missing with the skill that step names, so
|
|
8
|
+
each hand-off is a written artifact that names the one before it instead of a
|
|
9
|
+
memory. Use when a session must design a metric dashboard, a new metric or a
|
|
10
|
+
new feature from data or an ask, and carry it from research to re-measure. Not
|
|
11
|
+
for auditing an existing feature - use `feature-audit`.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# product-flow
|
|
15
|
+
|
|
16
|
+
A new product capability - a dashboard over a data file, a metric, a feature
|
|
17
|
+
someone asked for - drifts when its steps live in the session's head: the chart
|
|
18
|
+
gets drawn before anyone says which goal it serves, and nobody comes back to see
|
|
19
|
+
whether the decision held. This skill keeps the sequence written down: the steps
|
|
20
|
+
below, in order, each leaving an artifact on disk that names the artifact it
|
|
21
|
+
rests on.
|
|
22
|
+
|
|
23
|
+
## When to use it
|
|
24
|
+
|
|
25
|
+
- A new capability from data: "bu veriye uygun metric dashboard tasarla", a CSV or
|
|
26
|
+
export with "what should we track".
|
|
27
|
+
- A new capability from an ask: "add a feature that ...", "we need a metric for ...".
|
|
28
|
+
- A topic already in progress, to see what is left of it.
|
|
29
|
+
|
|
30
|
+
Not for an existing feature's audit (`feature-audit`), and not for a product-wide
|
|
31
|
+
analysis with no new capability in view (`product-analysis`). Both are steps this
|
|
32
|
+
flow can hand off to.
|
|
33
|
+
|
|
34
|
+
## The steps
|
|
35
|
+
|
|
36
|
+
Pick one kebab-case topic for the capability, such as `signup-dashboard`. Every
|
|
37
|
+
artifact of this capability lives under `.tezgah/analysis/<topic>/`: the notes of
|
|
38
|
+
steps 1-5 and 9 in `flow.md`, one `## <step>` heading per step, and the forward
|
|
39
|
+
spec in `spec.md`. Each step's artifact names the earlier artifact it rests on.
|
|
40
|
+
|
|
41
|
+
1. **research** (`research` skill). At least one external source - its URL or
|
|
42
|
+
title, the date it was read and the passage it says - and the user need or
|
|
43
|
+
insight that source supports.
|
|
44
|
+
2. **metrics** (`product-analysis`). Each metric rests on a need from step 1 and
|
|
45
|
+
states its goal, signal, definition, window, baseline, and whether it is
|
|
46
|
+
logged today.
|
|
47
|
+
3. **assumptions** (`product-analysis`). The assumptions the decision will rest
|
|
48
|
+
on, each one a sentence that could turn out false.
|
|
49
|
+
4. **decision** (`product-analysis`). A decision that names one of the topic's
|
|
50
|
+
metrics, the threshold that would change it, and the date after which it is
|
|
51
|
+
re-measured (observe after).
|
|
52
|
+
5. **instrumentation** (`product-analysis`). Every metric the decision names is
|
|
53
|
+
logged; a metric that is not logged yet gets the event or query that will log
|
|
54
|
+
it.
|
|
55
|
+
6. **forward-spec** (`feature-audit`, forward mode). `.tezgah/analysis/<topic>/spec.md`,
|
|
56
|
+
naming the decision it implements.
|
|
57
|
+
7. **design** (`design-contract`). A component in `.tezgah/design-contract.md`
|
|
58
|
+
that names the decision it serves.
|
|
59
|
+
8. **build** (`design-contract`). Judged by the design check
|
|
60
|
+
(`tezgah-design check`) and the Stop UI rule, not by this flow.
|
|
61
|
+
9. **re-measure** (`analyze-app`). Once the decision's observe-after date has
|
|
62
|
+
passed, measure the decision's metric again and write the result and what it
|
|
63
|
+
means for the decision.
|
|
64
|
+
|
|
65
|
+
A feature ask that names no metric skips steps 2 and 5, unless the topic already
|
|
66
|
+
holds a metric.
|
|
67
|
+
|
|
68
|
+
## The loop
|
|
69
|
+
|
|
70
|
+
The step source is `~/.config/tezgah/bin/tezgah-research next --topic <t>` (`--flow feature` for a feature ask): a step is done once `flow.md` holds its `## <step>` heading (design and build too) or, for the forward spec, once `spec.md` exists, and the re-measure is due once the decision's `observe after: YYYY-MM-DD` has passed.
|
|
71
|
+
|
|
72
|
+
1. Read what already exists under `.tezgah/analysis/<topic>/` and find the first
|
|
73
|
+
step whose artifact is missing, or the re-measure whose date has passed.
|
|
74
|
+
2. Do that step, and only that step, with the skill it names. Read that skill; it
|
|
75
|
+
says what the step's artifact holds.
|
|
76
|
+
3. Write the artifact, naming the artifact it rests on.
|
|
77
|
+
4. Go back to 1. Stop when every step's artifact exists, or when the only step
|
|
78
|
+
left is a re-measure whose date has not come yet.
|
|
79
|
+
|
|
80
|
+
## Who writes
|
|
81
|
+
|
|
82
|
+
Only the main session writes the flow's artifacts. A research worker, a subagent
|
|
83
|
+
or a specialist reports its sources and insights - the class, the source with the
|
|
84
|
+
date it was read, the quote, the statement and its confidence - in its result, and
|
|
85
|
+
the main session writes them down.
|
|
86
|
+
|
|
87
|
+
## What this skill does not do
|
|
88
|
+
|
|
89
|
+
It does not decide what a metric is, how a dashboard looks or what a feature spec
|
|
90
|
+
holds: the skill each step names owns that (`product-analysis`, `research`,
|
|
91
|
+
`feature-audit`, `design-contract`, `analyze-app`).
|
package/skills/research/SKILL.md
CHANGED
|
@@ -69,7 +69,8 @@ breaking one silently invalidates the run:
|
|
|
69
69
|
Load its manual before driving it: `orx skill`, then the module for the step
|
|
70
70
|
(`orx skill lit-review` for sources; `orx skill experiment-tree` and
|
|
71
71
|
`orx skill evidence` for a measured line).
|
|
72
|
-
Local runs need no login; managed compute does -
|
|
72
|
+
Local runs need no login; managed compute does - run locally at a scale that fits,
|
|
73
|
+
and ask for `orx login` only when the question cannot be answered without it.
|
|
73
74
|
If `orx` is absent, say the research tooling is unavailable and do not improvise
|
|
74
75
|
its protocol; the workspace below still applies to whatever you run instead.
|
|
75
76
|
|
|
@@ -578,6 +579,14 @@ palette rather than the default cycle; and size for the venue's column width whe
|
|
|
578
579
|
the figure is headed into a paper. The library's `index/6-write.md` entries carry
|
|
579
580
|
the full rules when a line reaches that stage.
|
|
580
581
|
|
|
582
|
+
## A source that answers a product ask
|
|
583
|
+
|
|
584
|
+
When a line's source answers a product question under `product-flow`, the finding
|
|
585
|
+
also goes under `## research` in `.tezgah/analysis/<topic>/flow.md`: the source's
|
|
586
|
+
URL or literature path, the date it was read and the passage it says, then the
|
|
587
|
+
user need it supports. A research claim it rests on is cited as
|
|
588
|
+
`<slug>:<claim id>`. The `product-flow` skill gives the order of the steps.
|
|
589
|
+
|
|
581
590
|
## Provenance, at the end of the session
|
|
582
591
|
|
|
583
592
|
Research is a sequence of decisions, and the next session does not remember them.
|
|
@@ -83,41 +83,46 @@ Claude) sets it and a bare call shows it.
|
|
|
83
83
|
|
|
84
84
|
## Task record: the active plan's phase and its path allowlist (auto-armed, tezgah roots only)
|
|
85
85
|
|
|
86
|
-
The
|
|
86
|
+
The orchestrating session makes one open plan its active task, and two optional
|
|
87
87
|
frontmatter keys are the whole record: `phase:` (`discovery`, `implementation`
|
|
88
88
|
or `verification` - at most one open plan carries it) activates the plan, and
|
|
89
89
|
`allowed_paths:` is the `- glob` list its writes have to stay inside. Rule 10 of
|
|
90
|
-
the tool gate reads it and refuses
|
|
90
|
+
the tool gate reads it and refuses three things before they land: a write while
|
|
91
91
|
the phase is `discovery` (writes belong to `implementation` or `verification`)
|
|
92
92
|
or one outside the globs; a shell command that writes a file while the phase only
|
|
93
93
|
reads - the shell is a write route like any other, and E7b measured it as the one
|
|
94
94
|
an agent takes once the write tools are refused - matched over redirects, `tee`,
|
|
95
95
|
the in-place editors, `cp`/`mv`, `patch` and `git apply|restore|checkout --`, so
|
|
96
96
|
a `> /dev/null` and a quoted `>` are not writes and the allowlist is not
|
|
97
|
-
consulted (a shell line's targets are not read); a write whose target is the
|
|
98
|
-
record itself, refused whatever the phase and the globs say
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
consulted (a shell line's targets are not read); and a write whose target is the
|
|
98
|
+
record itself, refused whatever the phase and the globs say. The lifecycle is the
|
|
99
|
+
session's, never a command handed to the user: it runs
|
|
100
|
+
`~/.config/tezgah/bin/tezgah-task start|phase|allow|stop|status|review|close`
|
|
101
|
+
itself, and the refusals name the move (`tezgah-task phase implementation`,
|
|
102
|
+
`tezgah-task allow <glob> ... --why "<reason>"`). That move is vetted by the CLI,
|
|
103
|
+
not by who runs it: a writing phase needs every Acceptance item to name its
|
|
104
|
+
command, `implementation` an answered spike and a clean tree to record
|
|
105
|
+
`checkpoint:`, `allow` a `--why` it records as `allowed_why:`, `close NNN done`
|
|
106
|
+
an approving review - which is why the record's own file is refused to a write. An
|
|
107
|
+
absent or empty allowlist is no scope declared rather than "nothing allowed",
|
|
108
|
+
and no active task means no requirement at all - but the CLI will not enter
|
|
109
|
+
`implementation` or `verification` with none: plan-add writes the plan's own
|
|
105
110
|
`allowed_paths:`, `start` without `--allow` keeps them, and only an explicit
|
|
106
|
-
`--any-path` grants every path, so
|
|
107
|
-
|
|
108
|
-
user
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
and
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
change with an executable oracle is reviewed by the
|
|
120
|
-
population** below, not by one reviewer.
|
|
111
|
+
`--any-path` grants every path, so keep the plan's scope intact; widen it with
|
|
112
|
+
`allow` only when the plan's work genuinely reaches a file, and record why. The
|
|
113
|
+
phase also rides every user prompt as one line naming the id, the phase and the
|
|
114
|
+
globs - the only preventive surface, so the refusal is never the first the
|
|
115
|
+
session hears of the boundary. Off: `task-off`, which removes all three
|
|
116
|
+
refusals. The verification phase asks for the plan's acceptance commands run
|
|
117
|
+
unpiped and a fresh reviewer (the host's `tezgah-reviewer` subagent) reading
|
|
118
|
+
`git diff <base>..HEAD`; `review NNN <reviewer> approve|changes` records the
|
|
119
|
+
verdict, and `close NNN done` refuses a plan without an approve - unless both
|
|
120
|
+
rounds are spent and `--resolved "<fix and the test that proves it>"` records
|
|
121
|
+
what the session fixed itself; nothing waits on the user. `close` on the
|
|
122
|
+
active task deactivates it in the same write, then removes every linked worktree
|
|
123
|
+
whose branch is merged and which holds nothing else, printing each one it keeps
|
|
124
|
+
with the reason. A change with an executable oracle is reviewed by the
|
|
125
|
+
population under **Review population** below, not by one reviewer.
|
|
121
126
|
|
|
122
127
|
## Code discovery: prefer the indexed graph over blind search
|
|
123
128
|
|
|
@@ -523,17 +528,32 @@ rewrite it plainly.
|
|
|
523
528
|
**Merge authority: standing, not per-PR.** The user is not the approval step
|
|
524
529
|
on a merge. Review first with a FRESH reviewer (never my own read of my own
|
|
525
530
|
code), run the full suite, and if the review is clean and every test passes,
|
|
526
|
-
merge
|
|
527
|
-
|
|
528
|
-
failing test
|
|
531
|
+
merge and close the plan yourself (`tezgah-task close NNN done`, which also
|
|
532
|
+
deactivates it and removes every merged worktree), then report the outcome. Nothing
|
|
533
|
+
goes back to the user: a failing test you fix, and a critical or major finding
|
|
534
|
+
left after round two you fix yourself, prove with a test and close with
|
|
535
|
+
`tezgah-task close NNN done --resolved "<fix and test>"`. One review per plan, over its whole diff in the verification
|
|
529
536
|
phase; at most two rounds - only a confirmed critical or major finding opens
|
|
530
537
|
round two, a minor or suggestion one is recorded fix-later, and after round two
|
|
531
|
-
what is left
|
|
538
|
+
what is left is fixed by the session and closed with `--resolved`, or recorded fix-later, never a third round.
|
|
532
539
|
A round spawns its reviewers in ONE message, one per dimension (correctness
|
|
533
540
|
and contract, security, tests and performance) or file group; a diff under 300
|
|
534
541
|
changed lines gets one reviewer. Per-task work gets tests, not a reviewer, and
|
|
535
542
|
`tezgah-task review` refuses a third round.
|
|
536
543
|
|
|
544
|
+
**The process is yours: never hand a step back.** The orchestrator runs the
|
|
545
|
+
plan lifecycle itself - `tezgah-task start`, every `phase` move, `review`,
|
|
546
|
+
`close`, the merge, and removing a slice's worktree once its branch is merged -
|
|
547
|
+
and never ends a reply with "run this command" or "shall I close it?" for a
|
|
548
|
+
step it can take. A process parameter the user did not set (a spend ceiling, a
|
|
549
|
+
sample size, a retry budget, a member to consult) is picked by you: choose the
|
|
550
|
+
conservative default, state it in one line, proceed. A credential, a login or an
|
|
551
|
+
access grant is the one thing no tool supplies, and even then take every route
|
|
552
|
+
that needs none first - another consult member or provider, local compute
|
|
553
|
+
instead of managed, a public source - and ask once, naming what it unlocks, only
|
|
554
|
+
when no route is left. A requested item you would drop is still asked about
|
|
555
|
+
(see "Deliver the whole ask").
|
|
556
|
+
|
|
537
557
|
**Review population: a change with an executable oracle.** The fresh review
|
|
538
558
|
above stays the rule for every change except one whose correctness can
|
|
539
559
|
be executed - a checker, a gate rule, a parser - where each claim can be built as
|
|
@@ -550,8 +570,8 @@ a fixture. There round one becomes a population:
|
|
|
550
570
|
5. The population is round one and spends the same two-round budget: a fix
|
|
551
571
|
for a confirmed critical or major claim carries its failing-first test, and
|
|
552
572
|
round two reads that fix's delta, the round-one hunks and the direct callers
|
|
553
|
-
of what it touches. After round two what is left
|
|
554
|
-
recorded fix-later, never a third round.
|
|
573
|
+
of what it touches. After round two what is left is fixed by the session and
|
|
574
|
+
closed with `--resolved`, or recorded fix-later, never a third round.
|
|
555
575
|
|
|
556
576
|
Status: a tentative default, measured on two changes. E1
|
|
557
577
|
(an internal prove-verify experiment): directed reviewers found 3 of 3 ground-truth defects,
|
|
@@ -619,11 +639,12 @@ unchecked assumptions, what would change its mind, requested evidence - not a
|
|
|
619
639
|
paraphrase, because the paraphrase is where the minority view gets dropped.
|
|
620
640
|
|
|
621
641
|
Exit 4 means no choice is recorded and exit 5 means every recorded member
|
|
622
|
-
failed: nothing answered, and the output lists `offer:`/`reoffer:` members.
|
|
623
|
-
the user
|
|
624
|
-
|
|
625
|
-
`~/.config/tezgah/bin/consult --use <member>[,<member>]`,
|
|
626
|
-
again
|
|
642
|
+
failed: nothing answered, and the output lists `offer:`/`reoffer:` members. Do
|
|
643
|
+
not ask the user: record the first listed member from a model family other than
|
|
644
|
+
your own with
|
|
645
|
+
`~/.config/tezgah/bin/consult --use <member>[,<member>]`, ask the question
|
|
646
|
+
again and say which member you chose; after two rounds with nothing answering,
|
|
647
|
+
report the second opinion as skipped. The choice lives in
|
|
627
648
|
`~/.config/tezgah/config.json` under `consult`; an agent CLI member runs in an
|
|
628
649
|
empty temp dir, so the packet is all it sees.
|
|
629
650
|
|
|
@@ -688,8 +709,9 @@ are what keeps results comparable, and breaking one silently invalidates the run
|
|
|
688
709
|
never edit a node once a run has answered it (branch a child instead); the run
|
|
689
710
|
command and environment are a fixed contract identical on every node; vary the
|
|
690
711
|
committed code/config, never CLI args or env knobs; grow the experiment tree
|
|
691
|
-
downward, not sideways. Local research needs no login; managed compute does
|
|
692
|
-
|
|
712
|
+
downward, not sideways. Local research needs no login; managed compute does -
|
|
713
|
+
run locally at a scale that fits, and ask for `orx login` only when the
|
|
714
|
+
question cannot be answered without managed compute.
|
|
693
715
|
|
|
694
716
|
If the CLI is not installed, say the research tooling is unavailable and do not
|
|
695
717
|
improvise its protocol; fall back to a host subagent and say so, briefed with the
|
|
@@ -824,7 +846,9 @@ recommendation, and every recommendation names the reference that already does i
|
|
|
824
846
|
best, cited. Read the `product-analysis` skill for the artifact shape and the
|
|
825
847
|
scorecard - the same 1-5 anchors as the `research` skill, so two sessions'
|
|
826
848
|
analyses stay comparable - and `feature-audit` for the layer-coherence matrices
|
|
827
|
-
when the ask is one feature.
|
|
849
|
+
when the ask is one feature. A new capability built from data or an ask runs the
|
|
850
|
+
`product-flow` skill: `tezgah-research next --topic <t>` is the step source, and
|
|
851
|
+
its first missing or due step is the next one. Kill switch: `research-off`.
|
|
828
852
|
|
|
829
853
|
|
|
830
854
|
|