tldr-experts 0.3.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +913 -0
  2. package/LICENSE +21 -0
  3. package/README.md +174 -0
  4. package/dist/hooks/answer-capture.js +174 -0
  5. package/dist/hooks/budget-gate.js +173 -0
  6. package/dist/hooks/chunk-0bt6yb2q.js +88 -0
  7. package/dist/hooks/chunk-1zwcxd3f.js +66 -0
  8. package/dist/hooks/chunk-9gb21660.js +66 -0
  9. package/dist/hooks/chunk-a8p2rc94.js +20 -0
  10. package/dist/hooks/chunk-ae6bkfs5.js +0 -0
  11. package/dist/hooks/chunk-azctppjh.js +198 -0
  12. package/dist/hooks/chunk-g395gk7e.js +503 -0
  13. package/dist/hooks/chunk-j234zf0t.js +339 -0
  14. package/dist/hooks/chunk-kw4tffzf.js +139 -0
  15. package/dist/hooks/chunk-p274ckxv.js +7435 -0
  16. package/dist/hooks/chunk-sdjnnmzz.js +497 -0
  17. package/dist/hooks/chunk-t56k6146.js +14 -0
  18. package/dist/hooks/chunk-t8tdv11p.js +35 -0
  19. package/dist/hooks/chunk-x98qs959.js +302 -0
  20. package/dist/hooks/chunk-y0jdr3et.js +627 -0
  21. package/dist/hooks/claim-sources.js +72 -0
  22. package/dist/hooks/dod-gate.js +198 -0
  23. package/dist/hooks/no-reask.js +67 -0
  24. package/dist/hooks/session-start.js +1348 -0
  25. package/dist/hooks/statusline.js +116 -0
  26. package/dist/tldrx.js +34219 -0
  27. package/env.yml +79 -0
  28. package/package.json +60 -0
  29. package/plugin/.claude-plugin/plugin.json +9 -0
  30. package/plugin/README.md +113 -0
  31. package/plugin/agents/README.md +22 -0
  32. package/plugin/hooks/hooks.json +107 -0
  33. package/plugin/skills/tldrx/SKILL.md +170 -0
  34. package/stages/build/stage.md +70 -0
  35. package/stages/build/stage.yml +54 -0
  36. package/stages/how/stage.md +89 -0
  37. package/stages/how/stage.yml +53 -0
  38. package/stages/plan/stage.md +89 -0
  39. package/stages/plan/stage.yml +48 -0
  40. package/stages/watch/stage.md +85 -0
  41. package/stages/watch/stage.yml +61 -0
  42. package/stages/what/stage.md +89 -0
  43. package/stages/what/stage.yml +61 -0
  44. package/templates/budget.yml +17 -0
  45. package/templates/competencies.yml +14 -0
  46. package/templates/env.yml +19 -0
  47. package/templates/epic.md +38 -0
  48. package/templates/expert.md +51 -0
  49. package/templates/experts/architect.md +77 -0
  50. package/templates/experts/delivery.md +76 -0
  51. package/templates/experts/developer.md +78 -0
  52. package/templates/experts/operations.md +74 -0
  53. package/templates/experts/product.md +78 -0
  54. package/templates/facts.yml +18 -0
  55. package/templates/handoff.md +63 -0
  56. package/templates/process.yml +33 -0
  57. package/templates/questions.md +63 -0
  58. package/templates/run.yml +24 -0
  59. package/templates/story.md +55 -0
  60. package/templates/watcher.md +68 -0
  61. package/templates/waves.yml +17 -0
  62. package/templates/workspace.yml +30 -0
  63. package/workflows/bugfix.yml +26 -0
  64. package/workflows/docs.yml +23 -0
  65. package/workflows/feature.yml +22 -0
  66. package/workflows/hotfix.yml +24 -0
  67. package/workflows/integration.yml +24 -0
  68. package/workflows/migration.yml +24 -0
  69. package/workflows/performance.yml +23 -0
  70. package/workflows/prototype.yml +24 -0
  71. package/workflows/refactor.yml +24 -0
  72. package/workflows/retro.yml +20 -0
  73. package/workflows/security-patch.yml +23 -0
  74. package/workflows/spike.yml +23 -0
  75. package/workflows/upgrade.yml +23 -0
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # Written to tldrx-work/<yymmdd>-<slug>/run.yml. Concept §5.
3
+ #
4
+ # THE execution path and the resume point. Together with events.jsonl this is the
5
+ # dashboard's only data source. If it is not in here, it did not happen.
6
+ version: 1
7
+ run_id: "260828-example-slug"
8
+ scope: feature
9
+ workflow: feature
10
+ status: pending # pending | running | awaiting-answer | awaiting-gate | blocked | done | abandoned
11
+ budget_usd: 25
12
+ created_at: null
13
+
14
+ phases:
15
+ - id: "01-what"
16
+ stage: what
17
+ status: pending
18
+ expert: null
19
+ model: null
20
+ cost_usd: 0
21
+ started_at: null
22
+ ended_at: null
23
+ inputs: []
24
+ outputs: []
@@ -0,0 +1,55 @@
1
+ ---
2
+ # Written to tldrx-work/<run>/03-plan/stories/<id>.md. Spec §2.13.
3
+ #
4
+ # The front matter is the machine-read half: `dod-gate` and `tldrx approve` read
5
+ # it, and the Build phase cuts `story/<id>` from the epic branch on the strength
6
+ # of it. Everything below the closing `---` is for the human who picks this up
7
+ # cold — except the fenced ```dod block, which is executed, not read.
8
+ version: 1
9
+ id: S1
10
+ epic: E1
11
+ title: "Materialise the leaderboard read model"
12
+ repo: example
13
+ status: todo # todo | in_progress | review | done | blocked
14
+ depends_on: [] # story ids that must be DONE first, e.g. [S2]
15
+ touches:
16
+ - "src/features/leaderboard/"
17
+ acceptance:
18
+ - "Top-50 ranks render from the materialised view, newest hunt first"
19
+ - "A hunt completed while the page is open moves the player within one refresh"
20
+ test_plan:
21
+ - "Unit: rank ordering with ties, empty table, single player"
22
+ - "Integration: HuntCompleted refreshes the view"
23
+ evidence: [] # filled by Build — commands run, files written, PR
24
+ ---
25
+
26
+ # S1 · Materialise the leaderboard read model
27
+
28
+ > One repo, one branch, one Definition of Done. If this story needs a change in a
29
+ > second repo, that is a second story with `depends_on` pointing here.
30
+
31
+ ## Context
32
+
33
+ Why this story exists, in two or three sentences, each ending in a `[src: …]`
34
+ token. Read it as the only briefing the Build agent gets.
35
+
36
+ ## Acceptance criteria
37
+
38
+ Restate the front matter's `acceptance` list here in prose if it helps a reader;
39
+ the front matter is what is checked.
40
+
41
+ ## Definition of done
42
+
43
+ **Every command below must equal a `.tldrx/workspace.yml` command verbatim** — a
44
+ story may not invent one — and every one of them must exit `0` before `status:`
45
+ may be written as `done`. `dod-gate` re-runs them; your word for it is not evidence.
46
+
47
+ ```dod
48
+ npm run test
49
+ npm run lint
50
+ ```
51
+
52
+ ## Evidence
53
+
54
+ Filled by Build. One bullet per proof, each ending in a `[src: …]` token — a
55
+ command source (`$ npm run test → exit 0`) belongs here.
@@ -0,0 +1,68 @@
1
+ ---
2
+ # Written to tldrx-work/<run>/05-watch/watchers/<feature>.md. Spec §2.16.
3
+ #
4
+ # One card per SHIPPED feature — one per epic whose stories reached `status: done`.
5
+ # Everything on it is derived from what Build actually instrumented. A signal that
6
+ # would be nice to have is not a signal; it is an `absent:` source and a `draft`
7
+ # card that names what to instrument.
8
+ version: 1
9
+ id: leaderboard # = the file name (leaderboard.md); [a-z0-9-]
10
+ epic: E1 # the epic this feature was built on
11
+ title: "Player leaderboard"
12
+ stories: [S1, S3] # the DONE stories the card was written from
13
+ repos: [api, lab]
14
+ status: draft # draft | verified — verified only when Signal has no `absent:` source
15
+ ---
16
+
17
+ # leaderboard · Player leaderboard
18
+
19
+ > How anyone would know this still works next month. Every list item under Signal,
20
+ > Where, Healthy baseline and Looks broken when ends with a [src: …] token, and
21
+ > that token points at the BUILT code — `<repo>:<path>:<line>` — at an `F<n>` fact,
22
+ > or, when the code emits nothing at all, at `absent:<what you looked at>`.
23
+
24
+ ## Signal
25
+
26
+ > The log line, metric or event that proves the feature works. Not "we should log
27
+ > X" — the line that is in the code, at the line it is on.
28
+
29
+ - `leaderboard.refreshed` is written on every view refresh [src: api:src/Leaderboard/RefreshHandler.cs:64]
30
+ - No counter exists for a refresh that finds zero rows — add one before this is watchable [src: absent:api/src/Leaderboard]
31
+
32
+ ## Where
33
+
34
+ > The dashboard, log stream, table or query console this is read in.
35
+
36
+ - Application Insights → `traces`, filtered to the message above [src: F014]
37
+
38
+ ## Healthy baseline
39
+
40
+ > A measured number and when it was taken. A guess belongs in Looks broken when as
41
+ > an assumption, or nowhere.
42
+
43
+ - 12–40 refreshes/hour during business hours, measured 2026-08-29 [src: F015]
44
+
45
+ ## Looks broken when
46
+
47
+ > What the same signal looks like on the bad day, concretely enough to alert on.
48
+
49
+ - Zero refreshes for 30 minutes while hunts are still completing [src: api:src/Leaderboard/RefreshHandler.cs:64]
50
+
51
+ ## Query
52
+
53
+ > Copy-paste, in the query language of the place named under Where. One fenced
54
+ > block, run once before it is written down.
55
+
56
+ ```kql
57
+ traces
58
+ | where message == "leaderboard.refreshed"
59
+ | summarize count() by bin(timestamp, 1h)
60
+ ```
61
+
62
+ ## Sources
63
+
64
+ > Everything cited above, once, with what it establishes. Free prose is allowed
65
+ > here; the four checked sections above are the ones that must hold sourced items.
66
+
67
+ - `RefreshHandler.cs:64` is the only place the event is emitted.
68
+ - No dashboard exists yet; the query above is what a dashboard would run.
@@ -0,0 +1,17 @@
1
+ # Written to tldrx-work/<run>/03-plan/waves.yml. Spec §2.15.
2
+ #
3
+ # The execution order of the Plan, and the only file that says what may run at the
4
+ # same time. Concept §9: "stories grouped by dependency; wave N+1 starts only when
5
+ # wave N's epic branch is green", and "independent stories in the same wave run as
6
+ # parallel sub-agents in separate worktrees".
7
+ #
8
+ # Both sentences make the same demand, and it is the rule the shape cannot enforce
9
+ # on its own: every story's `depends_on` must land in an EARLIER wave. A dependency
10
+ # inside the same wave is an error, not a warning — those two stories would be
11
+ # handed to parallel agents that overwrite each other.
12
+ #
13
+ # File order IS execution order, so wave ids ascend. A story runs in exactly one wave.
14
+ version: 1
15
+ waves:
16
+ - {id: W1, stories: [S1, S2]}
17
+ - {id: W2, stories: [S3]}
@@ -0,0 +1,30 @@
1
+ # schema: draft
2
+ # Written by `tldrx init` to .tldrx/workspace.yml. Concept §4.1 and the v0.1
3
+ # workspace-model addendum.
4
+ #
5
+ # mode: single — cwd is itself a git repo
6
+ # mode: multi — cwd contains child dirs that are git repos; those are the repos.
7
+ # One .tldrx/ at the root, always. Shared: memory/, experts/,
8
+ # stages/, workflows/. Per repo: map/<repo>/, conventions/<repo>.md.
9
+ version: 1
10
+ mode: single
11
+ root: "."
12
+ detected_at: null
13
+
14
+ repos:
15
+ - name: example
16
+ path: "."
17
+ languages: []
18
+ frameworks: []
19
+ # Commands are DISCOVERED, never assumed. An empty value means "not found",
20
+ # which is different from "there is none" — say which in the handoff.
21
+ commands:
22
+ install: ""
23
+ build: ""
24
+ test: ""
25
+ lint: ""
26
+ typecheck: ""
27
+
28
+ # Cached from `claude mcp list` at init (it runs live health checks and is slow).
29
+ # .mcp.json is the fast path; this is the verified one.
30
+ mcp_servers: []
@@ -0,0 +1,26 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: bugfix
10
+ description: "Fix one specific defect, from a report or a log."
11
+ stages: [what, how, plan, build, watch]
12
+ skips: []
13
+ depth: light
14
+ default_budget_usd: 10
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: human, how: auto, plan: human, build: auto, watch: human}
21
+ changes:
22
+ - "What = reproduce it, then find the root cause. A fix without a reproduction is a guess."
23
+ - "How = the minimal change that removes the cause, not the symptom."
24
+ - "Plan is usually a single story."
25
+ - "Watch = a regression watcher for this exact signal."
26
+ - "Market and UX questions are not asked."
@@ -0,0 +1,23 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: docs
10
+ description: "Write or repair documentation."
11
+ stages: [what, build]
12
+ skips: [how, plan, watch]
13
+ depth: light
14
+ default_budget_usd: 6
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, build: human}
21
+ changes:
22
+ - "Investigate, then write. The gate is a human actually reading it and saying it is right."
23
+ - "Every claim in the docs carries the same source rule as a handoff."
@@ -0,0 +1,22 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: feature
10
+ description: "Default. New capability, full loop, practical depth."
11
+ stages: [what, how, plan, build, watch]
12
+ skips: []
13
+ depth: standard
14
+ default_budget_usd: 25
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: human, how: auto, plan: human, build: auto, watch: human}
21
+ changes:
22
+ - "No deltas — this is the baseline every other scope is described against."
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: hotfix
10
+ description: "Production is bleeding. Ship, then explain."
11
+ stages: [what, build, watch]
12
+ skips: [how, plan]
13
+ depth: minimal
14
+ default_budget_usd: 5
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, build: human, watch: human}
21
+ changes:
22
+ - "What collapses to a ten-line handoff: symptom, blast radius, the one change."
23
+ - "All gates collapse into one human approval."
24
+ - "Retro is MANDATORY at close — this is the scope that skips the most and so owes the most."
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: integration
10
+ description: "Wire up an external API."
11
+ stages: [what, how, plan, build, watch]
12
+ skips: []
13
+ depth: standard
14
+ default_budget_usd: 30
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: human, how: auto, plan: human, build: auto, watch: human}
21
+ changes:
22
+ - "What includes vendor-doc verification: fetch the official docs this run and cite the URL."
23
+ - "How = contracts plus the auth story, including what happens when the token expires."
24
+ - "Watch sits on the vendor calls: rate limits, error shapes, latency."
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: migration
10
+ description: "Move a runtime, framework, dependency or data set from A to B."
11
+ stages: [what, how, plan, build, watch]
12
+ skips: []
13
+ depth: deep
14
+ default_budget_usd: 60
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, how: auto, plan: auto, build: human, watch: human}
21
+ changes:
22
+ - "What = an inventory plus a compatibility matrix, both derived from the code map."
23
+ - "How = the strategy call: big-bang versus strangler, stated with its rollback."
24
+ - "Plan waves by module, so a half-done migration is still a working system."
@@ -0,0 +1,23 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: performance
10
+ description: "Make something measurably faster."
11
+ stages: [what, how, build, watch]
12
+ skips: [plan]
13
+ depth: standard
14
+ default_budget_usd: 20
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: human, how: auto, build: auto, watch: human}
21
+ changes:
22
+ - "What = a MEASURED baseline. No baseline, no scope — the run refuses to start."
23
+ - "Watch = the before/after comparison, on the same query, on the same data."
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: prototype
10
+ description: "Throwaway. Explicitly not for production."
11
+ stages: [what, how, build]
12
+ skips: [plan, watch]
13
+ depth: minimal
14
+ default_budget_usd: 12
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, how: auto, build: human}
21
+ changes:
22
+ - "Conventions gate is OFF. Definition of Done drops the test requirement."
23
+ - "Every artefact carries a NOT FOR PRODUCTION marker."
24
+ - "If it survives, it is re-run under the feature scope. It is not promoted in place."
@@ -0,0 +1,24 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: refactor
10
+ description: "Pay down tech debt. Behaviour must not change."
11
+ stages: [what, how, plan, build, watch]
12
+ skips: []
13
+ depth: standard
14
+ default_budget_usd: 20
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: human, how: auto, plan: human, build: auto, watch: human}
21
+ changes:
22
+ - "What = evidence of pain, measured: churn x complexity from map/hotspots.md."
23
+ - "Build gate is behaviour-preserving tests — written BEFORE the refactor, green on both sides."
24
+ - "Watch is optional; drop it when no runtime behaviour changed."
@@ -0,0 +1,20 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: retro
10
+ description: "Meta scope: read a finished run and propose what to keep."
11
+ stages: []
12
+ skips: [what, how, plan, build, watch]
13
+ depth: minimal
14
+ default_budget_usd: 3
15
+ # gates — retro runs no stage from stages/, so there is no stage gate to place.
16
+ # `tldrx retro <run-id>` is a command a human runs, not a stage.
17
+ changes:
18
+ - "Runs no stage from stages/. Driven by `tldrx retro <run-id>`, which reads events.jsonl."
19
+ - "Proposes three things: facts to remember, practices to change, stages to add."
20
+ - "Proposed stages land in stages/proposed/ and stay INERT until a human accepts them."
@@ -0,0 +1,23 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: security-patch
10
+ description: "Respond to a CVE or a disclosed vulnerability."
11
+ stages: [what, how, build, watch]
12
+ skips: [plan]
13
+ depth: minimal
14
+ default_budget_usd: 10
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, how: auto, build: human, watch: human}
21
+ changes:
22
+ - "What and How are compressed into one pass: CVE -> affected surface, via the code map."
23
+ - "Build = patch. Watch = verify the surface is actually gone, not that the version string changed."
@@ -0,0 +1,23 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: spike
10
+ description: "Answer one question. Time-boxed and budget-boxed."
11
+ stages: [what, how]
12
+ skips: [plan, build, watch]
13
+ depth: light
14
+ default_budget_usd: 6
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, how: human}
21
+ changes:
22
+ - "Output is a decision memo, not code. Any code written is thrown away."
23
+ - "The budget ceiling is the point. When it is spent, you write up what you know."
@@ -0,0 +1,23 @@
1
+ # schema: draft
2
+ # A scope is a workflow preset (concept v0.1 addendum). It biases the facilitator:
3
+ # which stages run, at what depth, on what budget. Adding a scope = adding one yml.
4
+ # The facilitator never hard-codes a scope.
5
+ #
6
+ # stages — run in this order; every name must be a folder under stages/
7
+ # skips — stages deliberately NOT run, so the omission is a decision on record
8
+ # depth — minimal | light | standard | deep
9
+ name: upgrade
10
+ description: "Bump one dependency. The automatable subset of a migration."
11
+ stages: [what, plan, build, watch]
12
+ skips: [how]
13
+ depth: light
14
+ default_budget_usd: 8
15
+ # gates — who closes each stage's gate: `human` waits for `tldrx approve`,
16
+ # `auto` lets the facilitator close it when the five spec §5 conditions
17
+ # hold (checks pass, no open question, spend within ceiling, the stage
18
+ # did not fail, claim-sources clean). Every stage still ENDS at a gate;
19
+ # this only says who signs it. A stage not named here is `human`.
20
+ gates: {what: auto, plan: auto, build: auto, watch: human}
21
+ changes:
22
+ - "How is skipped: the design is the vendor changelog. Cite it."
23
+ - "What = the breaking-change list for the exact version range being crossed."