projectkeeper 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/LICENSE +21 -0
- package/README.md +283 -2
- package/README.zh-CN.md +285 -0
- package/THIRD_PARTY_NOTICES.md +53 -0
- package/bin/pk.mjs +6 -0
- package/bin/postinstall.mjs +5 -0
- package/bin/strip-types.mjs +28 -0
- package/package.json +68 -4
- package/patches/README.md +111 -0
- package/patches/pi-ai-0.85.0.ts +122 -0
- package/patches/pi-ai-0.87.1.ts +122 -0
- package/scripts/apply-pi-streaming-patch.ts +86 -0
- package/skills/clerk/coverage/SKILL.md +35 -0
- package/skills/clerk/cross-check/SKILL.md +118 -0
- package/skills/clerk/deepen-dispatch/SKILL.md +69 -0
- package/skills/clerk/lane-follow-up/SKILL.md +94 -0
- package/skills/clerk/lane-plan/SKILL.md +107 -0
- package/skills/clerk/lane-slot/SKILL.md +113 -0
- package/skills/clerk/lane-topic/SKILL.md +116 -0
- package/skills/clerk/orientation/SKILL.md +160 -0
- package/skills/clerk/reconcile/SKILL.md +77 -0
- package/skills/clerk/skeleton-dispatch/SKILL.md +43 -0
- package/skills/clerk/spot-check/SKILL.md +52 -0
- package/skills/clerk/synthesis/SKILL.md +65 -0
- package/skills/table-follow-up/SKILL.md +42 -0
- package/src/cli.ts +319 -0
- package/src/codemap/README.md +13 -0
- package/src/codemap/engines.ts +102 -0
- package/src/codemap/facts.ts +504 -0
- package/src/context/agent-entry.ts +232 -0
- package/src/context/ask.ts +97 -0
- package/src/context/assemble.ts +1058 -0
- package/src/context/code-source.ts +103 -0
- package/src/context/k-briefs.ts +114 -0
- package/src/context/lineage.ts +100 -0
- package/src/context/object-brief.ts +300 -0
- package/src/context/owner-words.ts +191 -0
- package/src/context/pack-fixture.ts +342 -0
- package/src/context/project-rules.ts +160 -0
- package/src/intake/intake.ts +392 -0
- package/src/intake/material-rules.ts +166 -0
- package/src/intake/removal.ts +316 -0
- package/src/intake/skipped.ts +72 -0
- package/src/keeper/adjustment.ts +565 -0
- package/src/keeper/bounds/boundary.ts +509 -0
- package/src/keeper/bounds/command.ts +1665 -0
- package/src/keeper/bounds/paths.ts +164 -0
- package/src/keeper/bounds/reads.ts +718 -0
- package/src/keeper/bounds/shell-write-guard.ts +521 -0
- package/src/keeper/capabilities.ts +136 -0
- package/src/keeper/clerk-steps.ts +151 -0
- package/src/keeper/clerk-tools.ts +1424 -0
- package/src/keeper/conversation.ts +253 -0
- package/src/keeper/evidence.ts +662 -0
- package/src/keeper/fake-provider.ts +132 -0
- package/src/keeper/held.ts +15 -0
- package/src/keeper/history-tools.ts +163 -0
- package/src/keeper/jobs/answering.ts +53 -0
- package/src/keeper/key-check.ts +105 -0
- package/src/keeper/ledger-tools.ts +295 -0
- package/src/keeper/link-check.ts +185 -0
- package/src/keeper/merge.ts +260 -0
- package/src/keeper/note-origin.ts +56 -0
- package/src/keeper/numbers-check.ts +102 -0
- package/src/keeper/open-in-pi.ts +57 -0
- package/src/keeper/organize/absence.ts +266 -0
- package/src/keeper/organize/carried-on.ts +214 -0
- package/src/keeper/organize/clerk-coverage.ts +293 -0
- package/src/keeper/organize/clerk-prompts.ts +132 -0
- package/src/keeper/organize/clerk.ts +1395 -0
- package/src/keeper/organize/coverage-gate.ts +19 -0
- package/src/keeper/organize/coverage-tools.ts +765 -0
- package/src/keeper/organize/entries.ts +153 -0
- package/src/keeper/organize/entry-gate.ts +289 -0
- package/src/keeper/organize/fill-tools.ts +718 -0
- package/src/keeper/organize/follow-up.ts +280 -0
- package/src/keeper/organize/generation-check.ts +504 -0
- package/src/keeper/organize/graph.ts +230 -0
- package/src/keeper/organize/lane-tools.ts +289 -0
- package/src/keeper/organize/looked-tools.ts +54 -0
- package/src/keeper/organize/materials.ts +243 -0
- package/src/keeper/organize/owner-lines.ts +493 -0
- package/src/keeper/organize/place-tools.ts +216 -0
- package/src/keeper/organize/placement-inference.ts +1045 -0
- package/src/keeper/organize/placement-time.ts +320 -0
- package/src/keeper/organize/placing.ts +821 -0
- package/src/keeper/organize/positioning.ts +33 -0
- package/src/keeper/organize/readiness.ts +47 -0
- package/src/keeper/organize/reading.ts +401 -0
- package/src/keeper/organize/round-blocks.ts +65 -0
- package/src/keeper/organize/round-news.ts +164 -0
- package/src/keeper/organize/round-open.ts +586 -0
- package/src/keeper/organize/schedule-state.ts +39 -0
- package/src/keeper/organize/schedule.ts +137 -0
- package/src/keeper/organize/service.ts +409 -0
- package/src/keeper/organize/skills.ts +116 -0
- package/src/keeper/organize/slots.ts +85 -0
- package/src/keeper/organize/stage-gate.ts +175 -0
- package/src/keeper/organize/stage-tools.ts +471 -0
- package/src/keeper/organize/standing-notes.ts +141 -0
- package/src/keeper/organize/table-follow-up.ts +330 -0
- package/src/keeper/organize/takeover-clerk.ts +832 -0
- package/src/keeper/organize/takeover-state.ts +103 -0
- package/src/keeper/organize/takeover.ts +216 -0
- package/src/keeper/organize/update-pending.ts +535 -0
- package/src/keeper/organize/workbench-placement.ts +92 -0
- package/src/keeper/own-keys.ts +114 -0
- package/src/keeper/owner-text.ts +165 -0
- package/src/keeper/project-folder.ts +334 -0
- package/src/keeper/prompts.ts +101 -0
- package/src/keeper/references.ts +177 -0
- package/src/keeper/relook/compose.ts +120 -0
- package/src/keeper/relook/prompts.ts +36 -0
- package/src/keeper/roles.ts +259 -0
- package/src/keeper/round-tools.ts +227 -0
- package/src/keeper/route.ts +148 -0
- package/src/keeper/rules.ts +97 -0
- package/src/keeper/runtime.ts +1858 -0
- package/src/keeper/scope-tools.ts +194 -0
- package/src/keeper/sendback-text.ts +83 -0
- package/src/keeper/step-timing.ts +207 -0
- package/src/keeper/testing/clerk-script.ts +212 -0
- package/src/keeper/testing/streaming-arguments.ts +57 -0
- package/src/keeper/tools.ts +2340 -0
- package/src/keeper/utterance-tools.ts +64 -0
- package/src/keeper/verbatim.ts +397 -0
- package/src/ledger/adapters.ts +186 -0
- package/src/ledger/arrangements.ts +257 -0
- package/src/ledger/blame.ts +58 -0
- package/src/ledger/code-engine-child.ts +69 -0
- package/src/ledger/code-engine.ts +548 -0
- package/src/ledger/code.ts +607 -0
- package/src/ledger/docs.ts +294 -0
- package/src/ledger/git-read.ts +321 -0
- package/src/ledger/index.ts +1850 -0
- package/src/ledger/item-range.ts +16 -0
- package/src/ledger/lines.ts +328 -0
- package/src/ledger/numbering.ts +269 -0
- package/src/ledger/ranges.ts +74 -0
- package/src/ledger/rebuild-worker.ts +15 -0
- package/src/ledger/rebuild.ts +387 -0
- package/src/ledger/repo-scan.ts +181 -0
- package/src/ledger/schema.ts +450 -0
- package/src/ledger/sessions.ts +134 -0
- package/src/ledger/text-scan.ts +466 -0
- package/src/ledger/time.ts +185 -0
- package/src/ledger/ts-symbols.ts +180 -0
- package/src/ledger/views.ts +377 -0
- package/src/mcp/server.ts +127 -0
- package/src/mcp/tools.ts +187 -0
- package/src/model/ids.ts +23 -0
- package/src/model/k-types.ts +912 -0
- package/src/model/time.ts +85 -0
- package/src/model/types.ts +1382 -0
- package/src/model/views-k.ts +707 -0
- package/src/model/vocab.ts +269 -0
- package/src/process/analysis.ts +79 -0
- package/src/process/breakpoint-candidates.ts +383 -0
- package/src/process/breakpoints.ts +746 -0
- package/src/process/claim-check.ts +295 -0
- package/src/process/delivery-links.ts +52 -0
- package/src/process/facts.ts +487 -0
- package/src/process/generations.ts +138 -0
- package/src/process/index.ts +243 -0
- package/src/process/integration.ts +128 -0
- package/src/process/placement.ts +107 -0
- package/src/process/plan.ts +276 -0
- package/src/process/sendbacks.ts +244 -0
- package/src/process/text.ts +185 -0
- package/src/process/units.ts +543 -0
- package/src/process/unnumbered.ts +431 -0
- package/src/process/work.ts +884 -0
- package/src/scope/candidates.ts +86 -0
- package/src/scope/decisions.ts +229 -0
- package/src/scope/discover.ts +741 -0
- package/src/scope/ignore.ts +126 -0
- package/src/scope/ignored-place.ts +93 -0
- package/src/scope/skip.ts +161 -0
- package/src/scope/toolchain.ts +180 -0
- package/src/scope/worktree.ts +187 -0
- package/src/server/api.ts +549 -0
- package/src/server/app.ts +595 -0
- package/src/server/drafts-api.ts +170 -0
- package/src/server/folders-api.ts +243 -0
- package/src/server/graph-view.ts +639 -0
- package/src/server/http.ts +224 -0
- package/src/server/k-agent-api.ts +56 -0
- package/src/server/k-rounds-d99.ts +91 -0
- package/src/server/k-views.ts +405 -0
- package/src/server/keeper-page.ts +446 -0
- package/src/server/keys-api.ts +239 -0
- package/src/server/project-folder-api.ts +104 -0
- package/src/server/vendor.ts +14 -0
- package/src/server/workbench-content.ts +561 -0
- package/src/sources/anchor.ts +129 -0
- package/src/sources/files.ts +267 -0
- package/src/sources/gitobs.ts +41 -0
- package/src/sources/history.ts +231 -0
- package/src/sources/scan-worker.ts +10 -0
- package/src/sources/sessions/locate.ts +292 -0
- package/src/sources/sessions/read.ts +346 -0
- package/src/sources/sessions/scope.ts +42 -0
- package/src/sources/sessions/utterances.ts +223 -0
- package/src/sources/watch.ts +215 -0
- package/src/store/json-file.ts +50 -0
- package/src/store/paths.ts +39 -0
- package/src/store/project-store.ts +295 -0
- package/src/store/versions.ts +172 -0
- package/src/store/workspace.ts +216 -0
- package/src/table/check.ts +333 -0
- package/src/table/follow-up-tools.ts +30 -0
- package/src/table/follow-up.ts +344 -0
- package/src/table/import.ts +610 -0
- package/src/table/project-home.ts +61 -0
- package/src/table/sessions.ts +168 -0
- package/src/table/takeover.ts +483 -0
- package/src/util/git-check.ts +29 -0
- package/src/util/git.ts +411 -0
- package/src/util/own-ts.ts +15 -0
- package/src/util/paths.ts +225 -0
- package/template/FILLING-IN.md +148 -0
- package/template/examples/papertrail.json +747 -0
- package/template/projectkeeper.schema.json +1001 -0
- package/ui/app.js +1135 -0
- package/ui/failures.js +82 -0
- package/ui/flyout.js +120 -0
- package/ui/folder-chooser.js +264 -0
- package/ui/glossary.js +156 -0
- package/ui/graph-fit.js +157 -0
- package/ui/graph-material.js +61 -0
- package/ui/graph-palette.js +109 -0
- package/ui/graph-tools.js +62 -0
- package/ui/graph.js +1712 -0
- package/ui/index.html +31 -0
- package/ui/k/code-view.js +230 -0
- package/ui/k/draft-view.js +93 -0
- package/ui/k/k-views.css +224 -0
- package/ui/k/round-tree.js +450 -0
- package/ui/k/scope-k.js +159 -0
- package/ui/k-data.js +118 -0
- package/ui/k-fold.js +106 -0
- package/ui/k-process.css +302 -0
- package/ui/k-process.js +934 -0
- package/ui/keeper-activity.js +175 -0
- package/ui/keeper-view.js +801 -0
- package/ui/keeper.css +101 -0
- package/ui/key-order.js +62 -0
- package/ui/list-fold.js +67 -0
- package/ui/markdown.d.ts +21 -0
- package/ui/markdown.js +472 -0
- package/ui/placement.d.ts +92 -0
- package/ui/placement.js +445 -0
- package/ui/popover-place.d.ts +16 -0
- package/ui/popover-place.js +89 -0
- package/ui/popover.js +198 -0
- package/ui/project-folder.js +37 -0
- package/ui/shell-state.js +40 -0
- package/ui/strip-rows.js +171 -0
- package/ui/styles.css +492 -0
- package/ui/theme-pick.js +36 -0
- package/ui/theme.js +74 -0
- package/ui/themes/LICENSE.md +13 -0
- package/ui/themes/README.md +44 -0
- package/ui/themes/TOKENS.md +291 -0
- package/ui/themes/a1/board.css +1557 -0
- package/ui/themes/a1/pk.css +392 -0
- package/ui/themes/b1/board.css +1163 -0
- package/ui/themes/b1/pk.css +218 -0
- package/ui/themes/d2/board.css +518 -0
- package/ui/themes/d2/pk.css +243 -0
- package/ui/themes/guard.css +73 -0
- package/ui/themes/i1/board.css +776 -0
- package/ui/themes/i1/pk.css +223 -0
- package/ui/themes/manifest.json +13 -0
- package/ui/views.js +2796 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Filling in the ProjectKeeper table
|
|
2
|
+
|
|
3
|
+
You are taking over a software project. Read it in whatever way you think best, and write down what you understood as one JSON file. You are told where it goes:
|
|
4
|
+
- `projectkeeper/project.json` in the project folder, under the project's git;
|
|
5
|
+
- for a public project, ProjectKeeper's own folder, so that the owner's words and the session material never reach the public repository.
|
|
6
|
+
|
|
7
|
+
Either way the table means the same, and its paths are relative to the project folder. ProjectKeeper draws that file as its workbench: the Graph (a story map of the whole project), the List (area by area, planned against what happened) and the Code view. The owner reads the picture there; the next agent reads the same file.
|
|
8
|
+
|
|
9
|
+
The shape of the file is fixed by [`projectkeeper.schema.json`](projectkeeper.schema.json). Everything else is your judgement: what to read and in what order, what deserves an entry, how big an entry is, and where it belongs. Nothing here tells you how to read the project.
|
|
10
|
+
|
|
11
|
+
[`examples/papertrail.json`](examples/papertrail.json) is a filled table for Papertrail, a small fictional project.
|
|
12
|
+
|
|
13
|
+
## Who fills what
|
|
14
|
+
|
|
15
|
+
A takeover fills the table in three steps:
|
|
16
|
+
|
|
17
|
+
1. **The owner's words.** One agent reads the session material and fills `ownerWants`. Its notes have `by: "Owner's words"`.
|
|
18
|
+
2. **The project.** Another agent reads the project folder and fills everything else. Its notes have `by: "Project"`.
|
|
19
|
+
- The two read independently. Neither sees the other's part.
|
|
20
|
+
3. **The main agent reads both.**
|
|
21
|
+
- It fills each want's `reflectedIn`.
|
|
22
|
+
- Where the owner and the project part ways, it writes a note with `by: "Main agent"` and kind `Owner and project differ`.
|
|
23
|
+
- When the owner is there, it starts from those notes and talks them through with the owner instead of deciding alone.
|
|
24
|
+
|
|
25
|
+
One agent may do all three, in that order. Later upkeep changes the same table: new words go into `ownerWants`, new work and new evidence go into their parts, and new notes are added.
|
|
26
|
+
|
|
27
|
+
## What you have to read
|
|
28
|
+
|
|
29
|
+
- **The project folder**: documents, code, and the git history of every repository in it.
|
|
30
|
+
- **The session material**, when you are given it: the owner's messages from past agent sessions, each with the agent's last answer before it. Tool calls and thinking are already taken out. Each message carries the session's name and its number; cite it by those. Without the session material, the owner's words come only from where the documents quote them.
|
|
31
|
+
|
|
32
|
+
Stay inside the project folder and the material you were given.
|
|
33
|
+
|
|
34
|
+
## The table, part by part
|
|
35
|
+
|
|
36
|
+
The `project` header says which project, the commit each repository stood at when you read it (`asOf`), and who filled the table. Under `filledBy.read`, say in a few sentences what you read and in what order, and what you left out.
|
|
37
|
+
|
|
38
|
+
The rest of the table has eleven parts.
|
|
39
|
+
|
|
40
|
+
| Part | What it is | Shown |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `ownerWants` | What the owner wants, in the owner's words | The top of the Graph |
|
|
43
|
+
| `product` | What the product is and for whom | The top of the Graph |
|
|
44
|
+
| `goals` | Why the product exists; what a user should get | The top of the Graph |
|
|
45
|
+
| `areas` | The parts of the product | The columns of the Graph |
|
|
46
|
+
| `requirements`, `designs`, `decisions` | What the product must do, how it is meant to work, what was decided | Folded at the top of their column |
|
|
47
|
+
| `plans` | Plans, milestones, phases | The rows of the Graph |
|
|
48
|
+
| `work` | Each piece of work in a plan | The cells, where its plan's row meets its area's column |
|
|
49
|
+
| `code` | Which code belongs to which area | The Code view, and the foot of each column |
|
|
50
|
+
| `notes` | What needs the owner's attention | A ? on each entry it is about, and the notes list |
|
|
51
|
+
|
|
52
|
+
### `ownerWants`
|
|
53
|
+
|
|
54
|
+
One entry per thing the owner wants. When the owner said the same thing several times, that is one entry.
|
|
55
|
+
|
|
56
|
+
- `want`: one sentence. `kind`: about the product, or about the way of working (how documents are kept, how trials run, what the owner will not have done).
|
|
57
|
+
- `said`: one to three of the owner's clearest sentences, each quoted word for word with its source.
|
|
58
|
+
- Read the agent message before a short reply. A short reply such as 「可以」 or "yes" approves what that message proposed. Record what was approved under `approvedProposal`, saying which part of the proposal. An agent's message is never the owner's words.
|
|
59
|
+
- Text the owner pasted in (another agent's report, a log) is not the owner's words. What the owner says about it is.
|
|
60
|
+
- Later words can overturn earlier ones. Give the final position as the `want`, and list the turns under `changed`. An entry the owner later reversed is `Replaced`, and `replacedBy` names the entry that holds now. A question the owner left undecided is `Open`.
|
|
61
|
+
- `reflectedIn`: the entries elsewhere in the table that carry the want out. If nothing does, leave it empty and write a note of kind `Owner and project differ`.
|
|
62
|
+
|
|
63
|
+
### `requirements`, `designs`, `decisions`
|
|
64
|
+
|
|
65
|
+
Take them from the project's own documents, with the project's own numbers and names.
|
|
66
|
+
|
|
67
|
+
- `place` puts each one in exactly one spot:
|
|
68
|
+
- one `area`;
|
|
69
|
+
- several `areas`;
|
|
70
|
+
- one `plan`, for a decision about how a plan is carried out;
|
|
71
|
+
- `wholeProduct`, with the reason it concerns the whole product.
|
|
72
|
+
- A decision that says what the product will not do is a decision with `boundary: true`.
|
|
73
|
+
- An execution log or run diary is not a list of decisions. Cite it as a source where it explains what happened.
|
|
74
|
+
|
|
75
|
+
### `plans` and `work`
|
|
76
|
+
|
|
77
|
+
A plan that is in force is `Current` (or `Proposed`, `Deferred`). A plan that a later plan replaced is `Replaced`. It is an earlier generation: its row rolls up, and each of its work items needs `became`:
|
|
78
|
+
|
|
79
|
+
- `carriedOnBy`: a current work item continues it;
|
|
80
|
+
- `movedTo`: a current plan took it over unchanged;
|
|
81
|
+
- `deferred`: it was put off;
|
|
82
|
+
- `dropped`: it was given up;
|
|
83
|
+
- `finished`: it was done under the earlier plan and needed no continuation.
|
|
84
|
+
|
|
85
|
+
A work item is a task, contract or ticket from the project's own plan. A commit or a session is never a work item by itself.
|
|
86
|
+
|
|
87
|
+
- `id` is the project's own number for the work. The program uses it to find the work's dispatches, commits, receipts, reviews and merges in git and in the documents, and builds the steps from them.
|
|
88
|
+
- Add `steps` only for a step the program cannot find that way, and always with its evidence.
|
|
89
|
+
- `progress` is how far the work got by the records. It is not whether anyone checked or accepted it. Acceptance by the owner goes in `accepted`, with its source.
|
|
90
|
+
- `area` is the column the work mainly serves. `alsoAreas` puts it in other columns too, drawn dashed. Work that serves a whole plan and no single area takes `wholePlan`, with the reason, instead of `area`.
|
|
91
|
+
|
|
92
|
+
### `code`
|
|
93
|
+
|
|
94
|
+
A territory is a piece of code (files or folders) and the area it belongs to. Give its paths. The program computes everything else: size, tests, who built it, and whether the current plan still uses it. Record an anomaly only when you saw it in the material.
|
|
95
|
+
|
|
96
|
+
### `notes`
|
|
97
|
+
|
|
98
|
+
A note is for what is wrong, or for where the owner and the project part ways.
|
|
99
|
+
|
|
100
|
+
- The `title` says it in one sentence; `text` gives the background and why it matters.
|
|
101
|
+
- For a decision, give the owner `options`, each with its consequence.
|
|
102
|
+
- `on` names the entries the note is about. The note shows on each of them.
|
|
103
|
+
- `by` says which step wrote it (see [Who fills what](#who-fills-what)).
|
|
104
|
+
- Something that is fine needs no note. Normal, finished work stays quiet.
|
|
105
|
+
|
|
106
|
+
## How much to put in
|
|
107
|
+
|
|
108
|
+
As few entries as still make the project clear. The owner reads this table at a glance; every extra entry costs attention.
|
|
109
|
+
|
|
110
|
+
- **One entry per thing that matters, not per line of the records.**
|
|
111
|
+
- A decision log with a hundred entries may hold a few dozen decisions that still shape the product. Merge the entries that settle one matter into one decision, and cite them all as its sources.
|
|
112
|
+
- Fold the many small tasks under a contract into the contract.
|
|
113
|
+
- Merge the owner's many sayings of one want into one want.
|
|
114
|
+
- **Drop what changes nothing for the reader.** Leave out:
|
|
115
|
+
- wording fixes and dates of runs;
|
|
116
|
+
- an arrangement that was carried out and left nothing behind;
|
|
117
|
+
- a rule that only repeats another.
|
|
118
|
+
- **Of what was overturned, keep only what someone could plausibly bring back.** Give it the status `Replaced` or `Abandoned`, with `replacedBy` or `why`. The workbench gathers these as the "do not revive" list.
|
|
119
|
+
- **When only part of an entry was overturned,** keep the entry `Current`. Name the part and the entry that overturned it under `partlyReplaced`.
|
|
120
|
+
- **Do not fill a table to look complete.** An empty part is better than an invented one.
|
|
121
|
+
|
|
122
|
+
## Sources
|
|
123
|
+
|
|
124
|
+
Every entry has at least one source.
|
|
125
|
+
|
|
126
|
+
- **A file**: `{ "file": "product/PLAN.md", "lines": "40-52" }`. The path is relative to the project folder, with forward slashes.
|
|
127
|
+
- **A commit**: `{ "commit": "8854c20", "repo": "app" }`. Leave `repo` out when the repository is the project folder itself.
|
|
128
|
+
- **A session message**: `{ "session": "claude:4f1c…", "message": 153 }`.
|
|
129
|
+
|
|
130
|
+
Add `quote` when the words matter, and copy them exactly.
|
|
131
|
+
|
|
132
|
+
## What the program checks
|
|
133
|
+
|
|
134
|
+
The program checks the whole table when you run `pk check`, and again when `pk import` takes it in. If anything fails, the whole table is refused and nothing changes. Each failure names the entry, the field and the reason.
|
|
135
|
+
|
|
136
|
+
| Checked: the table is refused if it fails | Not checked: your judgement |
|
|
137
|
+
|---|---|
|
|
138
|
+
| The shape matches the schema; statuses and kinds use the listed words | What you read, and in what order |
|
|
139
|
+
| Every id is unique, and every id you refer to exists in the table | What deserves an entry, and how big it is |
|
|
140
|
+
| A `Replaced` entry names `replacedBy`; an `Abandoned` or `Deferred` one says `why` | Which area, plan or place an entry belongs to |
|
|
141
|
+
| A work item in a `Replaced` plan has `became` | What counts as an anomaly, and what to tell the owner |
|
|
142
|
+
| Every source exists: the file and its lines, the commit, the session message | How you word names and summaries |
|
|
143
|
+
| Every `quote` stands word for word in what it cites | How many entries there are |
|
|
144
|
+
| Every code path exists at the `asOf` commit | |
|
|
145
|
+
|
|
146
|
+
## How it is drawn
|
|
147
|
+
|
|
148
|
+
Each field has one place on the screen, and everything on the screen comes from the table or from git. `pk import` takes the table in as it is. The table stays in the project under git, so `git diff` on it shows what changed between two fillings.
|