@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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Handoff
|
|
2
|
+
|
|
3
|
+
This reference is judgment, with the Rules below. A handoff preserves the point-in-time information another context needs to continue the agreed work without restarting discovery or changing its goal.
|
|
4
|
+
|
|
5
|
+
The Working Record keeps living task state. A handoff identifies that record, the relevant sources, and the transfer-specific facts the recipient would otherwise miss. Neither is authority, proof of completion, or a replacement for current user direction and live evidence. A recipient resumes through Track Work's [Recover After Context Loss](../SKILL.md#recover-after-context-loss): the handoff points to the record and never replaces it.
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
- When the destination would change durability, privacy, repository state, audience, or authority and the user has not chosen it, ask one question and wait. Never turn an ephemeral transfer into repository memory.
|
|
10
|
+
- If safe transfer would require inventing intent, approval, evidence, status, or destination, state what is missing instead. Use [Discuss Work](../../discuss-work/SKILL.md) when resolving it needs a user-owned choice.
|
|
11
|
+
- Exclude secrets, credentials, unrestricted personal data, and private payloads the continuation does not need. Do not promise access to unavailable sources or reconstruct their exact content from memory.
|
|
12
|
+
- A handoff changes no task or Slice state: it does not complete, block, abandon, or supersede either. Do not create a record merely because a handoff exists.
|
|
13
|
+
|
|
14
|
+
## Choose The Transfer Boundary
|
|
15
|
+
|
|
16
|
+
Identify the recipient, purpose, and available transfer mechanism before writing.
|
|
17
|
+
|
|
18
|
+
- **Ephemeral handoff:** use the response or host continuation mechanism for immediate transfer, including compaction. Use a temporary file only when the transfer needs it.
|
|
19
|
+
- **Repo-memory handoff:** use the repository's established destination when durable continuation documentation is requested or approved.
|
|
20
|
+
- **User-provided destination:** follow the requested safe location and format.
|
|
21
|
+
|
|
22
|
+
## Prepare From The Actual State
|
|
23
|
+
|
|
24
|
+
When a Working Record exists, make it sufficient first ([Prepare For A Context Boundary](../SKILL.md#prepare-for-a-context-boundary)). Then inspect only the relevant worktree, artifacts, processes, and evidence needed to describe what the recipient will encounter.
|
|
25
|
+
|
|
26
|
+
Preserve the work agreement separately from the immediate assignment: what outcome remains authorized, what this assignment covers, what is excluded, and when the user expects a return. Identify the assignment's source and any superseded instruction whose reuse would misdirect continuation. A recommendation to continue is not approval to finish the remaining task.
|
|
27
|
+
|
|
28
|
+
Use the host's safe boundary for ongoing operations; do not infer an unobserved result or interrupt a mutation to make a cleaner handoff. Partial work is a valid transfer state: preserve unverified edits, failing checks, unresolved causes, and residual effects honestly.
|
|
29
|
+
|
|
30
|
+
## Capture The Next Useful Continuation
|
|
31
|
+
|
|
32
|
+
Include only material information:
|
|
33
|
+
|
|
34
|
+
- the intended outcome, agreed scope, user-facing return condition, and defining sources;
|
|
35
|
+
- current task/Slice and route when present;
|
|
36
|
+
- completed and partial work, supporting evidence, and what remains unverified;
|
|
37
|
+
- relevant repository, worktree, artifact, configuration, or process identity;
|
|
38
|
+
- accepted decisions and their sources, later amendments, and remaining hypotheses;
|
|
39
|
+
- changed assumptions, consequential rejected approaches, and affected Spec or Plan sections;
|
|
40
|
+
- dependencies for remaining work and which are established versus unresolved;
|
|
41
|
+
- the next accepted action and the minimum sources needed for it, or a recommendation awaiting authority;
|
|
42
|
+
- blockers, selected checkpoints, and conditions requiring return rather than continuation.
|
|
43
|
+
|
|
44
|
+
Point to the current Working Record and accepted artifacts instead of duplicating their contents. A Plan preserves strategy; the record preserves actual work and deviations; the handoff preserves transfer-specific context, not a second mutable task narrative.
|
|
45
|
+
|
|
46
|
+
A newer summary is not necessarily a newer accepted decision. Distinguish source-backed changes from proposals; do not let "next" turn an optional follow-up into an obligation or carry a stronger claim than the evidence supports.
|
|
47
|
+
|
|
48
|
+
Include narrow dirty-state or process details when omission could cause loss, overwrite, duplicate execution, or false completion. Keep check outputs linked to the code or artifact and observer state they examined. Distinguish an actual prior observation from whether it still applies after later changes. A missing output is unavailable evidence, not a reason to invent or automatically repeat the run. Do not copy full diffs, logs, transcripts, or reviewer reports when exact recoverable pointers suffice.
|
|
49
|
+
|
|
50
|
+
## Templates
|
|
51
|
+
|
|
52
|
+
Use only the fields that change safe continuation; a template is not a requirement to create another document.
|
|
53
|
+
|
|
54
|
+
### Ephemeral Handoff
|
|
55
|
+
|
|
56
|
+
For the current response, a host continuation mechanism, or a temporary file.
|
|
57
|
+
|
|
58
|
+
```md
|
|
59
|
+
# Continuation Handoff
|
|
60
|
+
|
|
61
|
+
Generated: <optional reliable date or time>
|
|
62
|
+
Recipient / purpose:
|
|
63
|
+
|
|
64
|
+
## Goal And Owning Sources
|
|
65
|
+
- Agreed outcome and scope:
|
|
66
|
+
- User-facing return condition:
|
|
67
|
+
|
|
68
|
+
## Current State
|
|
69
|
+
- Route:
|
|
70
|
+
- Working Record, Spec, or Plan pointers:
|
|
71
|
+
- Relevant source or artifact identity:
|
|
72
|
+
|
|
73
|
+
## Completed Work And Evidence
|
|
74
|
+
- Result:
|
|
75
|
+
- Evidence:
|
|
76
|
+
- Supports:
|
|
77
|
+
- Does not support:
|
|
78
|
+
|
|
79
|
+
## Decisions And Authority
|
|
80
|
+
- Decision:
|
|
81
|
+
- Established by:
|
|
82
|
+
- Scope:
|
|
83
|
+
|
|
84
|
+
## Deviations Or Invalidated Assumptions
|
|
85
|
+
|
|
86
|
+
## Worktree, Process, Or Environment Watchouts
|
|
87
|
+
|
|
88
|
+
## Review Continuity
|
|
89
|
+
|
|
90
|
+
## Open Decisions, Evidence, Or Blockers
|
|
91
|
+
|
|
92
|
+
## Next Action
|
|
93
|
+
- Accepted action:
|
|
94
|
+
- Authority source:
|
|
95
|
+
- Required dependencies and whether they hold:
|
|
96
|
+
- Sources needed for this action:
|
|
97
|
+
|
|
98
|
+
Or, when not approved:
|
|
99
|
+
- Recommended route:
|
|
100
|
+
- Approval or decision needed:
|
|
101
|
+
|
|
102
|
+
## Stop Conditions
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
In Current State, preserve the current assignment and its source when older instructions could compete. In Completed Work And Evidence, distinguish the state actually checked from later changes whose verification remains unresolved.
|
|
106
|
+
|
|
107
|
+
### Repo-Memory Handoff
|
|
108
|
+
|
|
109
|
+
For durable project continuation in the repository's established location.
|
|
110
|
+
|
|
111
|
+
```md
|
|
112
|
+
# Project Handoff
|
|
113
|
+
|
|
114
|
+
Generated: <optional reliable date or time>
|
|
115
|
+
Recipient / purpose:
|
|
116
|
+
|
|
117
|
+
## Goal And Accepted Outcome
|
|
118
|
+
- Agreed scope and exclusions:
|
|
119
|
+
- User-facing return condition:
|
|
120
|
+
|
|
121
|
+
## Owning Sources
|
|
122
|
+
|
|
123
|
+
## Stable Context
|
|
124
|
+
|
|
125
|
+
## Current State And Evidence
|
|
126
|
+
|
|
127
|
+
## Working Record, Spec, And Plan Pointers
|
|
128
|
+
|
|
129
|
+
## Decisions, Authority, And Approval Scope
|
|
130
|
+
|
|
131
|
+
## Deviations, Invalidated Assumptions, Or Superseded Direction
|
|
132
|
+
|
|
133
|
+
## Review Continuity
|
|
134
|
+
|
|
135
|
+
## Open Decisions, Evidence Gaps, And Stop Conditions
|
|
136
|
+
|
|
137
|
+
## Next Accepted Action
|
|
138
|
+
- Action:
|
|
139
|
+
- Authority source:
|
|
140
|
+
- Required dependencies and whether they hold:
|
|
141
|
+
- Sources needed for this action:
|
|
142
|
+
|
|
143
|
+
Or:
|
|
144
|
+
|
|
145
|
+
## Recommended Next Route
|
|
146
|
+
- Route:
|
|
147
|
+
- Approval or decision needed:
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Do not copy living progress from a Working Record or turn directional Plan content into committed work.
|
|
151
|
+
|
|
152
|
+
### Learning Addendum
|
|
153
|
+
|
|
154
|
+
Include when an experiment, prototype, benchmark, or investigation changed the route. A recorded promotion does not grant production authority.
|
|
155
|
+
|
|
156
|
+
```md
|
|
157
|
+
Question:
|
|
158
|
+
Competing hypotheses or designs:
|
|
159
|
+
Evidence captured:
|
|
160
|
+
Result: discard | revise | promote | inconclusive
|
|
161
|
+
Exploratory artifacts retained:
|
|
162
|
+
Affected Working Record, Spec, Plan, or later work:
|
|
163
|
+
Next accepted action and authority, or recommended route:
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Review-Continuity Addendum
|
|
167
|
+
|
|
168
|
+
Include only when selected independent review state must survive the transfer. A new context or reviewer continues the existing review budget, as [Review Work](../../review-work/SKILL.md)'s Rules say.
|
|
169
|
+
|
|
170
|
+
```md
|
|
171
|
+
Review number: 1 | 2 | 3
|
|
172
|
+
Reviewed state identity:
|
|
173
|
+
Reviewer judgment: Pass | Non-blocking | Inconclusive | Blocking
|
|
174
|
+
Adjudicated judgment: Pass | Non-blocking | Inconclusive | Blocking
|
|
175
|
+
Material review items and evidence pointers:
|
|
176
|
+
Active-agent item adjudication:
|
|
177
|
+
- <item>: Accepted | Rejected | Open — <reason>
|
|
178
|
+
Accepted Blocking or Non-blocking Issues:
|
|
179
|
+
Material Open items:
|
|
180
|
+
Changed areas after review:
|
|
181
|
+
Follow-up review status and authority:
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Do not copy full reviewer output when a stable pointer exists.
|
|
185
|
+
|
|
186
|
+
## Report And Stop
|
|
187
|
+
|
|
188
|
+
Report the transfer shape and destination, sources preserved, actual state and evidence limits, next accepted action or pending recommendation, and material missing or intentionally omitted sensitive information.
|
|
189
|
+
|
|
190
|
+
At the selected pause or transfer boundary, stop after delivering the handoff.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Projects And Child Records
|
|
2
|
+
|
|
3
|
+
Read this when the work involves a registered task: a task ID such as `my-project/task-003`, a child record, a project, or the user asking to group tasks, split a task across parallel sessions, or move a record out of a repository.
|
|
4
|
+
|
|
5
|
+
The **Rules** below are binding; everything else is judgment.
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
- Create or link a project, import a record into one, and change a task's directories, only when the user asks, when the user confirms your proposal in a harness dialog, or when the user's auto-approve setting covers that change (Pi Task Memory).
|
|
10
|
+
- Write a record only from the session that owns it. A parent task's record is written by the parent's session; a child's record by the child's session.
|
|
11
|
+
- A child has no children.
|
|
12
|
+
- Remove a task or a project only when the user asks for it to be removed, or confirms your proposal in a harness dialog. Removal moves records to the trash under the Freeflow home; never empty the trash or delete records another way: that is the user's.
|
|
13
|
+
|
|
14
|
+
## What A Project Is
|
|
15
|
+
|
|
16
|
+
A project groups related tasks, possibly across several repositories. Its records live in a store under the Freeflow home (`FREEFLOW_HOME`, default `~/.freeflow`), at `projects/<project>/tasks/task-NNN-<short-name>/record.md`, outside any repository, so removing a worktree does not delete them. A registered record is not in the repository's `.freeflow/tasks/`, and that is expected. Each registered task has an ID, `<project>/task-NNN`, and every command that takes `--record` also takes the ID. The registry also records which session owns each record and which task is a child of which.
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
working-record.mjs project new --name <name> [--worktrees <dir>] create; link this repository
|
|
20
|
+
working-record.mjs project link --name <name> [--worktrees <dir>] link another repository
|
|
21
|
+
working-record.mjs project show [--name <name>] a project's tasks (default: this repository's)
|
|
22
|
+
working-record.mjs project list every project
|
|
23
|
+
working-record.mjs task create --title <t> --goal <g> [--parent <id>] a registered task, or a child
|
|
24
|
+
working-record.mjs task fanout --parent <id> --title <t> --goal <g> --agent <cmd> a child with its own worktree
|
|
25
|
+
working-record.mjs task here the task this directory belongs to
|
|
26
|
+
working-record.mjs task env --id <id> where a task's work happens
|
|
27
|
+
working-record.mjs task import --record <record.md> --project <name> move an existing record in
|
|
28
|
+
working-record.mjs task search --query <q> --id <id> --scope task|tree|project
|
|
29
|
+
working-record.mjs task remove --id <id> a task and its children, to the trash
|
|
30
|
+
working-record.mjs project remove --name <name> a project and its tasks, to the trash
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Run each command with `--help` before preparing its input. A record that is not registered keeps working where it is.
|
|
34
|
+
|
|
35
|
+
## Other Tasks In The Project
|
|
36
|
+
|
|
37
|
+
Each task keeps its own record. Read another task's record (`view resume --record <id>`, `task search --id <id> --scope project --query <words>`) when it bears on what you are about to decide or build; record what matters to this task in this task's own record, never in the other one.
|
|
38
|
+
|
|
39
|
+
## Where A Task's Work Happens
|
|
40
|
+
|
|
41
|
+
A registered task records its primary directory (the repository or worktree where its effects belong) and any additional directories; `task env` shows them with the current Git branch. When a session starts with no task in hand, `task here` names the task the directory belongs to: recover that one. Make the task's changes in its primary directory; work in another directory belongs to another workstream unless the user says otherwise.
|
|
42
|
+
|
|
43
|
+
## Child Records
|
|
44
|
+
|
|
45
|
+
Goal: parallel work on one task, each workstream with its own memory, and one writer per record.
|
|
46
|
+
|
|
47
|
+
A child is a record for one workstream of a task that runs in parallel in another interactive session the user starts. When the child will change files, create it with `task fanout`, which also creates its Git worktree on a branch named for it and copies the repository's personal Freeflow config. Pass `--agent` with the command that starts this host's agent (such as `claude` or `codex`); the output ends with a command for a new terminal. Give the user that command exactly. A child that only reads or researches needs no worktree: use `task create --parent <id>`. Most tasks never need a child. A subagent is not a child: it works inside its session, on that session's task, and needs no record.
|
|
48
|
+
|
|
49
|
+
After creating a child, record the delegation in the parent's record (for example as a Slice whose result is the child's). Read a child's progress with `view resume --record <child-id>` or `task search --scope tree`; when its result matters to the parent, record it in the parent as you would a finished Slice. The child's own session writes the child's record.
|
|
50
|
+
|
|
51
|
+
Owners are recorded on every host, but only a harness that gates writes enforces them. Without one, check `project show` before writing a registered record another session owns, and ask the user.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Working Record Format
|
|
2
2
|
|
|
3
|
-
This reference owns the exact Schema 4 shape: sections, fields, states, lifecycle transitions, and the command contract.
|
|
3
|
+
This reference owns the exact Schema 4 shape: sections, fields, states, lifecycle transitions, and the command contract. It defines format, not what is worth recording; [Track Work](../SKILL.md) owns that judgment.
|
|
4
4
|
|
|
5
5
|
## Task Directory
|
|
6
6
|
|
|
@@ -17,6 +17,8 @@ Each task has one directory:
|
|
|
17
17
|
|
|
18
18
|
`NNN` is three or more digits. A new task takes the next number after the highest existing one; numbers are never reused. `specs/`, `plans/`, and `sources/` are created only when needed; `init` creates `scratch/`. Nothing in `scratch/` is part of the record unless the record points to it, and it may be deleted when the task ends. The directory must be ignored by Git and untracked.
|
|
19
19
|
|
|
20
|
+
A registered task's directory lives in its project's store instead (`<Freeflow home>/projects/<project>/tasks/task-NNN-<short-name>/`, outside any repository; the store is marked by its `store.json`), with the same contents; see [Projects And Child Records](projects.md).
|
|
21
|
+
|
|
20
22
|
A Spec or Plan may instead live in the repository's own documentation; the record points to it either way.
|
|
21
23
|
|
|
22
24
|
## Skeleton
|
|
@@ -69,7 +71,7 @@ None
|
|
|
69
71
|
## Notes
|
|
70
72
|
```
|
|
71
73
|
|
|
72
|
-
The five top-level sections are fixed, in this order: Current Context, Current Work, Future Work, History, Notes. `### Recovery sources` is optional; records created before it existed remain valid without it.
|
|
74
|
+
The five top-level sections are fixed, in this order: Current Context, Current Work, Future Work, History, Notes. `### Recovery sources` is optional; records created before it existed remain valid without it. `### Work agreement` is optional and not in the skeleton: `init` writes it, directly after Goal, only when its input has one.
|
|
73
75
|
|
|
74
76
|
The header holds the task name, `Schema`, task `State`, and `Last updated`. `init` and every successful lifecycle command set `Last updated`; views, validation, failed commands, and direct edits do not. It records recency only, not validity or truth.
|
|
75
77
|
|
|
@@ -93,17 +95,32 @@ Structured entities use compact field rows:
|
|
|
93
95
|
|
|
94
96
|
## Current Context
|
|
95
97
|
|
|
96
|
-
Present understanding, as bullets under
|
|
98
|
+
Present understanding, as bullets under these seven headings, plus an optional Work agreement directly after Goal:
|
|
97
99
|
|
|
98
100
|
| Heading | Holds |
|
|
99
101
|
| --- | --- |
|
|
100
102
|
| Goal | The outcome or central question; not the current mechanism. |
|
|
103
|
+
| Work agreement (optional) | The current work agreement, as far as it is known: what done looks like, what the agent does without asking, what needs the user's yes first, where it comes back, and how long it holds. |
|
|
101
104
|
| What defines this task | Pointers to the artifacts that define the task, such as its Spec, Plan, issue, or user-supplied brief. Every entry is read on each recovery. |
|
|
102
105
|
| Settled | Facts and accepted understanding that still affect the work. |
|
|
103
106
|
| Tentative | Hypotheses and provisional approaches. |
|
|
104
107
|
| Open | Unresolved questions that could change the work. |
|
|
105
108
|
| Current direction | The remaining approach and why; not a history of completed work. |
|
|
106
|
-
| Boundaries | Scope exclusions, constraints, evidence limits, user-facing return conditions, and separately controlled actions. |
|
|
109
|
+
| Boundaries | Scope exclusions, constraints, evidence limits, user-facing return conditions, and separately controlled actions. When the record has a Work agreement, return conditions and separately controlled actions belong there, and Boundaries keeps the rest. |
|
|
110
|
+
|
|
111
|
+
Start each line with the lead words for the part it states: `Done when`, `Without asking:`, `Ask first:`, `Back`, `Holds until`. Write only the parts that are known; one line is often enough, and `validate` does not check the lead words. Each line that rests on the user's reply quotes it, beside what it answered:
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
### Work agreement
|
|
115
|
+
|
|
116
|
+
- Done when the reported bug is fixed and its PR is open.
|
|
117
|
+
- Without asking: fix it, commit on a branch, open the PR. You said "yeah, do that" to that route (2026-10-12).
|
|
118
|
+
- Ask first: merging, anything outside the bug.
|
|
119
|
+
- Back at the PR.
|
|
120
|
+
- Holds until the PR merges.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The heading is never empty: omit it until something is agreed. `validate` rejects it when it is empty or anywhere but directly after Goal.
|
|
107
124
|
|
|
108
125
|
Keep only pointers under `What defines this task`; accepted choices go in Decisions and constraints in Boundaries. Change Current Context only when present meaning changes; a lifecycle transition alone does not require it. Remove narration once its consequence is recorded elsewhere.
|
|
109
126
|
|
|
@@ -154,10 +171,13 @@ Current Work holds one Current Slice or `None`, optional Recovery sources, and o
|
|
|
154
171
|
- Resumed — resolution source: ...
|
|
155
172
|
- Blocker — why unsafe: ...; required resolution: ...
|
|
156
173
|
- Contradiction — ...
|
|
157
|
-
- Review —
|
|
174
|
+
- Review gate — mode: auto | off | always; tier: ...; because: <trigger> | no trigger; result: dispatched | proposed | skipped
|
|
175
|
+
- Review — round: R1 | R2 | R3; reviewer: <model> (<family>); judgment: ...; Accepted: <n>; Rejected: <n>; Open: <n>; reviewed: <commit or version>; report: <path>; effect: ...
|
|
158
176
|
- Correction — ...
|
|
159
177
|
```
|
|
160
178
|
|
|
179
|
+
A Review entry is written after adjudication, one per independent review, so outcomes and rounds can be counted later; its report and brief live in the task's `scratch/reviews/` (`R1-brief.md`, `R1-report.md`). Self-review writes no Review entry.
|
|
180
|
+
|
|
161
181
|
An Evidence entry identifies the state it observed well enough to tell it apart from later versions. When later edits leave a result's applicability unresolved, say so rather than carrying the earlier result forward. Append counterevidence as a new entry instead of rewriting the earlier one. A missing output is unavailable evidence, not proof the check never ran. Label a report you did not observe as a report.
|
|
162
182
|
|
|
163
183
|
When no Slice is current, the section contains the single line `None`.
|
|
@@ -217,13 +237,7 @@ A proposed Checkpoint has no ID in its heading (`### Checkpoint — <title>`). R
|
|
|
217
237
|
|
|
218
238
|
An accepted Checkpoint leaves Future Work only through `checkpoint close`; never drop one by editing.
|
|
219
239
|
|
|
220
|
-
|
|
221
|
-
| --- | --- | --- |
|
|
222
|
-
| `preserve` | Save a recoverable point: commit, draft version, snapshot. | `local_commit` |
|
|
223
|
-
| `publish` | Make work available beyond the workspace: push, pull request, publication, sending. | |
|
|
224
|
-
| `review` | Independent judgment of the work. | `independent_review` |
|
|
225
|
-
| `decision` | A user-owned choice that later work depends on. | `user_decision` |
|
|
226
|
-
| `continuity` | A planned pause, handoff, or transfer. | |
|
|
240
|
+
`Type` is one of the five in Track Work's Checkpoint table: `preserve`, `publish`, `review`, `decision`, `continuity`. Earlier names are still read: `local_commit` as `preserve`, `independent_review` as `review`, `user_decision` as `decision`.
|
|
227
241
|
|
|
228
242
|
## History
|
|
229
243
|
|
|
@@ -234,7 +248,7 @@ Three subsections in this order: Decisions, Checkpoints, Slices. History is appe
|
|
|
234
248
|
```markdown
|
|
235
249
|
#### D-001 — Keep the Markdown record canonical
|
|
236
250
|
- State: active
|
|
237
|
-
- Decision: record.md remains the canonical task
|
|
251
|
+
- Decision: record.md remains the canonical task record.
|
|
238
252
|
- Established by: The user's accepted direction on 2026-09-25.
|
|
239
253
|
- Rationale: Agents need one readable recovery surface.
|
|
240
254
|
- Consequences: Views project the same file.
|
|
@@ -257,7 +271,7 @@ A closed Checkpoint keeps its future fields and adds `Result` and `Task effect`.
|
|
|
257
271
|
|
|
258
272
|
A closed Slice keeps `Intended result` and, when present, `Type`, `Authority source`, and `Reopened from`. It adds `Result`, `Evidence and limits`, and `Task effect`. `State` is `completed`, `blocked`, or `abandoned`; `Resume when` is required for blocked and `Reason` for abandoned. `Residual effects` is optional.
|
|
259
273
|
|
|
260
|
-
Closing does not keep Scope, Stop condition, Starting state, Dependencies, Material updates, or Recovery sources. Anything among them that still matters belongs in `Evidence and limits` or `Task effect` before closing.
|
|
274
|
+
Closing does not keep Scope, Stop condition, Starting state, Dependencies, Material updates, or Recovery sources. Anything among them that still matters belongs in `Evidence and limits` or `Task effect` before closing; Review entries always do, copied whole, so review outcomes stay countable.
|
|
261
275
|
|
|
262
276
|
| State | Meaning |
|
|
263
277
|
| --- | --- |
|
|
@@ -348,14 +362,18 @@ Edit directly:
|
|
|
348
362
|
|
|
349
363
|
Never edit directly: IDs, `State` fields, which section an entity is in, or any terminal History entry apart from Corrections. `validate` checks structure only; it cannot detect a hand-made state change or a deleted entry, so those edits are forbidden rather than checked.
|
|
350
364
|
|
|
351
|
-
After editing headings, fields, or entity structure, run `validate --record <record.md>`. Prose-only edits need no validation.
|
|
365
|
+
After editing headings, fields, or entity structure, run `validate --record <record.md>`. Prose-only edits need no validation. `validate` also lists Material updates pointers (paths from the repository root or the task folder, and commits) that do not resolve, as warnings, since a line may name a planned path or a commit not fetched yet; `--strict` fails on those an Evidence or Result line names. Pointers outside the repository are listed, not checked.
|
|
352
366
|
|
|
353
367
|
## Views
|
|
354
368
|
|
|
355
|
-
|
|
369
|
+
Views are plain Markdown and change nothing.
|
|
370
|
+
|
|
371
|
+
- `view resume` returns the header, Current Context, active Decisions, Current Work, Future Work, a History index, and Notes. The index has one line per closed History entry (superseded and retired Decisions, closed Checkpoints, closed Slices) in record order: ID, state, `by D-NNN` for a superseded Decision, `recorded retroactively` for a `slice record` entry, the title, and `(corrected)` when the entry has Corrections. It is the view to use while the conversation is still in context.
|
|
372
|
+
- `view recover` returns the `resume` view, then each `What defines this task` artifact and Recovery source with its trigger, whether its pointer resolves and its size, then live Git state (branch, HEAD, uncommitted paths, commits since `Last updated`) and where it disagrees with the record: a branch the record names that HEAD is not on, or a commit the Current Slice names that HEAD's history lacks. It is the recovery view after context loss.
|
|
373
|
+
- `view entry <ID> [<ID> ...]` returns the named `S-NNN`, `C-NNN`, or `D-NNN` entries exactly as stored, in the order given. An unknown ID prints nothing and fails.
|
|
374
|
+
- `view full` returns the file exactly as stored. It does not require the record to be valid, so use it to inspect malformed or unsupported records, after an uncertain write, or for an audit.
|
|
356
375
|
|
|
357
|
-
|
|
358
|
-
- `view resume` returns the header, Current Context, active Decisions, Current Work, Future Work, and Notes. It omits terminal History and is not sufficient after context loss.
|
|
376
|
+
`view resume`, `view recover` and `view entry` require a valid Schema 4 record.
|
|
359
377
|
|
|
360
378
|
## Notes
|
|
361
379
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ACTIVE_SLICE_FIELDS,
|
|
3
3
|
CHECKPOINT_TYPES,
|
|
4
|
+
CONTEXT_HEADINGS,
|
|
4
5
|
CURRENT_SLICE_STATES,
|
|
5
6
|
DECISION_FIELDS,
|
|
6
7
|
DECISION_STATES,
|
|
@@ -19,6 +20,7 @@ import {
|
|
|
19
20
|
SLICE_TYPES,
|
|
20
21
|
TASK_STATES,
|
|
21
22
|
TOP_LEVEL_SECTIONS,
|
|
23
|
+
WORK_AGREEMENT_HEADING,
|
|
22
24
|
isCalendarDate,
|
|
23
25
|
joinLines,
|
|
24
26
|
nextId,
|
|
@@ -255,24 +257,20 @@ function parseTopLevelSections(lines) {
|
|
|
255
257
|
);
|
|
256
258
|
}
|
|
257
259
|
|
|
260
|
+
const CONTEXT_LAYOUTS = [CONTEXT_HEADINGS, [CONTEXT_HEADINGS[0], WORK_AGREEMENT_HEADING, ...CONTEXT_HEADINGS.slice(1)]];
|
|
261
|
+
|
|
258
262
|
function parseContext(lines, section) {
|
|
259
263
|
const headings = findHeadings(lines, section.start, section.end, 3);
|
|
260
|
-
|
|
261
|
-
|
|
264
|
+
const titles = headings.map((heading) => heading.title);
|
|
265
|
+
if (!CONTEXT_LAYOUTS.some((layout) => layout.join("\n") === titles.join("\n")))
|
|
266
|
+
fail(
|
|
267
|
+
"invalid-context",
|
|
268
|
+
`Current Context must contain the seven canonical headings, with an optional ${WORK_AGREEMENT_HEADING} directly after Goal`,
|
|
269
|
+
);
|
|
262
270
|
const statements = new Map();
|
|
263
271
|
for (let index = 0; index < headings.length; index += 1) {
|
|
264
|
-
const expected = [
|
|
265
|
-
"Goal",
|
|
266
|
-
"What defines this task",
|
|
267
|
-
"Settled",
|
|
268
|
-
"Tentative",
|
|
269
|
-
"Open",
|
|
270
|
-
"Current direction",
|
|
271
|
-
"Boundaries",
|
|
272
|
-
][index];
|
|
273
|
-
if (headings[index].title !== expected) fail("invalid-context", `Expected Current Context heading ${expected}`);
|
|
274
272
|
const end = headings[index + 1]?.index ?? section.end;
|
|
275
|
-
statements.set(
|
|
273
|
+
statements.set(titles[index], { headingIndex: headings[index].index, start: headings[index].index + 1, end });
|
|
276
274
|
}
|
|
277
275
|
return { ...section, headings: statements };
|
|
278
276
|
}
|
|
@@ -517,6 +515,12 @@ export function validateDocument(document) {
|
|
|
517
515
|
const goal = context.headings.get("Goal");
|
|
518
516
|
if (!hasMeaningfulContent(document.lines, goal.start, goal.end))
|
|
519
517
|
fail("missing-field", "Current Context Goal must contain meaningful content");
|
|
518
|
+
const agreement = context.headings.get(WORK_AGREEMENT_HEADING);
|
|
519
|
+
if (agreement && !hasMeaningfulContent(document.lines, agreement.start, agreement.end))
|
|
520
|
+
fail(
|
|
521
|
+
"missing-field",
|
|
522
|
+
`Current Context ${WORK_AGREEMENT_HEADING} must contain meaningful content; omit the heading until something is agreed`,
|
|
523
|
+
);
|
|
520
524
|
if (!hasMeaningfulContent(document.lines, current.nextAction.start, current.nextAction.end))
|
|
521
525
|
fail("missing-field", "Next useful action must contain meaningful content");
|
|
522
526
|
for (const block of allBlocks(document)) {
|
|
@@ -10,6 +10,8 @@ export const CONTEXT_HEADINGS = [
|
|
|
10
10
|
"Current direction",
|
|
11
11
|
"Boundaries",
|
|
12
12
|
];
|
|
13
|
+
// Optional: allowed only directly after Goal, and never empty.
|
|
14
|
+
export const WORK_AGREEMENT_HEADING = "Work agreement";
|
|
13
15
|
export const HISTORY_HEADINGS = ["Decisions", "Checkpoints", "Slices"];
|
|
14
16
|
|
|
15
17
|
export const TASK_STATES = new Set(["active", "paused", "completed", "abandoned"]);
|