@hassangameryt/freeflow 0.8.0 → 0.9.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/.agents/plugins/marketplace.json +2 -2
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +3 -3
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +96 -149
- package/capabilities/cognitive-routing/SKILL.md +21 -129
- package/capabilities/cognitive-routing/references/coordinator.md +163 -0
- package/capabilities/cognitive-routing/references/worker.md +38 -0
- package/capabilities/compaction/SKILL.md +3 -3
- package/capabilities/compaction/references/summary-format.md +26 -15
- package/capabilities/messaging/SKILL.md +49 -0
- package/capabilities/task-memory/SKILL.md +87 -0
- package/command-surface.json +6 -54
- package/gemini-extension.json +1 -1
- package/hooks/claude/hooks.json +13 -3
- package/hooks/codex/hooks.json +2 -1
- package/hooks/shared/runtime-context.mjs +69 -77
- package/package.json +25 -8
- package/pi-extension/dist/ask-user/ask.js +108 -0
- package/pi-extension/dist/ask-user/form.js +250 -0
- package/pi-extension/dist/ask-user/questions.js +66 -0
- package/pi-extension/dist/ask-user/tool.js +124 -0
- package/pi-extension/dist/cognitive-routing/assembler.js +35 -11
- package/pi-extension/dist/cognitive-routing/bootstrap.js +90 -0
- package/pi-extension/dist/cognitive-routing/config.js +3 -4
- package/pi-extension/dist/cognitive-routing/event-store.js +4 -1
- package/pi-extension/dist/cognitive-routing/gate.js +20 -5
- package/pi-extension/dist/cognitive-routing/handlers.js +15 -13
- package/pi-extension/dist/cognitive-routing/model-control.js +17 -8
- package/pi-extension/dist/cognitive-routing/projection.js +23 -6
- package/pi-extension/dist/cognitive-routing/provenance.js +3 -1
- package/pi-extension/dist/cognitive-routing/render.js +15 -15
- package/pi-extension/dist/cognitive-routing/runtime.js +4 -2
- package/pi-extension/dist/cognitive-routing/schemas.js +4 -4
- package/pi-extension/dist/cognitive-routing/session.js +3 -1
- package/pi-extension/dist/cognitive-routing/sources.js +29 -4
- package/pi-extension/dist/cognitive-routing/state.js +18 -8
- package/pi-extension/dist/cognitive-routing/status.js +4 -3
- package/pi-extension/dist/cognitive-routing/tools.js +29 -15
- package/pi-extension/dist/cognitive-routing/types.js +10 -1
- package/pi-extension/dist/compaction/carry.js +36 -22
- package/pi-extension/dist/compaction/config.js +4 -2
- package/pi-extension/dist/compaction/controller.js +52 -29
- package/pi-extension/dist/compaction/harness.js +19 -3
- package/pi-extension/dist/compaction/results.js +14 -13
- package/pi-extension/dist/compaction/tool.js +6 -6
- package/pi-extension/dist/host/catalog.js +20 -35
- package/pi-extension/dist/host/config-validation.js +233 -0
- package/pi-extension/dist/host/config.js +78 -91
- package/pi-extension/dist/host/inbound.js +142 -0
- package/pi-extension/dist/host/projection-tags.js +1 -1
- package/pi-extension/dist/host/prompts.js +24 -13
- package/pi-extension/dist/host/read-only-session.js +6 -1
- package/pi-extension/dist/host/request-history.js +7 -3
- package/pi-extension/dist/host/rows.js +25 -0
- package/pi-extension/dist/host/runtime-state.js +17 -2
- package/pi-extension/dist/host/section-keeper.js +85 -0
- package/pi-extension/dist/host/settings/freeflow-command.js +846 -93
- package/pi-extension/dist/host/settings/settings-view.js +27 -8
- package/pi-extension/dist/host/status.js +19 -5
- package/pi-extension/dist/index.js +638 -72
- package/pi-extension/dist/messaging/config.js +27 -0
- package/pi-extension/dist/messaging/messaging.js +398 -0
- package/pi-extension/dist/messaging/registry.js +57 -0
- package/pi-extension/dist/messaging/render.js +90 -0
- package/pi-extension/dist/messaging/tools.js +109 -0
- package/pi-extension/dist/messaging/transport.js +101 -0
- package/pi-extension/dist/provider-support/cache/keepalive.js +16 -4
- package/pi-extension/dist/task-memory/config.js +49 -0
- package/pi-extension/dist/task-memory/registry.js +119 -0
- package/pi-extension/dist/task-memory/render.js +107 -0
- package/pi-extension/dist/task-memory/runtime.js +994 -0
- package/pi-extension/dist/task-memory/tool.js +233 -0
- package/pi-extension/dist/tool-execution/apply-patch/tool.js +1 -1
- package/pi-extension/dist/tool-execution/background.js +220 -28
- package/pi-extension/dist/tool-execution/config.js +14 -3
- package/pi-extension/dist/tool-execution/file-tracking.js +24 -4
- package/pi-extension/dist/tool-execution/guidance-notices.js +124 -0
- package/pi-extension/dist/tool-execution/skill-reads.js +143 -0
- package/pi-extension/dist/tool-execution/tools.js +2 -2
- package/runtime/prompts/cognitive-routing.md +4 -4
- package/runtime/prompts/core.md +24 -14
- package/runtime/prompts/interaction-contract.md +7 -4
- package/runtime/prompts/tool-execution.md +3 -16
- package/runtime/prompts/working-method.md +16 -99
- package/skills/deliver-work/SKILL.md +76 -0
- package/skills/deliver-work/references/branch-closeout.md +134 -0
- package/skills/deliver-work/references/commit.md +83 -0
- package/skills/deliver-work/references/launch.md +94 -0
- package/skills/deliver-work/references/release.md +85 -0
- package/skills/deliver-work/scripts/commit-state.mjs +139 -0
- package/skills/deliver-work/scripts/delivery-state.mjs +107 -0
- package/skills/deliver-work/scripts/lib/git-state.mjs +178 -0
- package/skills/deliver-work/scripts/push-route.mjs +122 -0
- package/skills/deliver-work/scripts/release-preflight.mjs +177 -0
- package/skills/discuss-work/SKILL.md +148 -0
- package/skills/{discuss → discuss-work}/references/discussion-continuity.md +10 -27
- package/skills/discuss-work/references/learning-action.md +36 -0
- package/skills/discuss-work/scripts/choices.mjs +101 -0
- package/skills/discuss-work/scripts/lib/choices.mjs +159 -0
- package/skills/evaluate-behavior/SKILL.md +107 -0
- package/skills/evaluate-behavior/references/authoring.md +381 -0
- package/skills/evaluate-behavior/references/coding-tasks.md +145 -0
- package/skills/evaluate-behavior/references/conversations-pipelines-judges.md +177 -0
- package/skills/evaluate-behavior/references/design-and-measurement.md +273 -0
- package/skills/evaluate-behavior/references/running-and-evidence.md +245 -0
- package/skills/evaluate-behavior/scripts/claude-guard.mjs +76 -0
- package/skills/evaluate-behavior/scripts/guard-rules.mjs +309 -0
- package/skills/evaluate-behavior/scripts/lib/agreement.mjs +90 -0
- package/skills/evaluate-behavior/scripts/lib/arms.mjs +55 -0
- package/skills/evaluate-behavior/scripts/lib/budget.mjs +87 -0
- package/skills/evaluate-behavior/scripts/lib/build-source.mjs +287 -0
- package/skills/evaluate-behavior/scripts/lib/clear.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/container.mjs +395 -0
- package/skills/evaluate-behavior/scripts/lib/decision.mjs +418 -0
- package/skills/evaluate-behavior/scripts/lib/definitions.mjs +1072 -0
- package/skills/evaluate-behavior/scripts/lib/freeflow.mjs +103 -0
- package/skills/evaluate-behavior/scripts/lib/grade-command.mjs +591 -0
- package/skills/evaluate-behavior/scripts/lib/grade-comparison.mjs +90 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-interaction.mjs +19 -18
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-support.mjs +32 -5
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-workspace.mjs +28 -12
- package/skills/evaluate-behavior/scripts/lib/grade.mjs +101 -0
- package/skills/evaluate-behavior/scripts/lib/hooks.mjs +98 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/confinement.mjs +196 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/constraints.mjs +111 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/index.mjs +48 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/isolation.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/launch.mjs +123 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/model-call.mjs +73 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/recorder.mjs +178 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/session.mjs +494 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/skills.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/index.mjs +31 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/names.mjs +3 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/confinement.mjs +173 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/host.mjs +148 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/index.mjs +70 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/isolation.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/model-call.mjs +79 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/process.mjs +241 -0
- package/skills/{evaluate-skill/scripts/lib → evaluate-behavior/scripts/lib/hosts/pi}/rpc.mjs +144 -26
- package/skills/evaluate-behavior/scripts/lib/identity.mjs +82 -0
- package/skills/evaluate-behavior/scripts/lib/judge.mjs +688 -0
- package/skills/evaluate-behavior/scripts/lib/metrics.mjs +332 -0
- package/skills/evaluate-behavior/scripts/lib/model-call.mjs +17 -0
- package/skills/evaluate-behavior/scripts/lib/participants.mjs +616 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/process.mjs +22 -0
- package/skills/evaluate-behavior/scripts/lib/queue.mjs +54 -0
- package/skills/evaluate-behavior/scripts/lib/reference.mjs +343 -0
- package/skills/evaluate-behavior/scripts/lib/reuse.mjs +277 -0
- package/skills/evaluate-behavior/scripts/lib/review.mjs +933 -0
- package/skills/evaluate-behavior/scripts/lib/runner.mjs +732 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/sandbox.mjs +119 -14
- package/skills/evaluate-behavior/scripts/lib/scan-shell.mjs +457 -0
- package/skills/evaluate-behavior/scripts/lib/scan.mjs +479 -0
- package/skills/evaluate-behavior/scripts/lib/seal.mjs +91 -0
- package/skills/evaluate-behavior/scripts/lib/shell.mjs +560 -0
- package/skills/evaluate-behavior/scripts/lib/source-override.mjs +64 -0
- package/skills/evaluate-behavior/scripts/lib/subject-file.mjs +88 -0
- package/skills/{evaluate-skill/scripts/lib/pi.mjs → evaluate-behavior/scripts/lib/subject.mjs} +235 -265
- package/skills/evaluate-behavior/scripts/lib/task-copy.mjs +124 -0
- package/skills/evaluate-behavior/scripts/lib/trials.mjs +524 -0
- package/skills/evaluate-behavior/scripts/lib/validity.mjs +68 -0
- package/skills/evaluate-behavior/scripts/lib/view-html.mjs +454 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/view.mjs +159 -18
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/pi-command-tool.mjs +21 -6
- package/skills/evaluate-behavior/scripts/pi-container-route.mjs +23 -0
- package/skills/evaluate-behavior/scripts/pi-guard.mjs +77 -0
- package/skills/evaluate-behavior/scripts/pi-login-refresh.mjs +31 -0
- package/skills/evaluate-behavior/scripts/skill-eval.mjs +586 -0
- package/skills/execute-work/SKILL.md +96 -104
- package/skills/execute-work/references/code-practices.md +27 -51
- package/skills/execute-work/references/design.md +271 -0
- package/skills/execute-work/references/diagnose.md +117 -0
- package/skills/execute-work/references/migration.md +108 -0
- package/skills/execute-work/references/simplify.md +65 -0
- package/skills/execute-work/scripts/self-review.mjs +422 -0
- package/skills/execute-work/scripts/touch-map.mjs +290 -0
- package/skills/review-work/SKILL.md +89 -65
- package/skills/review-work/references/adjudication.md +94 -0
- package/skills/review-work/references/artifact.md +198 -0
- package/skills/review-work/references/evals-and-judges.md +66 -0
- package/skills/review-work/references/work.md +177 -0
- package/skills/review-work/scripts/check-brief.mjs +128 -0
- package/skills/review-work/scripts/review-packet.mjs +233 -0
- package/skills/setup-freeflow/SKILL.md +68 -17
- package/skills/track-work/SKILL.md +52 -20
- package/skills/track-work/references/handoff.md +190 -0
- package/skills/track-work/references/projects.md +51 -0
- package/skills/track-work/references/working-record-format.md +36 -18
- package/skills/track-work/scripts/lib/document.mjs +17 -13
- package/skills/track-work/scripts/lib/format.mjs +2 -0
- package/skills/track-work/scripts/lib/recover.mjs +254 -0
- package/skills/track-work/scripts/lib/registry.mjs +656 -0
- package/skills/track-work/scripts/lib/search.mjs +40 -0
- package/skills/track-work/scripts/lib/store.mjs +46 -15
- package/skills/track-work/scripts/lib/views.mjs +50 -1
- package/skills/track-work/scripts/working-record.mjs +232 -13
- package/skills/verify-work/SKILL.md +45 -37
- package/skills/verify-work/references/feature-map.md +120 -0
- package/skills/verify-work/references/runtime-evidence.md +203 -0
- package/skills/verify-work/references/test-design.md +25 -6
- package/skills/verify-work/scripts/test-changes.mjs +246 -0
- package/skills/write-docs/SKILL.md +113 -25
- package/skills/write-docs/references/documentation-shapes.md +68 -3
- package/skills/write-docs/references/spec-and-plan-shapes.md +308 -0
- package/skills/write-docs/scripts/artifact-check.mjs +148 -0
- package/skills/write-docs/scripts/docs-check.mjs +96 -6
- package/skills/write-docs/scripts/plan-lint.mjs +123 -0
- package/skills/write-skill/SKILL.md +92 -52
- package/skills/write-skill/references/activation-and-wording.md +143 -0
- package/skills/write-skill/references/placement-and-dependencies.md +154 -0
- package/skills/write-skill/scripts/lib/compare.mjs +701 -0
- package/skills/write-skill/scripts/lib/skill-author.mjs +197 -3
- package/skills/write-skill/scripts/skill-author.mjs +51 -8
- package/capabilities/cognitive-routing/references/both-mode.md +0 -36
- package/capabilities/cognitive-routing/references/executor-mode.md +0 -48
- package/capabilities/cognitive-routing/references/helper-mode.md +0 -47
- package/plugin.json +0 -33
- package/skills/action-selection/SKILL.md +0 -92
- package/skills/action-selection/references/trajectory-stalls.md +0 -73
- package/skills/bypass/SKILL.md +0 -153
- package/skills/commit-work/SKILL.md +0 -93
- package/skills/commit-work/references/git-state-edges.md +0 -94
- package/skills/commit-work/references/simple-push.md +0 -94
- package/skills/commit-work/references/staging-decisions.md +0 -106
- package/skills/decision-gate/SKILL.md +0 -87
- package/skills/design-for-depth/SKILL.md +0 -108
- package/skills/design-for-depth/references/design-pressure-signals.md +0 -84
- package/skills/design-for-depth/references/implementation-decisions.md +0 -76
- package/skills/design-for-depth/references/interface-design-loop.md +0 -105
- package/skills/design-for-depth/references/module-and-dependency-design.md +0 -117
- package/skills/design-for-depth/references/state-and-failure-boundaries.md +0 -125
- package/skills/diagnose-failure/SKILL.md +0 -140
- package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +0 -50
- package/skills/diagnose-failure/references/flaky-and-performance-diagnosis.md +0 -51
- package/skills/discuss/SKILL.md +0 -140
- package/skills/evaluate-skill/SKILL.md +0 -188
- package/skills/evaluate-skill/references/evaluation-definition-schema.md +0 -415
- package/skills/evaluate-skill/references/evaluation-design.md +0 -112
- package/skills/evaluate-skill/references/execution-and-evidence.md +0 -111
- package/skills/evaluate-skill/references/review-and-revision.md +0 -94
- package/skills/evaluate-skill/scripts/lib/definitions.mjs +0 -448
- package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +0 -60
- package/skills/evaluate-skill/scripts/lib/grade.mjs +0 -64
- package/skills/evaluate-skill/scripts/lib/review.mjs +0 -196
- package/skills/evaluate-skill/scripts/lib/runner.mjs +0 -405
- package/skills/evaluate-skill/scripts/lib/trials.mjs +0 -103
- package/skills/evaluate-skill/scripts/pi-guard.mjs +0 -181
- package/skills/evaluate-skill/scripts/skill-eval.mjs +0 -182
- package/skills/execute-work/references/execute-work-edges.md +0 -78
- package/skills/finish-branch/SKILL.md +0 -117
- package/skills/finish-branch/references/integration-options.md +0 -80
- package/skills/handoff/SKILL.md +0 -82
- package/skills/handoff/references/handoff-templates.md +0 -150
- package/skills/launch-work/SKILL.md +0 -116
- package/skills/launch-work/references/launch-readiness.md +0 -85
- package/skills/migration-work/SKILL.md +0 -115
- package/skills/migration-work/references/migration-lifecycle.md +0 -82
- package/skills/release-work/SKILL.md +0 -118
- package/skills/release-work/references/release-evidence.md +0 -78
- package/skills/review-artifact/SKILL.md +0 -143
- package/skills/review-artifact/references/adjudicate-artifact-review.md +0 -101
- package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +0 -159
- package/skills/review-work/references/adjudicate-work-review.md +0 -97
- package/skills/review-work/references/independent-work-reviewer-contract.md +0 -139
- package/skills/review-work/references/security-risk-lens.md +0 -67
- package/skills/setup-freeflow/references/activation-contract.md +0 -103
- package/skills/setup-freeflow/references/host-setup.md +0 -67
- package/skills/simplify-code/SKILL.md +0 -85
- package/skills/simplify-code/references/simplification-patterns.md +0 -70
- package/skills/verify-work/references/browser-runtime-evidence.md +0 -51
- package/skills/verify-work/references/integration-evidence.md +0 -49
- package/skills/verify-work/references/performance-evidence.md +0 -59
- package/skills/workflow/SKILL.md +0 -171
- package/skills/workflow/references/domain-skill-composition.md +0 -45
- package/skills/write-plan/SKILL.md +0 -92
- package/skills/write-plan/references/plan-shapes.md +0 -156
- package/skills/write-skill/references/activation-boundaries.md +0 -106
- package/skills/write-skill/references/agent-first-instructions.md +0 -133
- package/skills/write-skill/references/progressive-disclosure.md +0 -129
- package/skills/write-skill/references/skill-dependency-graphs.md +0 -192
- package/skills/write-spec/SKILL.md +0 -85
- package/skills/write-spec/references/artifact-standards.md +0 -86
- package/skills/write-spec/references/decision-records.md +0 -80
- package/skills/write-spec/references/spec-shapes.md +0 -143
- /package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/evidence.mjs +0 -0
- /package/skills/{evaluate-skill → evaluate-behavior}/scripts/pi-observer.mjs +0 -0
|
@@ -1,108 +1,25 @@
|
|
|
1
1
|
# Freeflow Working Method
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
These rules and habits hold on every task, whatever skill is guiding it. Each habit is the short form of a method its skill holds in full, with the scripts that do it; read that skill when its step comes, as Freeflow core's cycle names it.
|
|
4
4
|
|
|
5
5
|
## Rules
|
|
6
6
|
|
|
7
|
-
1. **Claim only what you observed.** Every
|
|
8
|
-
2. **Stay inside the request.** Change what the request needs and nothing else.
|
|
9
|
-
3. **Never make a check pass by weakening it.** Do not change an existing test's expectation, skip it, widen a tolerance, or change shared setup so a test no longer exercises what it did, unless the request changes the behavior
|
|
10
|
-
4. **Never destroy work that is not yours.** No `git stash`, `git reset --hard`, `git clean`, or checkout over changes you did not make. Look at a file before you delete or overwrite it.
|
|
11
|
-
5. **Stated requirements are requirements.**
|
|
7
|
+
1. **Claim only what you observed.** Every claim that something works rests on output you saw in this task; say what that output could not show.
|
|
8
|
+
2. **Stay inside the request.** Change what the request needs and nothing else. A *may* is a permission, not a request.
|
|
9
|
+
3. **Never make a check pass by weakening it.** Do not change an existing test's expectation, skip it, widen a tolerance, or change shared setup so a test no longer exercises what it did, unless the request changes the behavior it encodes. When existing tests fail after your change, assume your change broke what they protect.
|
|
10
|
+
4. **Never destroy work that is not yours.** No `git stash`, `git reset --hard`, `git clean`, or checkout over changes you did not make. Look at a file before you delete or overwrite it. A separate `git worktree` keeps your work apart in a checkout others may be using.
|
|
11
|
+
5. **Stated requirements are requirements.** Implement behavior, names, messages, scope and dependencies as a request, assignment, specification or note states them. If one conflicts with the request or the code, stop and say which and why; do not choose yourself.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Habits for every change
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
- **Read the request in layers before the first edit:** each separate ask, what the requester saw, and what must stay true although nobody wrote it down: data the old code wrote stays readable, every way users or code reach the behavior keeps working, and other readers of the output still get what they rely on (Execute Work's Read The Request).
|
|
16
|
+
- **Find what the change touches by querying, not imagining:** callers, readers and writers of the state, and the tests that cover it (Execute Work's touch-map script).
|
|
17
|
+
- **Reproduce a problem through the user's path before changing anything,** and aim every check at that path with input of the user's size and shape (Verify Work).
|
|
18
|
+
- **Run the existing tests before and after your change.** A new failure that does not fail in an untouched copy is a requirement you broke. Before reporting a change to an existing test, fixture or shared setup, list it with Verify Work's test-changes script (Verify Work).
|
|
19
|
+
- **Know what you expect before you look, and explain a surprise first:** a new test that passes before the fix, or an empty result, more often means a broken check than good news (Verify Work).
|
|
20
|
+
- **Two failed fixes mean the diagnosis is wrong:** change the question or the kind of observation instead of trying a third (Execute Work's Diagnose Before Fixing, then its diagnose reference).
|
|
21
|
+
- **Before you report, read the actual diff,** and give each requirement with the output that shows it holds, or say it is not verified (Execute Work's self-review script, Review Your Own Change and Report A Finished Change).
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
- **Observations:** what the requester saw, often with numbers ("takes 2.3 s", "only after a restart", "sometimes"). These are facts about the real system; "sometimes" names a condition you must find.
|
|
19
|
-
- **Implied requirements:** what must stay true although nobody wrote it down. Check each about the thing you are about to change:
|
|
20
|
-
- data already written by the old code (records, files, keys, cache entries) stays readable;
|
|
21
|
-
- every way a user or other code reaches this behavior (commands, shortcuts, API routes, jobs, startup, retries) keeps working;
|
|
22
|
-
- other readers of the output (formats, field names, ordering) still get what they rely on;
|
|
23
|
-
- the opposite case still works ("never include X" still includes everything that is not X);
|
|
24
|
-
- stated properties ("only when", "exactly once", "never", "until") hold over all inputs, not only the example.
|
|
23
|
+
## Keep output small
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
When the requester suggests how to do it, check its preconditions against the actual state first (`git status`, what gets built or deployed, what else touches the same files). If they do not hold, keep the goal, adjust the approach, and say why.
|
|
29
|
-
|
|
30
|
-
When a choice the request leaves open matters, check whether code, tests, docs or the conversation already settle it. If they do not and the user can answer, ask one question with your recommendation. When nobody can answer (a routed assignment, an unattended run), choose what matches existing behavior and is easiest to reverse, and state the assumption in your report. Before adding something the request did not ask for (a dependency, a stored field, an option), ask whether the outcome needs it or only your approach does.
|
|
31
|
-
|
|
32
|
-
## Find what the change touches
|
|
33
|
-
|
|
34
|
-
Consequences are hard to imagine and easy to query. Name what you are changing in one line, then query each of these and write every result down:
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
echo '--- entry points'; grep -rn 'name_of_thing(' src | head -20
|
|
38
|
-
echo '--- readers of the state I change'; grep -rn 'state_field' src | head -20
|
|
39
|
-
echo '--- data written by the old behavior'; grep -rn 'write.*state_field\|dump' src | head
|
|
40
|
-
echo '--- things that run at the same time or on a schedule'; grep -rn 'async def\|schedule\|thread' src | head
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Decide each line and write the decision next to it. Anything the request does not ask to change keeps behaving as it does today for its users. Put the change where the behavior is owned, even when many callers share that code: keeping callers correct means checking that each still gets the right behavior, not avoiding the shared code. After your change works, run the same queries against the final code and check each line.
|
|
44
|
-
|
|
45
|
-
## Predict, observe, compare
|
|
46
|
-
|
|
47
|
-
Before any action that produces information, know what you expect it to show. After it, compare. When they differ, stop and explain the difference before anything else.
|
|
48
|
-
|
|
49
|
-
- An **unexpected success** is as suspicious as a failure: a new test that passes before the fix is not testing the bug.
|
|
50
|
-
- An **empty result** (no matches, 0 ms, 0 rows) is more often a broken query or loop than an empty world.
|
|
51
|
-
- An **almost-right** result (off by one, one path of three) points at what you do not yet understand.
|
|
52
|
-
- **Check your instruments** on a case where you know the answer: a new search finds one place you already know; a new script counts a small input correctly.
|
|
53
|
-
|
|
54
|
-
## Work on the user's path
|
|
55
|
-
|
|
56
|
-
- **Aim every check at the path the user uses**: the command, public function or entry point named in the request, with input of the size and shape the user has. A check on an internal helper with a toy input shows only that the helper works on that input.
|
|
57
|
-
- **Reproduce the problem through that path before changing anything.** If you cannot, say so and what you tried.
|
|
58
|
-
- **For any claim about cost, speed or scale, measure the real operation** and time a baseline next to it: the same work done by a standard tool or by the unchanged code. To learn how cost grows, double the input and compare. Repeat noisy timings and use the middle value.
|
|
59
|
-
|
|
60
|
-
## Diagnose before fixing
|
|
61
|
-
|
|
62
|
-
A plausible line of code is a hypothesis, not a cause. Write the hypothesis, what it predicts, and what would contradict it; then choose an observation whose result differs between your hypothesis and the best alternative. Check that the explanation covers the whole symptom, including the "sometimes", the size and the timing. Measure before optimizing: code that looks wasteful is often cheap.
|
|
63
|
-
|
|
64
|
-
When your last two or three actions did not change what you believe, stop repeating them. Change the question (from "where is the bug?" to "which code runs between the input and the wrong value?"), change the kind of observation (run it if reading failed; read the producer if running failed), or list your assumptions and check the cheapest (did the build run? does the test import what you think?). Two failed fixes mean the diagnosis is wrong.
|
|
65
|
-
|
|
66
|
-
## Change code
|
|
67
|
-
|
|
68
|
-
- Read the tests that cover the code before editing; they are the contract.
|
|
69
|
-
- Before the first edit, be able to say what changes and where, why that meets every requirement on your list, and which check could fail if it does not.
|
|
70
|
-
- Change the code that owns the behavior, so every path through it is fixed at once. Keep data written before the change readable. Record an effect only after it happened.
|
|
71
|
-
- Make the smallest change that meets every requirement. When corrections keep adding flags, special cases or states, stop: your model of the code is wrong somewhere; diagnose again.
|
|
72
|
-
|
|
73
|
-
## Check what your evidence can show
|
|
74
|
-
|
|
75
|
-
A check is evidence only for what it could have caught. Your own tests share your blind spots: they pass when your understanding is wrong. Prefer evidence from outside your model:
|
|
76
|
-
|
|
77
|
-
- the reported observation, reproduced again after the fix;
|
|
78
|
-
- the real path with the inputs it really receives: find a real caller and see what it passes, and include each kind of item that reaches your code;
|
|
79
|
-
- the existing test suite, which encodes other people's requirements;
|
|
80
|
-
- your new test seen failing on the unfixed code, with a message that describes the bug.
|
|
81
|
-
|
|
82
|
-
Ask of each check whether it measures your claim: a correctness test says nothing about speed; a helper test says nothing about the command; one input says nothing about all inputs; an expectation computed by the code under test agrees with itself. A step that succeeded (an edit applied, a build compiled) shows the step ran, not that the behavior is right.
|
|
83
|
-
|
|
84
|
-
Run the relevant existing tests before and after your change. For a new failure, check whether it failed before (in an untouched copy: `git worktree add "${TMPDIR:-/tmp}/base" HEAD`), whether it is flaky (run it alone and again), and otherwise treat it as a requirement you broke.
|
|
85
|
-
|
|
86
|
-
## Review your own change
|
|
87
|
-
|
|
88
|
-
After your checks run and before you report, read the actual change, not your memory of it: `git status`, `git diff --stat`, `git diff`. Ask: does it do every item on my list and nothing more? Who calls what I changed, and do they still work (rerun the queries)? Which check supports each requirement, and did it run after my last edit? Any leftover debug output, instrumentation or scratch files? Fix what you find, recheck only what that affects, and stop.
|
|
89
|
-
|
|
90
|
-
## Instructions around the task
|
|
91
|
-
|
|
92
|
-
- Repository instruction files govern the work; apply them as written, with their own scoping. A rule that says you *may* do something is a permission.
|
|
93
|
-
- A skill or helper applies when the work's subject is its subject; a trigger word in the request does not make it so. If one does not fit, continue without it.
|
|
94
|
-
- If the checkout may be shared (changes you did not make), do not disturb it (Rule 4); work in a separate `git worktree` if you must.
|
|
95
|
-
|
|
96
|
-
## Report a finished change
|
|
97
|
-
|
|
98
|
-
When you finish a change to code, end with:
|
|
99
|
-
|
|
100
|
-
1. **The cause and the change**, citing `file:line`.
|
|
101
|
-
2. **Each requirement**, including every stated requirement from a request, assignment or note, with the output that shows it holds:
|
|
102
|
-
```text
|
|
103
|
-
R1 <requirement> — observed: <command> → <result>
|
|
104
|
-
R2 <requirement> — not verified: <why>
|
|
105
|
-
```
|
|
106
|
-
3. **Assumptions you made** where the request left a choice open, **what you did not verify**, and anything you noticed but did not change.
|
|
107
|
-
|
|
108
|
-
Say "works" only for what you observed on the user's path. Otherwise say "should work; not verified".
|
|
25
|
+
Every tool result is sent again with each later request. Cap searches and command output (`| head -20`, `2>&1 | tail -40`) and say when you cut it: a capped result does not show that nothing else matched. Save long output to a scratch file (the task's `scratch/` when it has a Working Record, otherwise `${TMPDIR:-/tmp}`, never elsewhere in the repository) and query the file instead of rerunning the command.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deliver-work
|
|
3
|
+
description: "Use whenever work leaves your working tree: staging and committing, writing a commit message, pushing, opening, updating or merging a pull request, finishing, keeping or deleting a branch or worktree; preparing or publishing a release (version bump, changelog, release notes, tag, package publish); and deploying, rolling out, rolling back or restoring production. Read it before running git commit, git push, a merge, a tag or a publish command, even when the user only says commit or ship. It checks the branch, the staged files and the remote before each step, and exactly what each step includes."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deliver Work
|
|
7
|
+
|
|
8
|
+
Take finished work into a commit, a pushed or merged branch, a pull request, a release or production, only as far as the user said yes.
|
|
9
|
+
|
|
10
|
+
The **Rules** are binding; if one cannot be met, stop and say why. Everything else is judgment: adapt it when another choice serves its goal better.
|
|
11
|
+
|
|
12
|
+
## Routes
|
|
13
|
+
|
|
14
|
+
| Situation | Read |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| An ordinary commit of your own changes | Commit, below |
|
|
17
|
+
| Committing with mixed owners or concerns, a file holding included and excluded changes, or generated, sensitive or unexplained files; Git mid-operation, unmerged, detached or with a changed submodule; nothing to commit; amend, empty commit or skipped hooks asked for; a failed commit or hook | [commit](references/commit.md) |
|
|
18
|
+
| Pushing to a remote branch | [branch closeout: Simple Push](references/branch-closeout.md#simple-push) |
|
|
19
|
+
| Merging, a pull request, or keeping, discarding or deleting a branch or worktree | [branch closeout](references/branch-closeout.md) |
|
|
20
|
+
| A version, release notes, tag or registry publication | [release](references/release.md) |
|
|
21
|
+
| Deploying, exposing a change to users, rolling back or restoring production | [launch](references/launch.md) |
|
|
22
|
+
|
|
23
|
+
Start every route with [delivery-state](scripts/delivery-state.mjs) (`node <deliver-work-directory>/scripts/delivery-state.mjs`): branch, upstream counts from local refs, staged, unstaged and untracked counts, a Git operation in progress, every worktree with the one holding this session's directory flagged, the latest tag, the version and the changelog's Unreleased entries. It reads only; what needs the network it reports unavailable.
|
|
24
|
+
|
|
25
|
+
A request spanning routes, such as "commit and push": take them in order, each within its own yes, and stop at the first that fails.
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
- Merging, a pull request, deleting or discarding a branch, worktree or uncommitted work, deploying, and every exposure stage need their own yes, like commit, push and release. Loading this skill, a readiness question or an approved plan gives none, and one route's success never authorizes the next.
|
|
30
|
+
- Never use `--amend`, `--allow-empty`, `--no-verify`, a force push, a history rewrite, a moved release tag or an overwritten published version unless the user asked for that exact action; never bypass or blindly retry a failing hook or check.
|
|
31
|
+
- Never stage or publish Working Records (`.freeflow/tasks/**`), secrets, credentials, private keys, local environment files or unexplained sensitive content.
|
|
32
|
+
- Never absorb or unstage pre-existing staged changes, or remove a worktree, checkout or other state you did not create. Never run a destructive reset, clean, branch or remote deletion, worktree removal or force push merely to produce a clean status.
|
|
33
|
+
- After a commit, push, publication or deployment step fails or loses its acknowledgement, inspect what changed before retrying, and stop while it stays unknown; a network error does not mean nothing happened.
|
|
34
|
+
|
|
35
|
+
## Commit
|
|
36
|
+
|
|
37
|
+
Goal: one commit that holds exactly the supported state.
|
|
38
|
+
|
|
39
|
+
1. **Boundary.** The user asked for this commit, or a `preserve` Checkpoint they selected is due; a Working Record can carry that selection, not create it. Fresh checks support the state, or the user asked to preserve incomplete work; a review they selected is done, its findings settled.
|
|
40
|
+
2. **Inspect** before touching the index: [commit-state](scripts/commit-state.mjs) lists every staged, unstaged and untracked path as yours, pre-existing or unknown (from a `snapshot` taken before your first edit, or `--mine <path>`), with partly staged files, sensitive-looking paths and Working Records flagged; then read `git diff` and `git diff --cached`. Staged does not mean yours. If the second Routes row matches, read [commit](references/commit.md) now.
|
|
41
|
+
3. **Stage** only what the claim needs: explicit paths or hunks, with the tests, docs and generated output it requires; stage broadly only when every changed path was inspected and belongs. Then `git diff --cached --check`: conflict markers or whitespace damage stop the commit; fix them in the content they belong to, never edit content just to silence the check.
|
|
42
|
+
4. **Message** in the repository's style; otherwise a short imperative subject naming what this commit holds, and a body only for what the diff cannot show: why, trade-offs, residual risk, why incomplete work is kept. Invent no trailers.
|
|
43
|
+
5. **Check** `git show --stat --oneline HEAD` and `git status --short --branch`: the claimed contents, nothing unexpected left.
|
|
44
|
+
6. **Record** `commit:<sha>` in the Current Slice's Material updates and close the selected `preserve` Checkpoint through [Track Work](../track-work/SKILL.md), when a Working Record exists.
|
|
45
|
+
|
|
46
|
+
Rules for a commit:
|
|
47
|
+
|
|
48
|
+
- Claim no more than the checks and selected review support. A preservation commit the user asked for may hold incomplete or failing work: say so, and do not take it as leave to cross what is unresolved.
|
|
49
|
+
- A commit is never a Slice of its own; after it, stage no leftovers and begin no other Slice.
|
|
50
|
+
|
|
51
|
+
## Other Owners
|
|
52
|
+
|
|
53
|
+
A choice that is the user's goes to [Discuss Work](../discuss-work/SKILL.md), with the supported routes as options; what a check supports, to [Verify Work](../verify-work/SKILL.md); a failure without a known cause, to Execute Work's [diagnose](../execute-work/references/diagnose.md); a selected review not yet run, reported for [Review Work](../review-work/SKILL.md).
|
|
54
|
+
|
|
55
|
+
## Stop
|
|
56
|
+
|
|
57
|
+
Stop and return the smallest blocking fact when:
|
|
58
|
+
|
|
59
|
+
- what a route's yes covers is unclear;
|
|
60
|
+
- live state differs from what was verified, reviewed or approved: changes, source commit, version, artifact, configuration or target;
|
|
61
|
+
- required evidence or a selected review is missing;
|
|
62
|
+
- a destination is unclear: remote, branch, base, pull-request target, registry, channel or environment;
|
|
63
|
+
- a conflict needs more than a mechanical resolution of both sides' settled intended behavior, such as a behavior, source-of-truth or owner decision; never end a conflict by taking ours or theirs.
|
|
64
|
+
|
|
65
|
+
## Report
|
|
66
|
+
|
|
67
|
+
End with the lines that apply:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Route: <route and stage, and what the yes covered>
|
|
71
|
+
Identity: <SHA and subject, branch and remote, pull-request URL, version and tag, artifact and target>
|
|
72
|
+
Evidence: <each check on the final state and what it shows; the selected review's outcome>
|
|
73
|
+
Not shown: <what this does not establish (pushed is not merged, merged not released, a prepared release not published, published not deployed); what went unverified>
|
|
74
|
+
Remaining: <unpushed or uncommitted work, pending CI or review, observation windows left, temporary machinery with its owner and cleanup, partial failures and recovery>
|
|
75
|
+
Next: <the next route as a question, and whose call it is>
|
|
76
|
+
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Branch Closeout
|
|
2
|
+
|
|
3
|
+
This reference covers a simple push, first, and then closing a branch or isolated checkout. The closeout part is judgment; its confirmation, ownership and conflict stops are binding. A verified branch does not authorize a merge or push, and a chosen integration route does not authorize branch deletion, worktree removal, release or deployment.
|
|
4
|
+
|
|
5
|
+
## Simple Push
|
|
6
|
+
|
|
7
|
+
Its stops and prohibitions are binding; the inspection commands are judgment.
|
|
8
|
+
|
|
9
|
+
This route is a **simple push**: inspected local commits from the current named branch to one explicit or established remote branch, with no force, deletion, tag publication, integration, pull request, release or deployment. When the request needs any of those, or a choice of how to integrate, share, preserve, rewrite or clean up branch state, use the branch routes below or [release](release.md) instead.
|
|
10
|
+
|
|
11
|
+
### Confirm What The Yes Covers
|
|
12
|
+
|
|
13
|
+
Confirm which commits are intended, the local branch, the destination remote and branch, and whether setting a new upstream is included. Do not infer a remote, destination branch, pull-request target or shared-branch policy when the wrong choice could affect collaborators.
|
|
14
|
+
|
|
15
|
+
### Inspect The Route
|
|
16
|
+
|
|
17
|
+
[push-route](../scripts/push-route.mjs) (`node <deliver-work-directory>/scripts/push-route.mjs [--remote <name>]`) reports the branch, upstream or destination, the commits it would send and the stop conditions below that local state shows, and prints the push command without running it. By hand:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git branch --show-current
|
|
21
|
+
git status --short --branch
|
|
22
|
+
git branch -vv
|
|
23
|
+
git remote -v
|
|
24
|
+
git log -1 --oneline --decorate
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
When an upstream exists, also:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git rev-parse --abbrev-ref --symbolic-full-name @{upstream}
|
|
31
|
+
git rev-list --left-right --count @{upstream}...HEAD
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Ahead and behind counts are only as fresh as the local remote-tracking reference; do not claim current remote state unless you observed it freshly.
|
|
35
|
+
|
|
36
|
+
Stop before pushing when:
|
|
37
|
+
|
|
38
|
+
- `HEAD` is detached;
|
|
39
|
+
- the destination or upstream is unclear;
|
|
40
|
+
- unexpected commits or dirty state change the route;
|
|
41
|
+
- protected or shared-branch policy disallows the push or leaves it unclear;
|
|
42
|
+
- local and observed upstream history diverge;
|
|
43
|
+
- the push would need force, deletion, tag publication or another separately controlled action.
|
|
44
|
+
|
|
45
|
+
### Push The Exact Branch
|
|
46
|
+
|
|
47
|
+
Use the established upstream when it clearly matches the approved route. Set a new upstream only when the remote and branch are explicit and the configuration change is part of the approved route. Push no other branches or tags. A force push is not a simple push: take an explicitly requested history rewrite to the branch routes below.
|
|
48
|
+
|
|
49
|
+
### Handle Rejection Without Escalation
|
|
50
|
+
|
|
51
|
+
If the push is rejected or fails, keep the complete result and check whether any remote update happened. Do not automatically pull, merge, rebase, force, change remotes or change destination; return authentication, divergence, policy or destination decisions to the user or to the branch routes below. A failed push does not invalidate the local commit.
|
|
52
|
+
|
|
53
|
+
### Check The Result
|
|
54
|
+
|
|
55
|
+
After a successful push, inspect `git status --short --branch` and `git branch -vv`, and report whether an upstream was set or changed. A push proves transfer to the observed destination, not a pull request, merge, release, deployment or passing remote CI.
|
|
56
|
+
|
|
57
|
+
## Inspect The Exact State
|
|
58
|
+
|
|
59
|
+
Before offering or executing a route, inspect:
|
|
60
|
+
|
|
61
|
+
- current branch, detached state, repository root and worktree ownership;
|
|
62
|
+
- the base branch or merge base that repository evidence supports;
|
|
63
|
+
- commits and diff relative to the base;
|
|
64
|
+
- staged, unstaged and untracked work;
|
|
65
|
+
- upstream, remote, and ahead or behind state;
|
|
66
|
+
- fresh verification, self-review and any selected independent review;
|
|
67
|
+
- CI, policy or repository gates for the intended route.
|
|
68
|
+
|
|
69
|
+
Do not infer the base, remote destination, pull-request target or workspace owner when the wrong choice could lose work or affect collaborators.
|
|
70
|
+
|
|
71
|
+
## Offer Only Supported Routes
|
|
72
|
+
|
|
73
|
+
The user decides whether to integrate locally and by which method, push or open a normal or draft pull request, keep the branch, worktree or dirty state, discard commits or uncommitted work, delete local or remote branches, rewrite or force-push history, and clean up a checkout or worktree.
|
|
74
|
+
|
|
75
|
+
Present only the routes the observed state supports; drop a route that is impossible, unsafe or irrelevant rather than forcing a fixed menu. Ask as [Discuss Work](../../discuss-work/SKILL.md)'s "Ask One Question" describes, with the supported routes as the options. Approval of one route covers only the scope shown and accepted. When a route needs a local commit, use the trunk's Commit steps; do not commit merely to make the branch look finished.
|
|
76
|
+
|
|
77
|
+
## State Readiness Honestly
|
|
78
|
+
|
|
79
|
+
Call a branch ready for its integration boundary only when the agreed outcome is clear, intended commits and remaining dirty state are known, fresh direct evidence supports the branch claim, self-review left no unresolved material issue, any selected independent review is resolved for the unchanged state, and no source conflict, owner decision, evidence gap or repository gate blocks the route. A feature-branch pass does not prove the integrated result.
|
|
80
|
+
|
|
81
|
+
Unverified or failing work may still be kept, handed off, or shared through an explicitly approved draft route: state the gaps, and do not call it ready to integrate.
|
|
82
|
+
|
|
83
|
+
## Hand Over For Acceptance
|
|
84
|
+
|
|
85
|
+
Goal: the user can accept or refuse the change from the hand-over alone, without rereading the conversation.
|
|
86
|
+
|
|
87
|
+
The pull-request description, or the final report when there is no pull request, carries:
|
|
88
|
+
|
|
89
|
+
- what done looks like, from the work agreement, against what was done, naming anything left out or changed on the way;
|
|
90
|
+
- choices the user has not seen, from Discuss Work's decision list: its `new`, `changed` and `default` items, each with where it shows;
|
|
91
|
+
- the evidence: each check run on the final state and its result;
|
|
92
|
+
- the review outcome: self-review only, or each independent review's judgment with every Rejected finding and why.
|
|
93
|
+
|
|
94
|
+
Build it from the Working Record ([Track Work](../../track-work/SKILL.md)) when one exists, not from memory. When the repository has a pull-request template or convention, fit these into it. Otherwise write a short briefing from which a reviewer who has the diff can accept or reject the change: why it exists; what changed; its scope, including what it deliberately leaves out; what else it could affect and how risky that is; and the hand-over above.
|
|
95
|
+
|
|
96
|
+
## Execute Only The Chosen Route
|
|
97
|
+
|
|
98
|
+
### Local Integration
|
|
99
|
+
|
|
100
|
+
1. Keep or resolve dirty state deliberately.
|
|
101
|
+
2. Refresh base evidence without overwriting local work.
|
|
102
|
+
3. Integrate with the repository's merge or rebase policy, without rewriting unrelated history.
|
|
103
|
+
4. Run the checks that prove the combined result on the resulting base.
|
|
104
|
+
5. Inspect the final log and status.
|
|
105
|
+
6. Remove branch or worktree state only when cleanup was part of the approved route and integration verification succeeded.
|
|
106
|
+
|
|
107
|
+
### Pull Request
|
|
108
|
+
|
|
109
|
+
Fits when review, CI, collaboration, protected branches or remote integration owns the next gate.
|
|
110
|
+
|
|
111
|
+
- Inspect remote and upstream state, then push only the intended commits to the accepted destination, as [Simple Push](#simple-push) checks them.
|
|
112
|
+
- Capture the target branch, commit range, residual risks, migrations, rollout or compatibility notes, and the reviewers or checks repository policy requires.
|
|
113
|
+
- Create or update the pull request by repository convention, with the hand-over as its description; mark incomplete or failing work as draft when that is the approved route.
|
|
114
|
+
- Keep the worktree when iteration or feedback may continue.
|
|
115
|
+
|
|
116
|
+
A pull-request URL proves creation, not readiness or merge.
|
|
117
|
+
|
|
118
|
+
### Keep For Later
|
|
119
|
+
|
|
120
|
+
Fits when the work is valid but integration is deferred, feedback is expected, or environment ownership prevents cleanup. Report the trunk's lines plus why the branch is kept and what would end the wait. Read Track Work's [handoff](../../track-work/references/handoff.md) only when continuing needs durable transfer context.
|
|
121
|
+
|
|
122
|
+
### Discard
|
|
123
|
+
|
|
124
|
+
Classify what is recoverable before deleting anything: uncommitted changes may be unrecoverable; local commits may be recoverable through the reflog for a limited time; pushed commits may affect collaborators; worktrees may be owned by a harness; deleting a remote branch reaches further than local cleanup. State exactly which commits, paths, branches, worktrees and remote state would be lost and what stays recoverable, and require explicit confirmation of that concrete scope. "Finish", "clean up", a menu number or approval of integration is not confirmation of broader destruction.
|
|
125
|
+
|
|
126
|
+
## Protect Workspace Ownership
|
|
127
|
+
|
|
128
|
+
Do not remove a worktree, checkout, session or harness state you did not create or are not authorized to manage; if ownership is unclear, keep it and report the uncertainty. Do not assume a detached checkout is disposable: an IDE, CI system, coding harness or worktree manager may own it, so offer only routes that environment supports, such as creating a named branch, keeping the checkout, exporting a patch, or asking the harness to close it.
|
|
129
|
+
|
|
130
|
+
## Return Conflicts And Failures
|
|
131
|
+
|
|
132
|
+
Deliver Work's Stop list says when a conflict stops the route. Stop and report it with its evidence also when resolving it would make a user-owned choice (Discuss Work), or choose between changed tests and changed implementation, incompatible migrations or data ownership, or two architecture directions; the next route may be Discuss Work, review, diagnosis, or a Spec or Plan revision.
|
|
133
|
+
|
|
134
|
+
Use Execute Work's [diagnose](../../execute-work/references/diagnose.md) when integrated checks fail without a supported cause. Take mixed or unrelated branch contents back to the [commit](commit.md) staging decisions. Keep branch state before handing to another activity.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Commit: Staging Decisions And Git State
|
|
2
|
+
|
|
3
|
+
This reference is judgment about what enters a commit and how to handle unusual Git state; each "do not" and each stop is binding. It grants no commit authority and no permission to alter work that is not yours.
|
|
4
|
+
|
|
5
|
+
## Classify The Changed Units
|
|
6
|
+
|
|
7
|
+
Classify at the path level only when the whole path has one role; otherwise classify hunks.
|
|
8
|
+
|
|
9
|
+
- **Commit content:** implements or proves the commit's claim.
|
|
10
|
+
- **Required companion:** tests, documentation, schema, metadata or generated output the same claim needs.
|
|
11
|
+
- **Related but separable:** useful, but not needed in this commit.
|
|
12
|
+
- **Unrelated or not yours:** outside the agreed outcome, or ownership not established.
|
|
13
|
+
- **Sensitive or unsafe:** secrets, credentials, personal data, environment files, debug output, destructive state or unexplained artifacts.
|
|
14
|
+
- **Unclear:** purpose, generator, ownership or evidence relationship not yet supported.
|
|
15
|
+
|
|
16
|
+
Only commit content and required companions belong. "Commit everything" may authorize broad inclusion; it does not remove the need to inspect unsafe, unclear or unexpectedly unrelated content.
|
|
17
|
+
|
|
18
|
+
## Protect Existing Staged State
|
|
19
|
+
|
|
20
|
+
Staged changes may belong to another workflow. Inspect them, but do not treat them as intended because they are staged. [commit-state](../scripts/commit-state.mjs) tells them from yours when its `snapshot` ran before your first edit. Do not silently absorb them, unstage or reset them, amend them into another commit, move them through a stash or temporary commit, or replace the index to get around the ambiguity.
|
|
21
|
+
|
|
22
|
+
When your changes and pre-existing staged work cannot be separated without touching ambiguous state, present the smallest safe options and ask which commit the user wants.
|
|
23
|
+
|
|
24
|
+
## Stage Partial Files Carefully
|
|
25
|
+
|
|
26
|
+
Stage only the intended hunks of a mixed file when their behavior and evidence hold on their own. Stop when:
|
|
27
|
+
|
|
28
|
+
- included and excluded hunks depend on each other;
|
|
29
|
+
- partial staging would leave an invalid intermediate state;
|
|
30
|
+
- checks ran against the combined working tree and excluded changes may have affected the result;
|
|
31
|
+
- the staged version differs materially from what was reviewed or verified.
|
|
32
|
+
|
|
33
|
+
A combined dirty worktree passing does not show that the staged subset is supported.
|
|
34
|
+
|
|
35
|
+
## Include Generated And Durable Files Deliberately
|
|
36
|
+
|
|
37
|
+
Include generated files, snapshots, lockfiles, formatter output or build artifacts only when repository convention or the agreed outcome requires them. Establish which command produced them, whether their change follows from the source change, whether they can be reviewed, and whether hand edits are prohibited. Do not include generated output merely because it changed, and do not hand-edit it unless the repository expects that.
|
|
38
|
+
|
|
39
|
+
A Spec, Plan, ADR, policy, public documentation file or release artifact has its own authority and maintenance rules. Include it only when its change is covered, belongs to the same commit, describes the same agreed behavior, and its own policy permits the update. Do not edit a durable artifact to make the implementation look coherent; settle contradictions through [Discuss Work](../../discuss-work/SKILL.md).
|
|
40
|
+
|
|
41
|
+
## Reject Sensitive Or Suspicious Content
|
|
42
|
+
|
|
43
|
+
Besides the trunk's never-stage list, stop before staging databases, dumps, recordings, personal data, unexplained binaries or archives, logs, traces, screenshots or debug output not explicitly required, and files whose inclusion could expose or lose user data. Do not delete or discard suspicious files to tidy up: preserve them and report their exact paths.
|
|
44
|
+
|
|
45
|
+
## Verify The Candidate
|
|
46
|
+
|
|
47
|
+
After staging, compare `git diff --cached`, `git diff` and `git status --short --branch`. The commit is narrow only when the index holds exactly the intended change, excluded work is untouched, remaining dirty state is understood, checks still support the staged version rather than only the combined worktree, and the report can name everything left behind.
|
|
48
|
+
|
|
49
|
+
## In-Progress Operations
|
|
50
|
+
|
|
51
|
+
A commit during a merge, rebase, cherry-pick or revert may complete or advance that operation instead of creating an ordinary commit. Establish which operation is active, whether this commit is meant to conclude it, whether every conflict and behavior decision is settled, who should continue it, and what must be verified on the result. Do not finish an operation merely because Git permits `commit`. Unmerged paths always stop an ordinary commit.
|
|
52
|
+
|
|
53
|
+
## Detached HEAD
|
|
54
|
+
|
|
55
|
+
A detached-`HEAD` commit can be hard to recover or push. Before committing, require an explicit way the commit will stay reachable; when a branch, integration or checkout ownership must be decided, use [branch closeout](branch-closeout.md). Do not silently create or switch branches.
|
|
56
|
+
|
|
57
|
+
## Amend And Empty Commits
|
|
58
|
+
|
|
59
|
+
Amend only when the user asked for it and the target commit, included changes, authorship effects and remote-history state are known. If the target may already be shared or pushed, ask before rewriting it. An empty commit needs an explicit request with a named purpose; an accidentally empty index is not one.
|
|
60
|
+
|
|
61
|
+
## Hooks
|
|
62
|
+
|
|
63
|
+
When a hook fails:
|
|
64
|
+
|
|
65
|
+
1. keep its complete output;
|
|
66
|
+
2. inspect `HEAD`, the index and the working tree;
|
|
67
|
+
3. check whether a commit was created despite the failure;
|
|
68
|
+
4. check whether the hook changed files or staged content;
|
|
69
|
+
5. send implementation, verification, policy or environment failures to their owner.
|
|
70
|
+
|
|
71
|
+
When a hook changes content, the state being committed is no longer the one that was checked: reinspect the whole diff and rerun the affected checks before retrying. Skip hooks with `--no-verify` only when the user asked for that exact bypass and repository policy permits it, and report which checks were skipped and which claims that leaves unsupported.
|
|
72
|
+
|
|
73
|
+
## Failed Commit Commands
|
|
74
|
+
|
|
75
|
+
After a failed or interrupted commit, inspect `git status`, `git diff`, `git diff --cached` and `git log -1 --oneline --decorate`; do not assume no commit was created or nothing changed. For identity, signing, credential-helper, editor, lock, filesystem or permission failures, do not change global or repository Git configuration without authority, do not delete lock files while their owner is unclear, do not retry through a materially different command without a supported cause, and report the exact blocker and the preserved state. Use Execute Work's [diagnose](../../execute-work/references/diagnose.md) when the cause stays unclear or a retry repeats the failure.
|
|
76
|
+
|
|
77
|
+
## Submodules
|
|
78
|
+
|
|
79
|
+
A parent commit records a submodule pointer, not the submodule's uncommitted contents. Inspect the pointer change, whether the nested worktree is dirty, whether this commit should include the pointer update, and whether nested changes have their own way to be preserved. Do not claim nested changes are preserved by committing only the parent.
|
|
80
|
+
|
|
81
|
+
## Return
|
|
82
|
+
|
|
83
|
+
Go back to the trunk's Commit steps only when the repository has one supported, recoverable candidate. Otherwise preserve the exact Git state and hand over to branch closeout, Execute Work's diagnose, or the activity whose responsibility changed.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Launch
|
|
2
|
+
|
|
3
|
+
This reference is judgment about changing production deliberately and keeping a safe recovery path; its "do not" lines are binding. Deployment changes what runs; rollout changes who or what is exposed. A build, merge, release or staging pass does not prove production behavior.
|
|
4
|
+
|
|
5
|
+
## Establish The Boundary
|
|
6
|
+
|
|
7
|
+
Carry out only the stages explicitly requested or approved through an inspected launch contract or accepted operational policy. Take deployment, exposure, rollback, destructive migration, the launch window, acceptable degradation, user communication and recovery direction to [Discuss Work](../../discuss-work/SKILL.md) while they remain the user's choice.
|
|
8
|
+
|
|
9
|
+
Publish a versioned artifact first through [release](release.md) when one is needed. Use Execute Work's [migration](../../execute-work/references/migration.md) as well when the launch moves data, traffic, consumers, configuration or compatibility contracts from an old path to a replacement.
|
|
10
|
+
|
|
11
|
+
## Define The Launch Contract
|
|
12
|
+
|
|
13
|
+
Before changing production, establish:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Outcome and affected users / systems:
|
|
17
|
+
Artifact / commit / configuration identity:
|
|
18
|
+
Target environment and owner:
|
|
19
|
+
Deployment versus exposure stages:
|
|
20
|
+
Dependencies and migration ordering:
|
|
21
|
+
Expected technical, user, business, and data signals:
|
|
22
|
+
Advance / hold / abort criteria:
|
|
23
|
+
Rollback or forward-recovery path:
|
|
24
|
+
Observation and post-launch verification:
|
|
25
|
+
Communication and escalation:
|
|
26
|
+
Approved stages and scope:
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
After each stage the next step is one of three, by criteria agreed before it began:
|
|
30
|
+
|
|
31
|
+
- **Advance** when required behavior and signals stay within bounds. The next stage still needs its yes unless the approved launch contract covers it.
|
|
32
|
+
- **Hold** when evidence is incomplete or a difference unexplained. Elapsed time is no reason to advance while a required signal is missing.
|
|
33
|
+
- **Abort** when a safety, data, security, compatibility or agreed service criterion fails: roll back, or recover forward where rollback is unsafe, without widening scope.
|
|
34
|
+
|
|
35
|
+
Take thresholds and observation periods from SLOs, baselines, policy or the owner's decision, never from universal percentages or windows; the owner decides consequential thresholds and acceptable degradation.
|
|
36
|
+
|
|
37
|
+
Feature flags, canaries, blue/green, shadow traffic and phased regions are options, not defaults; choose only what the platform and the accepted failure contract support, and do not adopt "every feature needs a flag" as a rule.
|
|
38
|
+
|
|
39
|
+
## Establish Readiness
|
|
40
|
+
|
|
41
|
+
Use only the lenses whose risk applies to this change; this is not a universal checklist. A required lens with missing evidence is not green.
|
|
42
|
+
|
|
43
|
+
- **Identity and ownership:** exact artifact, commit, image, configuration, migration and target are known; deployment, rollout, rollback, incident and communication owners are known where risk requires; production credentials come through approved channels, never prompts, logs or source.
|
|
44
|
+
- **Behavior and compatibility:** accepted requirements and critical user paths have fresh evidence; public APIs, clients, schemas, feature states and supported versions stay compatible or have an approved migration; failure, retry, idempotency, duplicate, ordering and recovery behavior are settled for consequential operations.
|
|
45
|
+
- **Data:** the authoritative source and migration ordering are explicit; backups, reconciliation, partial failure, restart, rollback and forward recovery are proved to the required level; privacy, retention, deletion, audit and permission obligations still hold.
|
|
46
|
+
- **Security and access:** threat-relevant changes received the required specialist or policy review; authentication, authorization, secret handling, untrusted input, dependency, network and privilege boundaries are verified where affected; telemetry and support tooling expose no secrets or unnecessary personal data. When a security-focused review is selected, read the [security risk lens](../../review-work/references/work.md#security-risk-lens).
|
|
47
|
+
- **Performance and capacity:** representative baseline and expected load are known where capacity can change; latency, throughput, saturation, queue, storage and dependency limits have evidence. Read [performance evidence](../../verify-work/references/runtime-evidence.md#performance) for readiness and improvement claims, and Execute Work's [diagnose](../../execute-work/references/diagnose.md#flaky-and-performance-failures) only when a regression lacks a supported cause.
|
|
48
|
+
- **Accessibility and user experience:** when interfaces change, verify the affected critical paths with the repository's design and accessibility authority and tooling: keyboard, focus, semantics, assistive technology, responsive, loading, empty, error and degraded states, where relevant.
|
|
49
|
+
- **Observability:** start from what operators must answer: is the new path used, succeeding, within latency and capacity bounds; why is a given request, job or migration failing; are data, queues, retries and dependencies healthy; can one operation be traced across components. Use structured logs for event detail, metrics for aggregate rate, error, duration or saturation, and traces for cross-component paths; keep metric dimensions bounded, and do not log secrets, tokens, full sensitive payloads or unrestricted personal identifiers. Verify telemetry itself by inducing or observing a safe known event and finding its signal, fields and alert routing.
|
|
50
|
+
- **CI/CD and environment:** the pipeline and target run the checks this change needs; artifacts are promoted, not rebuilt differently without approval; environment drift, secrets, migrations and deployment ordering are inspected; a failed or ambiguous pipeline step has a known retry or reconciliation contract. Provider-specific workflow syntax belongs to the repository or platform skill.
|
|
51
|
+
|
|
52
|
+
Confirm the artifact and configuration identity, required pre-production checks, recovery path, operational signals and any selected review before starting an approved stage. Do not deploy to obtain evidence that should exist safely before production. When only production can answer a question, first define an approved bounded learning rollout with its observation, hold, abort and recovery conditions.
|
|
53
|
+
|
|
54
|
+
## Deploy And Expose In Approved Stages
|
|
55
|
+
|
|
56
|
+
Separate operations when the platform permits: deploy inert code, configuration or infrastructure; verify health and compatibility; expose a bounded cohort, tenant, region or traffic segment; compare required signals with the accepted baseline; then advance, hold or abort.
|
|
57
|
+
|
|
58
|
+
For each stage, define:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Stage / cohort:
|
|
62
|
+
Action:
|
|
63
|
+
Expected signals:
|
|
64
|
+
Advance if:
|
|
65
|
+
Hold if:
|
|
66
|
+
Abort (roll back or recover forward) if:
|
|
67
|
+
Verification:
|
|
68
|
+
Owner:
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Then:
|
|
72
|
+
|
|
73
|
+
1. confirm artifact, configuration, target and current production state;
|
|
74
|
+
2. execute the bounded action once;
|
|
75
|
+
3. verify technical and user-visible behavior;
|
|
76
|
+
4. inspect telemetry, data integrity and unexpected side effects;
|
|
77
|
+
5. preserve anomalies and choose the next step before expanding exposure.
|
|
78
|
+
|
|
79
|
+
## Handle Failure And Recovery
|
|
80
|
+
|
|
81
|
+
Before rolling back, determine whether code, schema, data, messages, caches, clients or external effects make rollback unsafe or incomplete, and test or rehearse the recovery path to the level the risk warrants. Do not repeat migrations, jobs, publishes, configuration changes or exposure operations blindly. Preserve incident evidence. Do not weaken alerts, checks, thresholds or accepted behavior to declare the launch healthy.
|
|
82
|
+
|
|
83
|
+
## Verify The Production Outcome
|
|
84
|
+
|
|
85
|
+
Observe from the production boundary, as applicable:
|
|
86
|
+
|
|
87
|
+
- the intended artifact and configuration are active;
|
|
88
|
+
- critical user and failure paths behave as accepted;
|
|
89
|
+
- data, compatibility, privacy and permission invariants hold;
|
|
90
|
+
- telemetry is present, queryable, bounded and free of unexpected sensitive data;
|
|
91
|
+
- alerts, escalation and recovery routes work where required;
|
|
92
|
+
- temporary flags, adapters, dual writes, dashboards, elevated logging, permissions or support procedures have owners and cleanup conditions; route compatibility removal through Execute Work's migration.
|
|
93
|
+
|
|
94
|
+
A quiet dashboard is not evidence when telemetry is absent or broken. A launch is complete when the accepted exposure and observation contract is satisfied, not when a deployment command succeeds, and it does not authorize later migration removal, release publication or cleanup outside the approved scope.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Release
|
|
2
|
+
|
|
3
|
+
This reference is judgment about preparing and publishing a versioned artifact whose source, version, contents and destination agree; its "do not" lines are binding. A commit is not a release, a tag does not prove which artifact was built, a local build does not prove registry contents, and a published artifact is not deployed.
|
|
4
|
+
|
|
5
|
+
## Establish The Stage And Source
|
|
6
|
+
|
|
7
|
+
Carry out only the release stages explicitly requested or approved: preparing, tagging, publishing, deprecating, yanking or replacing are separate. Before editing, read the repository's release policy, versioning scheme, package metadata, changelog convention, release automation, supported branches, signing or provenance requirements, and the latest published versions.
|
|
8
|
+
|
|
9
|
+
Take these to [Discuss Work](../../discuss-work/SKILL.md) when policy and evidence do not settle them:
|
|
10
|
+
|
|
11
|
+
- whether to release, and which channel or audience receives it;
|
|
12
|
+
- compatibility or breaking-change classification;
|
|
13
|
+
- the version;
|
|
14
|
+
- credentials, registry, signing, provenance or remote-tag behavior;
|
|
15
|
+
- yanking, deprecating, replacing or republishing an artifact;
|
|
16
|
+
- release branches, history rewriting, or recovery from partial publication.
|
|
17
|
+
|
|
18
|
+
## Define The Release Contract
|
|
19
|
+
|
|
20
|
+
Before changing release state, establish:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
Release target and audience:
|
|
24
|
+
Source commit / branch:
|
|
25
|
+
Version and compatibility basis:
|
|
26
|
+
Artifacts and supported platforms:
|
|
27
|
+
Release notes / migration guidance:
|
|
28
|
+
Required checks and selected reviews:
|
|
29
|
+
Signing / provenance / checksums:
|
|
30
|
+
Publication destination and channel:
|
|
31
|
+
Failure and recovery behavior:
|
|
32
|
+
Post-publication verification:
|
|
33
|
+
Approved preparation and publication stages:
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Use the repository's declared versioning scheme; do not impose semantic versioning on a project that uses dates, trains, build numbers or another scheme. Classify by what consumers can observe, not by diff size: a small change can be breaking, and a large internal refactor may be compatible. When compatibility is uncertain, inspect the supported consumers and ask rather than choosing the smallest bump.
|
|
37
|
+
|
|
38
|
+
When consumers must move before a contract can be removed, use Execute Work's [migration](../../execute-work/references/migration.md). An additive replacement release may come before the migration; a release that removes a contract waits for the accepted migration and its removal proof.
|
|
39
|
+
|
|
40
|
+
## Prepare The Release
|
|
41
|
+
|
|
42
|
+
For approved preparation:
|
|
43
|
+
|
|
44
|
+
- confirm the source is a coherent, freshly verified commit and any selected review is resolved;
|
|
45
|
+
- reconcile version declarations, lockfiles, generated metadata and release notes through the repository's tooling, without hand-editing generated artifacts or duplicating version truth that a generator owns;
|
|
46
|
+
- write release notes for consumers, not a commit dump: added or changed behavior, fixed user-visible defects, deprecated and removed contracts, security impact without unsafe disclosure, migration and compatibility requirements, known limitations and unsupported targets;
|
|
47
|
+
- run the canonical build or package process from the intended source;
|
|
48
|
+
- inspect the exact artifacts that would be published;
|
|
49
|
+
- keep credentials and signing material out of prompts, logs, diffs and artifacts.
|
|
50
|
+
|
|
51
|
+
Propose branch, commit, public-documentation or migration work the release needs through Discuss Work unless the approved release scope includes it.
|
|
52
|
+
|
|
53
|
+
## Preflight The Exact Release
|
|
54
|
+
|
|
55
|
+
Before any irreversible remote action, verify the following. [release-preflight](../scripts/release-preflight.mjs) (`node <deliver-work-directory>/scripts/release-preflight.mjs [--version <x.y.z>]`) checks the local part: the version is valid and not older than the latest tag, its tag does not already exist elsewhere, the changelog has its entries, the tree is clean, and for an npm package what `npm pack --dry-run` would publish; the registry and remote it reports unavailable.
|
|
56
|
+
|
|
57
|
+
- source commit, branch and working-tree expectations;
|
|
58
|
+
- the version is valid, unused and consistent with policy;
|
|
59
|
+
- required tests, builds, package or install checks and compatibility checks;
|
|
60
|
+
- artifact contents: included and excluded files, entry points and permissions, generated code and source maps, dependency and lockfile state, licenses and notices, platform variants, and no debug, test, local configuration, credential or private files; use the package manager's dry-run or list command when available;
|
|
61
|
+
- names, sizes, checksums, signatures and provenance;
|
|
62
|
+
- release notes and migration guidance match the consumer impact;
|
|
63
|
+
- tag, registry, channel and destination identity;
|
|
64
|
+
- credentials and permissions work without exposing secrets.
|
|
65
|
+
|
|
66
|
+
Know the publication failure contract before publishing: which step first creates irreversible remote state, whether a version or tag can be retried safely, how to detect a publish that committed without acknowledgement, whether repair, deprecation, yank or replacement is supported, and who tells consumers. A dry run proves only the boundaries it exercises; name signing, registry, propagation or publication behavior that remains unverified.
|
|
67
|
+
|
|
68
|
+
## Publish Only The Approved Stage
|
|
69
|
+
|
|
70
|
+
Follow the repository's canonical order, and stop when source, version, tag, artifact, signing mode, channel or destination diverges. Do not publish from a dirty or different source state, or substitute a registry, channel, artifact or signing mode. When publication partly fails, identify which external effects committed before choosing to retry, repair, deprecate, replace or stop.
|
|
71
|
+
|
|
72
|
+
A trustworthy release connects each link: source commit, freshly verified state, version metadata, build invocation and environment, artifact digest, signature or provenance, immutable tag or release record, registry entry, and consumer-side install evidence. Name the links you could not establish instead of implying reproducibility.
|
|
73
|
+
|
|
74
|
+
## Verify From The Consumer Boundary
|
|
75
|
+
|
|
76
|
+
When publication is in scope, verify the actual public artifact by version or digest, from a clean environment that does not reuse the local checkout or cache:
|
|
77
|
+
|
|
78
|
+
- the tag resolves to the intended commit;
|
|
79
|
+
- version, channel and destinations are correct;
|
|
80
|
+
- checksums, signatures, provenance and contents match the inspected artifact;
|
|
81
|
+
- a clean install, download or launch works on supported targets;
|
|
82
|
+
- release notes and migration links resolve;
|
|
83
|
+
- no unexpected artifact, credential, local configuration or private file was published.
|
|
84
|
+
|
|
85
|
+
Do not call the release complete because the publish command exited successfully; unavailable propagation or consumer evidence leaves that claim unverified. Production deployment is the separate [launch](launch.md) route.
|