task-pipeline-skill 1.16.0 → 1.16.2
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 +61 -0
- package/CONTRIBUTING.md +16 -3
- package/README.md +22 -1
- package/SKILL-CARD.md +1 -1
- package/cursor/rules/task-pipeline.mdc +11 -1
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/skills/evidence-docs/SKILL.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +2 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +65 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +1 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +16 -3
- package/evals/__pycache__/run.cpython-314.pyc +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.16.2 — 2026-08-06
|
|
4
|
+
|
|
5
|
+
### Added — a CI run is checked by reading it, not by assuming it
|
|
6
|
+
|
|
7
|
+
The bundle offered a place (`conventions.md`: *"CI: the workflow run."*) and a claim
|
|
8
|
+
(`release.verify`: *"CI green on the tagged commit"*) with no method between them.
|
|
9
|
+
Both are satisfiable by believing them, which is the class `gates.md` named in
|
|
10
|
+
v1.14.0: **an actor's own reply is not evidence about the world**, and the test —
|
|
11
|
+
*what does it print when it did not look?*
|
|
12
|
+
|
|
13
|
+
The occasion was v1.15.0's own release. `validate` was `completed/failure` on a push
|
|
14
|
+
to `main` and on the release tag. The failure was **correct**: the repository's own
|
|
15
|
+
*Every v\* tag must be contained in main* guard, firing on a tag that was not yet an
|
|
16
|
+
ancestor — precisely the defect v1.6.1 built it for. The guard worked, and **nothing
|
|
17
|
+
obliged anyone to read it**. A guard nobody reads is a fail-open hook with extra
|
|
18
|
+
steps; it surfaced only because the run happened to poll the API.
|
|
19
|
+
|
|
20
|
+
- **`conventions.md` gains *The CI verdict***: the commands (`gh run list … --json
|
|
21
|
+
databaseId,name,status,conclusion,headSha`, then `gh run view … --log-failed`), an
|
|
22
|
+
**unauthenticated fallback** on the `check-runs` API, and **three states** —
|
|
23
|
+
concluded, in progress (*"it was still running when I looked"* is a report, not a
|
|
24
|
+
verdict), and **no run found**, said out loud, because a project without CI is a
|
|
25
|
+
legitimate state and not a green one.
|
|
26
|
+
- **Read the log, not just the verdict.** A conclusion says *that* it failed; only the
|
|
27
|
+
log said *what* — the guard's name, the orphan tag and the one-line fix. A bare "CI
|
|
28
|
+
failed" hands the next reader a search the log had already finished.
|
|
29
|
+
- **Two paths because one credential died.** `gh`'s token expired mid-run that night,
|
|
30
|
+
and `gh auth status` reported it invalid from a **cached** verdict while `gh api
|
|
31
|
+
user` succeeded. The doctrine names the live call, never the status command.
|
|
32
|
+
- **Bound at stages 7, 8 and 9** — every stage of this flow that pushes. The incident
|
|
33
|
+
hit at the merge and again at the docs push; binding stage 8 alone would have caught
|
|
34
|
+
neither. The gates cite `conventions.md`; a guard rejects a second copy of the
|
|
35
|
+
commands.
|
|
36
|
+
- **It reports, it does not block** — the shape stage 8 already used for deploy logs.
|
|
37
|
+
Blocking would make a project *without* CI cheaper to ship from than one with it.
|
|
38
|
+
|
|
39
|
+
### Fixed — the negatives floor may no longer lag its own workflow
|
|
40
|
+
|
|
41
|
+
`MIN_EXPECTED` is a number in a living document, so rule 8 binds it: it must **equal**
|
|
42
|
+
the workflow's count, not merely sit below it. Its own comment records the first lag
|
|
43
|
+
(20 while the workflow carried 34); v1.15.0 was the second — four canon self-tests
|
|
44
|
+
landed and the floor stayed at 104 while the file carried 108. A floor below the count
|
|
45
|
+
cannot notice losing the difference, which is the entire job. Now guarded, and the
|
|
46
|
+
guard was watched rejecting a lowered floor.
|
|
47
|
+
|
|
48
|
+
## v1.16.1 — 2026-08-06
|
|
49
|
+
|
|
50
|
+
### Fixed — frontmatter that a regex called valid and a YAML parser silently dropped
|
|
51
|
+
|
|
52
|
+
`evidence-docs`'s description contained *"read as true: a decision record"*. A
|
|
53
|
+
colon-space inside a plain YAML scalar makes the value a nested mapping, so the official
|
|
54
|
+
plugin validator reported the skill **loads with empty metadata — every frontmatter field
|
|
55
|
+
silently dropped**, which for a skill means it never triggers. v1.16.0 published in that
|
|
56
|
+
state.
|
|
57
|
+
|
|
58
|
+
The guard that was supposed to catch it checked the frontmatter with a regular
|
|
59
|
+
expression and passed: a check proving less than it claims, shipped in the release that
|
|
60
|
+
publishes canon 6. It now rejects a plain scalar carrying a colon-space, across **every**
|
|
61
|
+
`SKILL.md` in the plugin rather than only the new one — the class, not the instance.
|
|
62
|
+
Guards 112 → 113.
|
|
63
|
+
|
|
3
64
|
## v1.16.0 — 2026-08-06
|
|
4
65
|
|
|
5
66
|
### Added — `evidence-docs`: a second skill in this plugin, and the router row it fills
|
package/CONTRIBUTING.md
CHANGED
|
@@ -235,7 +235,21 @@ commands and all three signal states — with a state missing, a graph that coul
|
|
|
235
235
|
be measured prints like a fresh one.
|
|
236
236
|
*(guard: `never requires it — a run passes intake quoting a`)*
|
|
237
237
|
|
|
238
|
-
**31.
|
|
238
|
+
**31. A CI run's verdict is read, never assumed — and every stage that pushes says so.**
|
|
239
|
+
`references/conventions.md` → *The CI verdict* keeps the commands, the unauthenticated
|
|
240
|
+
fallback and all three states; stages 7, 8 and 9 cite it rather than carrying a second
|
|
241
|
+
copy. A workflow run that nobody reads is the fail-open hook with extra steps: this
|
|
242
|
+
repo's own `validate` was red on a push to `main` and on a release tag, the guard that
|
|
243
|
+
failed was correct, and nothing obliged anyone to look.
|
|
244
|
+
*(guard: `never names it — the run it triggers is closed on an unread verdict`)*
|
|
245
|
+
|
|
246
|
+
**32. The negatives floor equals the workflow's count.**
|
|
247
|
+
`MIN_EXPECTED` is a number in a living document (rule 8). Below the count it cannot
|
|
248
|
+
notice losing the difference — it lagged at 20 against 34 once, and at 104 against 108
|
|
249
|
+
in v1.15.0.
|
|
250
|
+
*(guard: `a floor below the count is a floor that cannot`)*
|
|
251
|
+
|
|
252
|
+
**33. The evidence-docs navigator indexes the canons and never copies them.**
|
|
239
253
|
`skills/evidence-docs/SKILL.md` is a second skill in the same plugin: the ten canons as
|
|
240
254
|
a one-line index, a pointer to their one home, and a table of where to go next. The
|
|
241
255
|
guard holds the index to the doctrine's own list, requires the pointer, and resolves
|
|
@@ -243,8 +257,7 @@ every relative link **from the navigator's directory** — it sits one level ove
|
|
|
243
257
|
everything it names, which is canon 4 in the file that publishes canon 4.
|
|
244
258
|
*(guard: `index that has drifted from its doctrine`)*
|
|
245
259
|
|
|
246
|
-
**
|
|
247
|
-
This list claims to be *what the validator enforces*; it was eight guards behind when
|
|
260
|
+
**34. Every invariant above names the guard that enforces it, and that guard exists.**This list claims to be *what the validator enforces*; it was eight guards behind when
|
|
248
261
|
an audit measured it. A claim of enforcement is now checked like any other claim.
|
|
249
262
|
*(guard: `whose message does not appear in`)* — and a cited literal must lie inside
|
|
250
263
|
a **single** string in `test/validate.py`: the check reads that file as text, so a
|
package/README.md
CHANGED
|
@@ -66,7 +66,7 @@ Every gate is **typed**: `auto` — the orchestrator verifies it itself, pass/fa
|
|
|
66
66
|
| 5 | Dev | tasks DONE (three review verdicts each), TDD green per task | auto |
|
|
67
67
|
| 6 | Tests | full suite green, new code covered | auto |
|
|
68
68
|
| 7 | Lint + deploy | lint clean + suite green before deploy | manual |
|
|
69
|
-
| 8 | Post-deploy | clean boot / honest degradation | auto |
|
|
69
|
+
| 8 | Post-deploy | clean boot / honest degradation, **and the CI verdict read rather than assumed** | auto |
|
|
70
70
|
| 9 | Docs + wiki | the propagation matrix walked and the documentation gate green with its ratchets printed; every stale source-ledger row updated; docs + wiki synced; the code graph refreshed and checked against the docs | auto |
|
|
71
71
|
| 10 | **Acceptance** | every REQ accounted for with evidence; every check leaned on seen failing once; operator signs off; the retro written — pruned before anything was added, every lesson carrying its commit | manual |
|
|
72
72
|
|
|
@@ -213,6 +213,27 @@ obsidian-wiki setup --vault /path/to/your/vault
|
|
|
213
213
|
It is a **recommendation, never a gate** — no stage blocks on a missing wiki, and
|
|
214
214
|
nothing asks twice in one run.
|
|
215
215
|
|
|
216
|
+
### The CI verdict — read the run, never assume it
|
|
217
|
+
|
|
218
|
+
A push either triggered a workflow run or it did not, and either way the run's own
|
|
219
|
+
reply is the only evidence. *"CI is green"* written without a command behind it prints
|
|
220
|
+
the same whether it looked or not.
|
|
221
|
+
|
|
222
|
+
This repository learned it the direct way: `validate` was `completed/failure` on a push
|
|
223
|
+
to `main` and on a release tag, the guard that failed was **correct** — a tag that was
|
|
224
|
+
not yet an ancestor of `main` — and nothing obliged anyone to read it. A guard nobody
|
|
225
|
+
reads is a fail-open hook with extra steps.
|
|
226
|
+
|
|
227
|
+
So stages 7, 8 and 9 — every stage of the flow that pushes — require the verdict to be
|
|
228
|
+
**read and quoted**: the conclusion with its run id, the failing step's log on anything
|
|
229
|
+
but success, and one of three states, including **`no run found`** said out loud,
|
|
230
|
+
because a project without CI is a legitimate state and not a green one. Two command
|
|
231
|
+
paths, authenticated and not, because a dead token must not end the check. It reports;
|
|
232
|
+
it does not block.
|
|
233
|
+
|
|
234
|
+
Method: [`conventions.md`](plugins/task-pipeline/skills/task-pipeline/references/conventions.md)
|
|
235
|
+
→ *The CI verdict*.
|
|
236
|
+
|
|
216
237
|
### The code graph — reach, and a second opinion on your docs
|
|
217
238
|
|
|
218
239
|
A grep finds a **name**. A graph finds **reach**: what actually calls this, what
|
package/SKILL-CARD.md
CHANGED
|
@@ -12,7 +12,7 @@ harmless.
|
|
|
12
12
|
|---|---|
|
|
13
13
|
| **Purpose** | Runs a substantial task through ten gated delivery stages — intake grill, docs study, brainstorm, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs+registers, acceptance — refusing to advance until each gate passes |
|
|
14
14
|
| **Owner** | ssheleg ([github.com/ssheleg/task-pipeline](https://github.com/ssheleg/task-pipeline)) |
|
|
15
|
-
| **Version** | 1.16.
|
|
15
|
+
| **Version** | 1.16.2 |
|
|
16
16
|
| **Surface** | Claude Code (filesystem skill + plugin) and the vercel `skills` CLI. **Not** uploaded to the Skills API; custom Skills do not sync across surfaces |
|
|
17
17
|
| **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki. Every stage's doctrine ships in-repo; the one conditional requirement is super-ux for the stage-3 UX track on a user-facing task |
|
|
18
18
|
| **Evaluation status** | Suite authored (15 evals, 5 categories). **Never executed** — see [`evals/RESULTS.md`](evals/RESULTS.md) |
|
|
@@ -243,7 +243,17 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
|
|
|
243
243
|
outward → explicit user go, or the specific standing authorization recorded in
|
|
244
244
|
the stage-0 brief.
|
|
245
245
|
8. **Post-deploy** (auto) — tail logs / health-check; clean boot or an honest
|
|
246
|
-
degradation report (never silent success).
|
|
246
|
+
degradation report (never silent success). **Read the CI verdict, never assume
|
|
247
|
+
it** — `gh run list --branch <b> --limit 1 --json databaseId,name,status,conclusion,headSha`,
|
|
248
|
+
then `gh run view <id> --log-failed` on anything but success (unauthenticated
|
|
249
|
+
fallback: `curl -s https://api.github.com/repos/<owner>/<repo>/commits/<sha>/check-runs`).
|
|
250
|
+
Quote the conclusion with its run id, quote the failing step, and state one of
|
|
251
|
+
three states: concluded / in progress (wait and re-read — "it was still running"
|
|
252
|
+
is a report, not a verdict) / **no run found**, said out loud, because a project
|
|
253
|
+
without CI is a legitimate state and not a green one. Probe credentials with a
|
|
254
|
+
live call, never `gh auth status`, which answers from cache. This binds every
|
|
255
|
+
stage that pushes — 7, 8 and 9 — not just this one. It reports; it does not
|
|
256
|
+
block.
|
|
247
257
|
9. **Docs + wiki** (auto) — **the phase-1 source ledger is the work list**: every
|
|
248
258
|
source the harvest read gets updated if this run changed or disproved it. Module
|
|
249
259
|
docs and runbooks in the SAME change; the knowledge wiki via `wiki-update` when
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.2",
|
|
4
4
|
"description": "Full-cycle delivery pipeline for coding agents: a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine ships inside the skill — no companion plugin required. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"task-pipeline": "bin/task-pipeline.js"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "task-pipeline",
|
|
3
3
|
"displayName": "Task Pipeline",
|
|
4
4
|
"description": "Runs a substantial task through a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine is built into the skill — no companion plugin required — with typed auto/manual gates, a frozen requirement spine that must close with evidence, a loop guard that breaks churn, one provider-agnostic model confirmed up front, and an optional super-ux UX track for user-facing work.",
|
|
5
|
-
"version": "1.16.
|
|
5
|
+
"version": "1.16.2",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: evidence-docs
|
|
3
|
-
description: Applies the ten canons of evidence-backed documentation — what makes a claim documentation rather than an assertion — and routes to the doctrine that enforces each one. Use when writing or reviewing anything that will be read as true
|
|
3
|
+
description: Applies the ten canons of evidence-backed documentation — what makes a claim documentation rather than an assertion — and routes to the doctrine that enforces each one. Use when writing or reviewing anything that will be read as true — a decision record, a README, an acceptance report, a runbook, a changelog entry, an audit finding, or any claim that something was verified. Also use when a project needs a documentation gate, a decision register, a propagation matrix, or a retrospective that outlives its author. Not for drafts, chat answers, commit messages or code comments.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Evidence-backed documentation
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
],
|
|
134
134
|
"gate": {
|
|
135
135
|
"type": "auto",
|
|
136
|
-
"check": "clean boot confirmed (no error spike, live subsystems healthy), or an honest degradation report with next steps"
|
|
136
|
+
"check": "clean boot confirmed (no error spike, live subsystems healthy), or an honest degradation report with next steps. THE CI VERDICT IS READ, NEVER ASSUMED (references/conventions.md -> The CI verdict): the run's conclusion for this commit is quoted with its run id, the FAILING STEP'S LOG is quoted on anything but success, and one of three states is stated — concluded / in progress (wait and re-read; 'it was still running' is a report, not a verdict) / NO RUN FOUND, said out loud, because a project without CI is a legitimate state and not a green one. 'CI is green' written without a command behind it prints the same whether it looked or not (references/gates.md -> False success). Two command paths, because a credential problem must not end the check: 'gh run list --branch <b> --limit 1 --json databaseId,name,status,conclusion,headSha' then 'gh run view <id> --log-failed', or unauthenticated 'curl -s https://api.github.com/repos/<owner>/<repo>/commits/<sha>/check-runs'. Probe credentials with a live call, never with 'gh auth status', which answers from cache. It reports, it does not block."
|
|
137
137
|
}
|
|
138
138
|
},
|
|
139
139
|
{
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
"npm publish (task-pipeline-skill) — a second job in the same workflow, armed per repository by the PUBLISH_NPMJS variable (NPM_TOKEN granular automation token, or trusted publishing via OIDC); unarmed it falls back to a human 2FA step"
|
|
183
183
|
],
|
|
184
184
|
"verify": [
|
|
185
|
-
"CI green on the tagged commit",
|
|
185
|
+
"CI green on the tagged commit — READ, not assumed: the run's conclusion quoted with its run id, and the failing step's log quoted on anything but success (references/conventions.md -> The CI verdict)",
|
|
186
186
|
"npx github:ssheleg/task-pipeline#<tag> from a clean cwd installs the skill + command",
|
|
187
187
|
"after npm publish: npm view task-pipeline-skill version == <tag>"
|
|
188
188
|
]
|
|
@@ -8,6 +8,16 @@ names its doc repos, its knowledge base and its house rules
|
|
|
8
8
|
Prefer explicit host instructions over detection; if a step's convention can't be
|
|
9
9
|
found, surface it and **ask** rather than guessing.
|
|
10
10
|
|
|
11
|
+
## Contents
|
|
12
|
+
|
|
13
|
+
- Lint + test
|
|
14
|
+
- Deploy / release
|
|
15
|
+
- Post-deploy logs
|
|
16
|
+
- The CI verdict — read the run, never assume it
|
|
17
|
+
- Docs + wiki
|
|
18
|
+
- Documentation regime (stage 0, then 9 and 10)
|
|
19
|
+
- Issue tracker (stage 10)
|
|
20
|
+
|
|
11
21
|
## Lint + test
|
|
12
22
|
- `CLAUDE.md` usually names the commands. Else detect: `package.json` scripts
|
|
13
23
|
(`npm test` / `npm run lint`), `pyproject.toml` / `ruff` (`ruff check`), `pytest`,
|
|
@@ -30,7 +40,61 @@ found, surface it and **ask** rather than guessing.
|
|
|
30
40
|
|
|
31
41
|
## Post-deploy logs
|
|
32
42
|
- Heroku: `heroku logs -a <app>`. Docker / k8s: `docker logs` / `kubectl logs`.
|
|
33
|
-
|
|
43
|
+
Hit the health endpoint if one is defined. **CI: the workflow run — and a run is
|
|
44
|
+
checked by reading it, below.**
|
|
45
|
+
|
|
46
|
+
## The CI verdict — read the run, never assume it
|
|
47
|
+
|
|
48
|
+
A push either triggered a run or it did not, and either way **the run's own reply is
|
|
49
|
+
the only evidence** ([`gates.md`](gates.md) → *False success*). "CI is green" written
|
|
50
|
+
without a command behind it is a sentence that prints the same whether it looked or
|
|
51
|
+
not.
|
|
52
|
+
|
|
53
|
+
This is not hypothetical. On 2026-08-06 this repository's `validate` was
|
|
54
|
+
`completed/failure` on a push to `main` and on a release tag. The failure was
|
|
55
|
+
**correct** — the *Every v\* tag must be contained in main* guard firing on a tag that
|
|
56
|
+
was not yet an ancestor — and nothing in this bundle obliged anyone to read it. A
|
|
57
|
+
guard nobody reads is a fail-open hook with extra steps.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# authenticated
|
|
61
|
+
gh run list --branch <branch> --limit 1 \
|
|
62
|
+
--json databaseId,name,status,conclusion,headSha
|
|
63
|
+
gh run view <databaseId> --log-failed # only when conclusion != success
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# unauthenticated fallback — public repo, no token needed
|
|
68
|
+
curl -s "https://api.github.com/repos/<owner>/<repo>/commits/<sha>/check-runs"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Two paths on purpose.** A credential problem must not end the check: this repo's
|
|
72
|
+
`gh` token expired mid-run the same night, and `gh auth status` reported it invalid
|
|
73
|
+
from a **cached** verdict while `gh api user` succeeded. Probe credentials with a
|
|
74
|
+
live call, never with the status command.
|
|
75
|
+
|
|
76
|
+
**Three states, and the third is why this is written down:**
|
|
77
|
+
|
|
78
|
+
| State | Condition | Record |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| **concluded** | a run exists for this sha, `status == completed` | the conclusion and run id — and on any non-`success`, the **quoted failing step** |
|
|
81
|
+
| **in progress** | a run exists, not finished | wait and re-read. *"It was still running when I looked"* is a report, not a verdict |
|
|
82
|
+
| **no run found** | no run for this sha | say so out loud — a project without CI is a legitimate state and **not a green one** ([`gates.md`](gates.md) → *Progressive arming*) |
|
|
83
|
+
|
|
84
|
+
**Read the log, not just the verdict.** A conclusion says *that* it failed; only the
|
|
85
|
+
log says *what*. In the incident above the log named the guard, the orphan tag and the
|
|
86
|
+
one-line fix — a bare "CI failed" would have handed the next reader a search the log
|
|
87
|
+
had already finished. On any non-`success`: read the failing step and quote the line
|
|
88
|
+
that names the failure.
|
|
89
|
+
|
|
90
|
+
**It reports; it does not block.** Same shape stage 8 already uses for deploy logs — a
|
|
91
|
+
red run the operator has seen and ruled on is a decision, a red run nobody printed is
|
|
92
|
+
the failure. Blocking would also make a project *without* CI cheaper to ship from than
|
|
93
|
+
one with it.
|
|
94
|
+
|
|
95
|
+
**Promote it when it breaks** ([`gates.md`](gates.md) → *Axis B*): this sits at rung 2,
|
|
96
|
+
a criterion in the stage gates. Promote it to a script the first time a run is observed
|
|
97
|
+
closing a stage with an unread CI verdict.
|
|
34
98
|
|
|
35
99
|
## Docs + wiki
|
|
36
100
|
- **Start from the stage-0 source ledger** ([`knowledge-sources.md`](knowledge-sources.md)):
|
|
@@ -75,6 +75,7 @@ a row pointing outside the bundle is the defect this file exists to catch.
|
|
|
75
75
|
| Which companions exist, what is required, self-currency | `references/companion-skills.md` |
|
|
76
76
|
| The code graph: queries, refresh, the graph↔docs divergence | `references/knowledge-graph.md` |
|
|
77
77
|
| How the graph's staleness is measured and stated in the ledger | `references/knowledge-graph.md` |
|
|
78
|
+
| How a CI run's verdict is established, and its three states | `references/conventions.md` |
|
|
78
79
|
| Model policy — tier not id, ask once at preflight | `references/model-tiering.md` |
|
|
79
80
|
| This boundary | `references/portability.md` |
|
|
80
81
|
|
|
@@ -345,14 +345,24 @@ never that the work was skipped quietly.
|
|
|
345
345
|
`partial` ships only with the operator's explicit acceptance. A gap is cheapest to
|
|
346
346
|
close before it ships, and the operator is already present at this gate. **The
|
|
347
347
|
carry-over count is printed beside this verdict.** Deploy is outward → explicit
|
|
348
|
-
operator go. Respect deploy-from-main rules if the project mandates them.
|
|
348
|
+
operator go. Respect deploy-from-main rules if the project mandates them. **Before
|
|
349
|
+
tagging, the CI verdict for what was just pushed is READ, not assumed**
|
|
350
|
+
([`conventions.md`](conventions.md) → *The CI verdict*) — a tag on a commit whose
|
|
351
|
+
run nobody read is how a red `main` ships.
|
|
349
352
|
|
|
350
353
|
## 8 — Post-deploy
|
|
351
354
|
- **Freedom: medium** — where the logs live varies; 'clean boot or an honest degradation report' does not ([`gates.md`](gates.md) → *Axis C*).
|
|
352
355
|
- Tail deploy logs / health-check per conventions. Confirm clean boot, no error
|
|
353
356
|
spike, live subsystems healthy.
|
|
357
|
+
- **Read the CI verdict for the deploy's own commit** ([`conventions.md`](conventions.md)
|
|
358
|
+
→ *The CI verdict*): the run's conclusion quoted, the **failing step's log quoted**
|
|
359
|
+
on anything but `success`, and one of the three states stated — including **`no run
|
|
360
|
+
found`**, out loud, because a project without CI is a legitimate state and not a
|
|
361
|
+
green one.
|
|
354
362
|
- **GATE (auto):** clean boot confirmed, or an **honest degradation report** with next
|
|
355
|
-
steps — never silent success.
|
|
363
|
+
steps — never silent success. **The CI verdict is one of the reported facts, with
|
|
364
|
+
its run id** — "CI is green" written without a command behind it prints the same
|
|
365
|
+
whether it looked or not ([`gates.md`](gates.md) → *False success*).
|
|
356
366
|
|
|
357
367
|
## 9 — Docs + wiki
|
|
358
368
|
- **Freedom: low** — the matrix walk and the gate are mechanical; what a doc says is not this stage's call ([`gates.md`](gates.md) → *Axis C*).
|
|
@@ -405,7 +415,10 @@ never that the work was skipped quietly.
|
|
|
405
415
|
written and reconciled**; UI: super-ux layers current + linter green; wiki synced
|
|
406
416
|
(or absent and recommended once); **the code graph
|
|
407
417
|
refreshed where one exists, or the reason it wasn't written into the carry-over
|
|
408
|
-
ledger** (absent and recommended once is fine); dangling links fixed; **the
|
|
418
|
+
ledger** (absent and recommended once is fine); dangling links fixed; **the CI
|
|
419
|
+
verdict read for this stage's own push** ([`conventions.md`](conventions.md) →
|
|
420
|
+
*The CI verdict*) — this stage pushes like any other and is the one that habitually
|
|
421
|
+
ends a run, so an unread red here is a red `main` nobody is coming back to; **the
|
|
409
422
|
carry-over count printed beside this verdict**.
|
|
410
423
|
|
|
411
424
|
## 10 — Acceptance
|
|
Binary file
|