create-pmos 0.38.8 → 0.40.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/package.json +1 -1
- package/payload/KIT-VERSION +1 -1
- package/payload/planning/evals/eval-calibration.md +1 -1
- package/payload/planning/okrs/health-budgets.md +1 -1
- package/payload/state/discoveries.md +1 -1
- package/workspace/README.md +37 -1
- package/workspace/bin/pmos.js +8 -1
- package/workspace/guide/index.md +40 -0
- package/workspace/guide/initiatives-and-next-steps.md +72 -0
- package/workspace/guide/layout.md +73 -0
- package/workspace/guide/proactive-engine.md +75 -0
- package/workspace/guide/scheduled-tasks-and-cli.md +41 -0
- package/workspace/guide/statuses.md +53 -0
- package/workspace/guide/validate-with-typesafe.md +80 -0
- package/workspace/lib/brief.js +113 -0
- package/workspace/lib/claims.js +605 -0
- package/workspace/lib/doc-profiles.js +74 -0
- package/workspace/lib/initiative-files.js +37 -6
- package/workspace/lib/judgment.js +65 -0
- package/workspace/lib/mobile-nav.js +1 -1
- package/workspace/lib/next-step-actions.js +139 -0
- package/workspace/lib/next-steps.js +27 -7
- package/workspace/lib/preview-kind.js +17 -2
- package/workspace/lib/proactive-cli.js +137 -0
- package/workspace/lib/proactive.js +208 -0
- package/workspace/lib/repo-watch.js +120 -0
- package/workspace/lib/schedule-cli.js +5 -2
- package/workspace/lib/secret-scan.js +28 -0
- package/workspace/lib/session-budget.js +35 -0
- package/workspace/lib/status-groups.js +53 -10
- package/workspace/lib/typesafe-settings.js +122 -0
- package/workspace/lib/typesafe.js +124 -0
- package/workspace/lib/validate.js +304 -0
- package/workspace/package-lock.json +1 -1
- package/workspace/package.json +3 -3
- package/workspace/public/pm/app.js +53 -18
- package/workspace/public/pm/data.js +18 -3
- package/workspace/public/pm/mobile.js +1 -1
- package/workspace/public/pm/modes-live.js +373 -0
- package/workspace/public/pm/modes.js +26 -0
- package/workspace/public/pm/next-step-ui.js +185 -0
- package/workspace/public/pm/panel-detail.js +47 -11
- package/workspace/public/pm/panel-initiatives.js +26 -4
- package/workspace/public/pm/panel-repos.js +2 -2
- package/workspace/public/pm/state.js +3 -3
- package/workspace/public/pm/status-banner.js +87 -0
- package/workspace/public/pm/tab-doc.js +66 -8
- package/workspace/server.js +562 -18
- package/workspace/skills/morning-brief.skill +43 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pmos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"description": "Scaffold the PMOS portable kit — run the PMOS product-management workflow (initiative → lane-fit spec → contract → build → three gates, with work-type lanes for features, research, maintenance, incidents, and content) entirely inside your own repo, with all state as git-versioned files. Includes `workflow-sweep`, which audits the state every board derives from and separates real defects from work you simply have not done. `create-pmos workspace` also installs + launches the local Terminal Workspace GUI. No database, no network, no telemetry.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
package/payload/KIT-VERSION
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Reference
|
|
3
3
|
title: "Eval calibration log"
|
|
4
4
|
description: "Append-only record of every PM override of an evaluator verdict."
|
|
5
|
-
generated: {by: process:create-pmos, at: "2026-10-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-03T10:44:27Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Reference
|
|
3
3
|
title: "Health budgets"
|
|
4
4
|
description: "Closed registry of health-budget anchors (D59), edited only by the PM."
|
|
5
|
-
generated: {by: process:create-pmos, at: "2026-10-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-03T10:44:27Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Reference
|
|
3
3
|
title: "Discoveries and friction log"
|
|
4
4
|
description: "Append-only record of what runs discovered and where the process rubbed."
|
|
5
|
-
generated: {by: process:create-pmos, at: "2026-10-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-03T10:44:27Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
package/workspace/README.md
CHANGED
|
@@ -46,6 +46,42 @@ npm run test:ui # browser checks: terminal geometry, reader scroll, markdow
|
|
|
46
46
|
```
|
|
47
47
|
</details>
|
|
48
48
|
|
|
49
|
+
## Status clarity and the user guide (`status-clarity`)
|
|
50
|
+
|
|
51
|
+
The initiative list can say what each status means. Choose **status**, then **what do these mean?**: one row per group with what it means, the fact it is read from, who acts, what moves it and what you can do. The text comes from `lib/status-groups.js`, the table that also files the rows, so the legend and the grouping cannot disagree.
|
|
52
|
+
|
|
53
|
+
The initiative detail opens with a **status banner**: the group, why (the evidence the server derived, for example the open item in its own words), who acts, the next thing to do, and what changes the status. Next steps are split into **yours** and **mine**; each item has an `id`, an `owner` (`pm` or `agent`) and `act` (`null` for now). Hold, close, cancel and reopen are explained under the control and every change is listed. No other status can be set by hand: they are read from git and the ledgers. Acceptance is the PM's and is recorded in a session, so the banner says how and the workspace never records one.
|
|
54
|
+
|
|
55
|
+
Files listed under **files from git** open in a read-only tab. A file that exists only on the initiative's branch is read from that branch through `GET /api/doc?ref=initiative/<id>` (an initiative branch only, text under 2 MB). A binary file says it cannot be previewed.
|
|
56
|
+
|
|
57
|
+
The user guide is `workspace/guide/*.md`. The **guide** item in the settings and tools drawer opens its pages in a read-only tab (`GET /api/guide`). A change to `workspace/public/pm/**` must change the guide in the same pull request (a workspace CI step), and `guide.test.js` fails when a status group, a drawer item or a `pmos` command is not mentioned.
|
|
58
|
+
|
|
59
|
+
## Three columns (`column-layout`)
|
|
60
|
+
|
|
61
|
+
The desktop has three columns: **navigation**, **detail** and **tabs**. Navigation is the repository list with the list of the current mode under it (the initiatives of the selected repository, or memory, skills, knowledge, scheduled tasks, focus, portfolio, the guide). The repository list is capped at 42% of the height and scrolls inside its cap, so the list under it stays on screen. The detail column shows an initiative. The tabs column holds terminals, documents, conversations and guide pages and is never rebuilt by a layout change.
|
|
62
|
+
|
|
63
|
+
The DOM still holds four hosts in the same order (repositories, list, detail, tabs); `placeHosts` in `public/pm/app.js` puts the list host under the repositories by grid placement. About a hundred test assertions and the phone layout depend on that order, so it is not changed. The list folds to a one-line bar, the navigation column folds to a 36px rail (the list folds with it), and the detail column folds to its own rail. Drag the navigation column's right edge to resize it (220 to 560px); a double click restores 280px. `state.js` no longer stores `col1W`; an old stored layout loads and keeps its tabs.
|
|
64
|
+
|
|
65
|
+
`MODE_PLACE` in `public/pm/modes.js` is the rule for where things open, and `ROW_OPENS` says what a row in each list opens: an initiative opens in the detail column, a skill, a knowledge note or a guide page opens in a tab, and a schedule or a memory entry is used inside the list. A list or a detail kind missing from these tables fails `pm-r19-test.js`.
|
|
66
|
+
|
|
67
|
+
## Next-step actions (`next-step-actions`)
|
|
68
|
+
|
|
69
|
+
Each next step carries an `act` (`open`, `session`, `work`, `gate`, `lifecycle`; `lib/next-step-actions.js`). For a `work` step the PM presses **prepare**, which returns a plan and creates nothing (`POST /api/next-step/prepare`): the branch and tree (`startPreview`: an existing `initiative/<id>` worktree is reused, otherwise one is created on go), the sessions already running on the initiative, the read-only sources the chosen profile declares and that suit the step, whether the typed-judgment helper is on, the session budget, and the exact first input with its hash. **Go** (`POST /api/next-step/go`, `confirm: true`, the hash) re-prepares, refuses if anything differs from what was shown, and starts the session through `startWork` with `origin: next-step` and the prompt as `initialInput`. The socket's `start` message still cannot carry a prompt.
|
|
70
|
+
|
|
71
|
+
Only the step the ladder has reached can be prepared; the build is refused until the pre-run contract is PM-approved; the contract, acceptance and open items are `gate` acts and have no start control; a stopped initiative must be reopened. The prompt states the propose-only boundary (`RULES`): commit to the local branch or write drafts; no push, pull request, send, post, ticket, acceptance, contract approval or merge. `lib/session-budget.js` limits sessions started from steps (3 at once, 8 a day, `GET`/`POST /api/next-step/settings`); sessions started by hand are never counted.
|
|
72
|
+
|
|
73
|
+
`lib/judgment.js` owns the instruction that tells a session to use the Typesafe skill (off by default, per run; it needs `TYPESAFE_API_KEY` and sends the question text to an outside service) and the shape check for `JUDGMENT {json}` lines (classify, score, yes or no). The next-step routes and modules make no model or network call (the one named egress in the workspace is D79's repository validation, a separate feature).
|
|
74
|
+
|
|
75
|
+
After the session ends, `GET /api/next-step/summary` returns the files the branch changed against trunk, the end of the conversation and the judgments, checked; `POST /api/next-step/review` records the PM's verdict (`accept` or `send-back` with a note). Runs and verdicts are `next-step-runs.jsonl` and `step-reviews.jsonl` in the runtime state directory. A verdict never changes the initiative's status.
|
|
76
|
+
|
|
77
|
+
## Today: what is waiting for you (`proactive-engine`, slice D1)
|
|
78
|
+
|
|
79
|
+
`lib/proactive.js` is a pure core: it reads the records the workspace already derives and finds five conditions: a need waiting on the PM, an initiative returned at acceptance, an ended next-step session with no review, a scheduled task whose last run failed, and an active initiative with no agent run for the stalled threshold (5 days by default). The ranking is fixed and stated in the guide. `GET /api/proactive/today` computes the list on each request. A scan (`POST /api/proactive/scan`, and a 10-minute automatic tick inside the existing 60-second interval) appends new items once a day to `signals.jsonl`. Feedback (`useful`, `not-useful`, `wrong-priority`, `missed` with a note, and the events `opened`, `dismissed`) is appended to `proactive-feedback.jsonl`; a dismissed item is hidden for 7 days. Settings are in `proactive-settings.json` (engine on or off, one trigger off, the stalled threshold, quiet hours, pause learning; the last has no effect yet because nothing learns from the verdicts in this slice). The same actions are in `pmos proactive today|scan|settings|feedback` (`lib/proactive-cli.js`), a thin client of those routes. The list is drawn in the navigation column by the `today` drawer item. It runs only while the server runs, reads no mail or calendar, and starts no session, sends nothing and changes no record of an initiative (`proactive.test.js` E25-E26 read the source for that). Tests: `proactive.test.js` (pure core, routes, CLI) and `pm-r22-test.js` (the page). The guide page is `guide/proactive-engine.md`.
|
|
80
|
+
|
|
81
|
+
## The morning brief (`proactive-engine`, slice D2)
|
|
82
|
+
|
|
83
|
+
The top of Today is a brief: a greeting, the day's calendar, ranked priorities and a worth-asking list. The server does not build it. The built-in skill `skills/morning-brief.skill` runs in an agent session, reads the sources the settings allow (calendar, wispr, mail, jira, confluence; mail is off by default) and the derived list (`pmos proactive today`), and submits one brief with `pmos proactive brief submit --file`. `POST /api/proactive/brief` checks it with `lib/brief.js` and stores `briefs/<date>.json` in the runtime state folder, replacing any earlier brief for the same day; `GET` returns the newest one with a `stale` flag when its date is not today. The check refuses, with the reason and without storing, a wrong shape, an unknown source, a confidence outside 0 to 1, more than 12 items or 20 events, an over-long field, an item that rests on a source not reported as read, a source reported as read that the settings switched off, and a claim of typed scoring when that setting is off. The bucket is derived: under 0.5 confidence is "worth asking". The order is fixed: confidence, then PM-owned, then title. `POST /api/schedules/seed` with `set: "brief"` (one press in Today, or `pmos proactive brief schedule`) makes the daily 06:45 schedule once; as with every schedule, one made after its time of day runs once within a minute. The routes make no model or network call and write only the brief file. Typed scoring is a standing opt-in setting that is off by default. Tests: `proactive.test.js` G, H, I and `pm-r22-test.js` B1-B11. The guide page is `guide/proactive-engine.md`.
|
|
84
|
+
|
|
49
85
|
## Scheduled tasks from the terminal (`schedule-cli`)
|
|
50
86
|
|
|
51
87
|
`pmos schedule` and `pmos skill` talk to the running workspace server, so the terminal and the workspace share one schedule store and one validator. Every change is saved the moment the command succeeds. A refused value names what is allowed and changes nothing. With no server running the command says so and exits 1.
|
|
@@ -99,7 +135,7 @@ The three-column layout is retired. The surface is now **four collapsible panels
|
|
|
99
135
|
**Fixture mode.** `?fixture=proto` renders the whole surface from a bundled seed file, with the server unable to read any repository — that is how the design comparison is run (`npm run test:parity`), and it is never the default.
|
|
100
136
|
|
|
101
137
|
## Artifact links are declarations, not integrations
|
|
102
|
-
The PMOS server makes no outbound request and holds no credential, and the workspace makes no request you did not ask for. Its git network verbs are named and press-only: `Sync` runs `fetch`, a fast-forward or an own-commit rebase, a commit of record paths, and `push` — only when you press it, never on a timer or on load, never forced ([D70](/okf/products/pmos/adr/d70-stopped-initiatives-and-sync.md)). A web page opens in a tab only when you type or click its address, and a restored web tab loads only when you press "load this page" ([D69](/okf/products/pmos/adr/d69-web-tab.md)). Linking an artifact to an external destination therefore records a **declaration** — `{artifact_path, kind, target}` appended to `pmos/state/artifact-links.jsonl`. The sync panel renders as designed, and with no connector configured its summary line says exactly that: *no connector configured — nothing was read, and nothing will be written*, with the approval buttons disabled. A difference summary it never read would be the watermelon this repo has a word for.
|
|
138
|
+
The PMOS server makes no outbound request and holds no credential, with one named exception ([D79](/okf/products/pmos/adr/d79-typesafe-validation-egress.md)): when you save a TypeSafe key and turn validation on for a repository, the **validate** page sends that repository's document text to `api.typesafe.ai`, from one module, only after you confirm the plan. With no key, nothing is sent. The key stays on this machine, is never shown again, and is never given to a terminal. The consistency checks at the top of the **validate** page are local: they read files and git and send nothing. Automatic checking is off until you switch it on for a repository, and then the workspace appends problems to that repository's `claims.jsonl`. The workspace makes no request you did not ask for. Its git network verbs are named and press-only: `Sync` runs `fetch`, a fast-forward or an own-commit rebase, a commit of record paths, and `push` — only when you press it, never on a timer or on load, never forced ([D70](/okf/products/pmos/adr/d70-stopped-initiatives-and-sync.md)). A web page opens in a tab only when you type or click its address, and a restored web tab loads only when you press "load this page" ([D69](/okf/products/pmos/adr/d69-web-tab.md)). Linking an artifact to an external destination therefore records a **declaration** — `{artifact_path, kind, target}` appended to `pmos/state/artifact-links.jsonl`. The sync panel renders as designed, and with no connector configured its summary line says exactly that: *no connector configured — nothing was read, and nothing will be written*, with the approval buttons disabled. A difference summary it never read would be the watermelon this repo has a word for.
|
|
103
139
|
|
|
104
140
|
## The gates are real, never automatic (R5)
|
|
105
141
|
`approve` / `return` / `accept` write the PMOS file-mode vocabulary to `acceptances.jsonl` and clear the matching needs entry — only ever on your click.
|
package/workspace/bin/pmos.js
CHANGED
|
@@ -396,6 +396,12 @@ function doctor() {
|
|
|
396
396
|
code = await require('../lib/schedule-cli').run(process.argv.slice(2), {
|
|
397
397
|
say, call: async (m, p, b) => (port ? api(port, m, p, b) : null) });
|
|
398
398
|
}
|
|
399
|
+
else if (cmd === 'proactive') {
|
|
400
|
+
const live = await discover();
|
|
401
|
+
const port = live.length ? live[0].port : null;
|
|
402
|
+
code = await require('../lib/proactive-cli').run(process.argv.slice(2), {
|
|
403
|
+
say, call: async (m, p, b) => (port ? api(port, m, p, b) : null) });
|
|
404
|
+
}
|
|
399
405
|
else if (cmd === 'upgrade') {
|
|
400
406
|
// Escape hatch: pull the latest bundled app and force-reinstall over this global copy. Delegates
|
|
401
407
|
// to the scaffolder (which owns the install path) rather than reinstalling itself in place.
|
|
@@ -407,11 +413,12 @@ function doctor() {
|
|
|
407
413
|
if (r.error) { say('✗ could not run ' + npx + ' — ' + r.error.message); code = 1; }
|
|
408
414
|
else code = r.status === null ? 1 : r.status;
|
|
409
415
|
} else if (cmd === 'help' || cmd === '--help' || cmd === '-h') {
|
|
410
|
-
say('usage: pmos [<path>|status|ls|stop|doctor|upgrade|schedule|skill]');
|
|
416
|
+
say('usage: pmos [<path>|status|ls|stop|doctor|upgrade|schedule|skill|proactive]');
|
|
411
417
|
say(' pmos open the current repo as a workspace (starts the server if needed)');
|
|
412
418
|
say(' pmos <path> open another repo as a workspace');
|
|
413
419
|
say(' pmos schedule … create, edit and run scheduled tasks (pmos schedule --help)');
|
|
414
420
|
say(' pmos skill … list, read, create and edit skills');
|
|
421
|
+
say(' pmos proactive … what is waiting for you, feedback, settings (pmos proactive --help)');
|
|
415
422
|
say(' pmos upgrade reinstall the workspace app from the latest published create-pmos');
|
|
416
423
|
code = 0;
|
|
417
424
|
} else if (cmd === 'up' || cmd === 'start' || cmd === 'open') {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: start here"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: start here
|
|
8
|
+
|
|
9
|
+
This guide describes the PMOS workspace as it works today. It ships with the app. When a change alters how the workspace looks or behaves, the same change updates this guide.
|
|
10
|
+
|
|
11
|
+
## The screen
|
|
12
|
+
|
|
13
|
+
The workspace has three columns. [Layout](layout.md) explains where things open.
|
|
14
|
+
|
|
15
|
+
1. **Navigation.** The repositories you added, with the list of the current mode under them. The default list is the initiatives of the selected repository. The settings and tools drawer at the bottom opens the other lists here.
|
|
16
|
+
2. **The detail.** The item you selected: an initiative with its status, next steps and artifacts, or a skill, a schedule or a memory item.
|
|
17
|
+
3. **Tabs.** Terminals, documents, conversations and guide pages.
|
|
18
|
+
|
|
19
|
+
## The settings and tools drawer
|
|
20
|
+
|
|
21
|
+
| Item | What it opens |
|
|
22
|
+
|---|---|
|
|
23
|
+
| today | What is waiting for you now, with your feedback and the settings of the proactive engine. |
|
|
24
|
+
| memory | What the repository remembers: decisions and notes kept in its memory ledger. |
|
|
25
|
+
| knowledge | The decisions, concepts and skills of the repository. |
|
|
26
|
+
| portfolio | Every initiative of every repository, grouped by domain. |
|
|
27
|
+
| guide | This guide. |
|
|
28
|
+
| validate | Checks that one repository agrees with itself, on your machine. It can also check with TypeSafe, which sends text only after you turn it on. |
|
|
29
|
+
| focus | What is waiting on you, across all repositories. |
|
|
30
|
+
| skills | Built-in and user skills. A built-in is read-only. |
|
|
31
|
+
| scheduled tasks | Skills that run on a schedule. |
|
|
32
|
+
|
|
33
|
+
## Where to read next
|
|
34
|
+
|
|
35
|
+
- [Layout](layout.md): the three columns and the rule for where a list or a detail opens.
|
|
36
|
+
- [Statuses](statuses.md): what each status means, where it comes from, and what you can change.
|
|
37
|
+
- [Initiatives and next steps](initiatives-and-next-steps.md): the detail, the next steps, and the artifacts.
|
|
38
|
+
- [Scheduled tasks and the command line](scheduled-tasks-and-cli.md): how to make, edit and run scheduled tasks.
|
|
39
|
+
- [Validate a repository](validate-with-typesafe.md): what each kind of document is compared with, how to read the verdict, and what leaves your machine.
|
|
40
|
+
- [Today and the proactive engine](proactive-engine.md): what Today finds, what you can do with an item, the settings, the commands and the limits.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: initiatives and next steps"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: initiatives and next steps
|
|
8
|
+
|
|
9
|
+
Select an initiative in the list. The detail opens in the detail column.
|
|
10
|
+
|
|
11
|
+
## What the detail shows, top to bottom
|
|
12
|
+
|
|
13
|
+
1. **Status.** The status, why it has that status, who acts now, the next thing to do, and when the status changes. If the status is Needs you, each open item is listed in its own words. If the status cannot be read, the detail says so and shows no status.
|
|
14
|
+
2. **Lifecycle control.** Hold, close, cancel or reopen. Beneath it, the history of every change.
|
|
15
|
+
3. **Next steps to done.** Everything between now and acceptance, in order. See below.
|
|
16
|
+
4. **Phases and links.** The workflow phases and the external links.
|
|
17
|
+
5. **Artifacts.** Documents, conversations and files.
|
|
18
|
+
|
|
19
|
+
## Next steps
|
|
20
|
+
|
|
21
|
+
The list comes from the workflow ladder, the ledgers and the running sessions. The workspace does not write it with a model. Every step names the fact it came from.
|
|
22
|
+
|
|
23
|
+
The list has two parts:
|
|
24
|
+
|
|
25
|
+
- **Yours.** Steps only you can do. Acceptance, approval of the contract and answers to open items belong here.
|
|
26
|
+
- **Mine.** Steps the agent does.
|
|
27
|
+
|
|
28
|
+
The numbers run along the whole path. The step marked **next** is the one the workflow names first. A stopped initiative lists a reopen step first. An accepted initiative has none.
|
|
29
|
+
|
|
30
|
+
## Acting on a step
|
|
31
|
+
|
|
32
|
+
Each step says what you can do with it. The control sits under the step.
|
|
33
|
+
|
|
34
|
+
| Act | What it is | The control |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `work` | An agent session can do this step. | **prepare**, then **go** |
|
|
37
|
+
| `open` | The step is yours, and it points at a file you should read. | **open** the file |
|
|
38
|
+
| `session` | A session is already running on it. | **switch to it** |
|
|
39
|
+
| `gate` | The step is yours alone: accepting the initiative, approving the contract, answering an open item. | Words only. There is no start button. |
|
|
40
|
+
| `lifecycle` | The initiative is stopped. | **reopen** |
|
|
41
|
+
|
|
42
|
+
### Prepare, then go
|
|
43
|
+
|
|
44
|
+
**Prepare** shows a plan and starts nothing. The plan names the branch and the folder, says whether the initiative's branch already exists (it is reused) or would be created, lists the sessions already running on the initiative, names the read-only sources the session may use, and shows the budget. It also shows the exact first input the session would receive. Preparing creates no branch, folder or session.
|
|
45
|
+
|
|
46
|
+
**Go** starts one session with exactly that input. The workspace refuses if the plan changed after you read it. In that case, prepare again.
|
|
47
|
+
|
|
48
|
+
A step the workflow has not reached cannot be prepared. The build cannot be prepared until you approve the contract. A stopped initiative must be reopened first. The workspace says which step comes first.
|
|
49
|
+
|
|
50
|
+
### What the session may do
|
|
51
|
+
|
|
52
|
+
The session proposes. It commits to the local initiative branch or writes draft files. It does not push, open a pull request, send or post anything, create a ticket, record an acceptance, approve a contract or merge. Those are yours.
|
|
53
|
+
|
|
54
|
+
### The budget
|
|
55
|
+
|
|
56
|
+
At most 3 prepared sessions run at once and 8 start each day. Go refuses a start over either limit and says the number. Sessions you start by hand are never counted or blocked. Change the limits with `POST /api/next-step/settings`.
|
|
57
|
+
|
|
58
|
+
### Sources and the typed judgment option
|
|
59
|
+
|
|
60
|
+
Choose a profile in the plan. The session may read only the sources that profile declares and that suit the step: Wispr Flow notes, Gmail, Google Calendar, Confluence, Jira and Slack. They are read-only.
|
|
61
|
+
|
|
62
|
+
You can turn on the Typesafe skill for a run. It helps the session categorise, score and decide yes or no with a typed answer. It sends the question text to an outside service and needs `TYPESAFE_API_KEY` in the session. It is off by default. The session prints each answer as a `JUDGMENT` line, and the review checks its shape.
|
|
63
|
+
|
|
64
|
+
### Review
|
|
65
|
+
|
|
66
|
+
After the session ends, the step offers **review what it did**. The review lists the files the branch changed against trunk, shows the end of the conversation, and lists any judgments the session reported, with those that failed the shape check marked. Then choose **accept the step** or **send it back**. A send-back needs a note. Your verdict is recorded in the runtime state folder. Accepting a step does not accept the initiative. Acceptance stays at the Acceptance Gate.
|
|
67
|
+
|
|
68
|
+
## Artifacts
|
|
69
|
+
|
|
70
|
+
- **Documents** open in a tab. You can edit them.
|
|
71
|
+
- **Conversations** are sessions bound to the initiative. A conversation is saved when its session ends. It opens read-only. It stays on this computer, in the runtime state folder. It is not in the repository.
|
|
72
|
+
- **Files from git** are the files changed for the initiative. They open read-only in a tab. A file that exists only on the initiative branch opens from that branch. A file that cannot be previewed, such as a binary file, says so.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: layout"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: layout
|
|
8
|
+
|
|
9
|
+
The workspace has three columns. They are, from left to right, navigation, detail and tabs.
|
|
10
|
+
|
|
11
|
+
## Navigation
|
|
12
|
+
|
|
13
|
+
The first column holds the list of repositories. Under it is the list for the current mode. When you choose a repository, its initiatives appear there. When you choose an item in the settings and tools drawer, its list replaces the initiatives. Choose a repository again to return to its initiatives.
|
|
14
|
+
|
|
15
|
+
If you have many repositories, the repository list scrolls inside its own space. The list under it stays on screen.
|
|
16
|
+
|
|
17
|
+
Drag the right edge of the column to change its width. Double-click the edge to restore the default width.
|
|
18
|
+
|
|
19
|
+
## Detail
|
|
20
|
+
|
|
21
|
+
The second column shows one item in full. Choose an initiative, a skill, a schedule or a memory item, and its detail opens here.
|
|
22
|
+
|
|
23
|
+
## Tabs
|
|
24
|
+
|
|
25
|
+
The third column holds your terminals, documents, conversations and guide pages. Folding or resizing the other columns does not touch your terminals.
|
|
26
|
+
|
|
27
|
+
## Open a file
|
|
28
|
+
|
|
29
|
+
Press a file anywhere in the workspace to open it in a tab. Any text file opens, whatever its extension.
|
|
30
|
+
|
|
31
|
+
- **Markdown** opens as a document. You can edit it and save it.
|
|
32
|
+
- **JSON** opens pretty-printed. If the file is not valid JSON, the tab shows the text as written and says why.
|
|
33
|
+
- **JSONL** opens as numbered records, one for each line. The tab marks a line that is not valid JSON.
|
|
34
|
+
- **Other text** opens as numbered source lines. Spreadsheets, PDFs and images open in their own views.
|
|
35
|
+
|
|
36
|
+
A tab for a file that is not markdown is read-only. It has no edit, diff or save control, because the workspace saves only markdown.
|
|
37
|
+
|
|
38
|
+
If a file cannot be shown, the tab says why. The reasons are: the file is binary, it is larger than 2 MB, it is not valid text, or it is outside the workspace.
|
|
39
|
+
|
|
40
|
+
## The rule for where things open
|
|
41
|
+
|
|
42
|
+
A list or a directory opens in the navigation column, under the repository list. A detail opens in the detail column. A file-like row opens in a tab, as any document does.
|
|
43
|
+
|
|
44
|
+
| Item | Kind | Opens in |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| Initiatives | list | navigation |
|
|
47
|
+
| Memory | list | navigation |
|
|
48
|
+
| Knowledge | list | navigation |
|
|
49
|
+
| Portfolio | list | navigation |
|
|
50
|
+
| Guide | list | navigation |
|
|
51
|
+
| Validate | list | navigation |
|
|
52
|
+
| Today | list | navigation |
|
|
53
|
+
| Focus | list | navigation |
|
|
54
|
+
| Skills | list | navigation |
|
|
55
|
+
| Scheduled tasks | list | navigation |
|
|
56
|
+
|
|
57
|
+
What a row in a list opens:
|
|
58
|
+
|
|
59
|
+
- A row in Initiatives, Portfolio or Focus opens the initiative in the detail column.
|
|
60
|
+
- A row in Skills, Knowledge, Guide or Validate opens the file in a tab, beside your terminals.
|
|
61
|
+
- Scheduled tasks, Memory and Today are used inside the list. They have no separate detail.
|
|
62
|
+
|
|
63
|
+
## Folding
|
|
64
|
+
|
|
65
|
+
- Choose the arrow in the header of the list to fold it to one line under the repositories. Choose the line to open it again.
|
|
66
|
+
- Fold the navigation column to a thin strip. The list folds with it. Choose the strip to open it again.
|
|
67
|
+
- Fold the detail column to its strip in the same way.
|
|
68
|
+
|
|
69
|
+
The workspace remembers which columns are open and how wide the navigation column is.
|
|
70
|
+
|
|
71
|
+
## On a phone
|
|
72
|
+
|
|
73
|
+
A phone shows one panel at a time. The bottom bar moves between them.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: Today and the proactive engine"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: Today and the proactive engine
|
|
8
|
+
|
|
9
|
+
The today item shows what is waiting for you now. The workspace works it out by itself from the records of your repositories. You do not ask for it.
|
|
10
|
+
|
|
11
|
+
## The morning brief
|
|
12
|
+
|
|
13
|
+
The top of Today is the morning brief: a greeting, the day's calendar, the priorities and a list of things worth asking about. The brief is not computed by the workspace. A skill called morning-brief runs in an agent session. The session reads the sources, and then submits one brief with `pmos proactive brief submit`. The workspace server only checks the brief and stores it. It makes no model call and reaches no calendar or mailbox.
|
|
14
|
+
|
|
15
|
+
- Press **schedule the morning brief** in Today to make a daily schedule at 06:45. The schedule is an ordinary scheduled task, so it runs only while the workspace server runs. A sleeping computer gets no brief. A schedule that is made after its time of day for the first time runs within a minute, so pressing the button at 10:00 starts one brief session straight away.
|
|
16
|
+
- Each source is a setting: calendar, wispr, mail, jira and confluence. Mail is off by default and the skill reads only subjects and senders, never bodies. A source that is off cannot be reported as read.
|
|
17
|
+
- The brief names the day it is for. If that is not today, Today says it is out of date.
|
|
18
|
+
- An item the session is less than 0.5 sure about is shown under worth asking, not as a priority. The workspace sets that bucket from the confidence. The session cannot choose it.
|
|
19
|
+
- The order is fixed: higher confidence first, then your items before the agent's, then by title.
|
|
20
|
+
- Each item takes the same feedback as a derived item: useful, not useful and wrong priority.
|
|
21
|
+
- Typed scoring is off by default. When you switch it on, the skill sends titles and metadata to the Typesafe service to score them. The brief says whether it used scoring. The workspace cannot check that claim.
|
|
22
|
+
- A brief is refused, with the reason and with nothing stored, when it has a wrong shape, an unknown source, a confidence outside 0 to 1, more than 12 items or 20 events, or a text field that is too long.
|
|
23
|
+
- The brief is stored in the workspace state folder on this computer. It is not committed.
|
|
24
|
+
|
|
25
|
+
## What it shows
|
|
26
|
+
|
|
27
|
+
Today scans for five conditions. Each one becomes one item with the reason and the evidence.
|
|
28
|
+
|
|
29
|
+
| Trigger | What it finds |
|
|
30
|
+
|---|---|
|
|
31
|
+
| needs | A need that waits on you. |
|
|
32
|
+
| returned | An initiative the PM returned at acceptance. |
|
|
33
|
+
| review | An agent session that ended and has no review yet. |
|
|
34
|
+
| schedule | A scheduled task whose last run failed. |
|
|
35
|
+
| stalled | An active initiative with no run for the stalled threshold. The default is 5 days. |
|
|
36
|
+
|
|
37
|
+
The order is fixed and you can read it: what blocks on you first, then an unreviewed session, then a failed schedule, then a stalled initiative. Inside one kind, the oldest item is first.
|
|
38
|
+
|
|
39
|
+
## What you can do with an item
|
|
40
|
+
|
|
41
|
+
- open takes you to the initiative or the schedule.
|
|
42
|
+
- useful, not useful and wrong priority record your verdict.
|
|
43
|
+
- dismiss 7 days hides the item for 7 days.
|
|
44
|
+
- something was missed records a note about what Today should have shown. It needs a note.
|
|
45
|
+
|
|
46
|
+
A verdict never changes a status, a lifecycle record or an acceptance. In this release a verdict is only recorded. Nothing uses it to change the order yet.
|
|
47
|
+
|
|
48
|
+
## Settings
|
|
49
|
+
|
|
50
|
+
| Setting | Meaning |
|
|
51
|
+
|---|---|
|
|
52
|
+
| engine on | Off stops automatic scans. The scan now button still works. |
|
|
53
|
+
| watch: needs, returned, review, schedule, stalled | Turn one trigger off. |
|
|
54
|
+
| brief sources | One switch for each of calendar, wispr, mail, jira and confluence. |
|
|
55
|
+
| typed scoring | Off by default. On lets the skill send titles and metadata to the Typesafe service. |
|
|
56
|
+
| name | Used in the greeting. |
|
|
57
|
+
| stalled after N days | The stalled threshold, from 1 to 90 days. |
|
|
58
|
+
| quiet hours | A start and an end time. No automatic scan runs between them. |
|
|
59
|
+
| pause learning | Saved for later. Nothing learns from your verdicts in this release, so it changes nothing today. |
|
|
60
|
+
|
|
61
|
+
## The commands
|
|
62
|
+
|
|
63
|
+
- `pmos proactive today` lists the items.
|
|
64
|
+
- `pmos proactive scan` scans now.
|
|
65
|
+
- `pmos proactive settings` shows the settings. Add `--enabled`, `--trigger NAME=on|off`, `--stalled-days`, `--quiet HH:MM-HH:MM|none`, `--pause-learning`, `--brief-source NAME=on|off`, `--brief-scoring on|off` or `--name` to change one.
|
|
66
|
+
- `pmos proactive brief` shows today's brief. `pmos proactive brief submit --file PATH` submits one. `pmos proactive brief schedule` makes the 06:45 schedule for the current repository.
|
|
67
|
+
- `pmos proactive feedback <id> useful|not-useful|wrong-priority|opened|dismissed` records feedback. Use `--missed "text"` for a missed item.
|
|
68
|
+
|
|
69
|
+
## Limits
|
|
70
|
+
|
|
71
|
+
- It runs only while the workspace server runs. It does not catch up for time the server was off. A sleeping computer gets no scan.
|
|
72
|
+
- The items from the records come from this computer. The workspace itself does not read your mail or your calendar. Only the morning-brief session does, and only the sources you switched on.
|
|
73
|
+
- It does not start a session, push, send, post, accept or merge. It only shows items and records your feedback.
|
|
74
|
+
- An unreadable repository is listed as not read. An empty list is not proof that nothing waits there.
|
|
75
|
+
- The records stay in the workspace state folder on this computer. They are not committed.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: scheduled tasks and the command line"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: scheduled tasks and the command line
|
|
8
|
+
|
|
9
|
+
A scheduled task runs a skill at a set time. The workspace starts a terminal session in the repository and types the skill into it.
|
|
10
|
+
|
|
11
|
+
## Limits
|
|
12
|
+
|
|
13
|
+
A schedule fires only while the workspace server runs. If the server is stopped, the workspace skips the missed slot. It does not catch up later. A one-time task has a 15-minute grace window.
|
|
14
|
+
|
|
15
|
+
## The commands
|
|
16
|
+
|
|
17
|
+
The commands talk to the running server. A change is saved when the command succeeds. A refused value names what is allowed and changes nothing. If no server runs, the command says so and exits with code 1.
|
|
18
|
+
|
|
19
|
+
- `pmos schedule list` shows the schedules. Add `--all` for every repository.
|
|
20
|
+
- `pmos schedule show <id|name>` shows one schedule, its next run, its last run and its status.
|
|
21
|
+
- `pmos schedule add` makes a schedule. Use `--skill` and `--cadence`. Add `--from-session` or `--from-file` to make a new user skill from your work and schedule it.
|
|
22
|
+
- `pmos schedule edit <id|name>` changes any field.
|
|
23
|
+
- `pmos schedule run <id|name>` runs it now.
|
|
24
|
+
- `pmos schedule enable <id|name>` and `pmos schedule disable <id|name>` turn it on and off.
|
|
25
|
+
- `pmos schedule rm <id|name>` deletes it.
|
|
26
|
+
- `pmos skill list` shows the skills.
|
|
27
|
+
- `pmos skill show <name>` shows one skill.
|
|
28
|
+
- `pmos skill new` makes a user skill.
|
|
29
|
+
- `pmos skill edit <name> --file F` replaces a user skill's text.
|
|
30
|
+
- `pmos skill copy <name>` makes an editable copy of a built-in skill.
|
|
31
|
+
|
|
32
|
+
## The fields
|
|
33
|
+
|
|
34
|
+
| Field | Meaning |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `--cadence`, `--day`, `--day-of-month`, `--time`, `--date` | When it runs. Times are local to the computer. |
|
|
37
|
+
| `--until`, `--max-runs` | When it stops. The schedule turns itself off when either is reached and records why. `none` clears one. |
|
|
38
|
+
| `--args` | Extra instructions added to the skill. |
|
|
39
|
+
| `--tier`, `--profile` | How it runs. |
|
|
40
|
+
|
|
41
|
+
A skill's text never starts a session with `/`, because Claude Code would read that as a command. The workspace puts a short sentence before it.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: statuses"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: statuses
|
|
8
|
+
|
|
9
|
+
Nobody types a status. The workspace works it out again each time you look. It reads the ledgers in the repository and git. Because of this, a status cannot become stale. It also means you cannot edit most statuses by hand.
|
|
10
|
+
|
|
11
|
+
## The nine statuses
|
|
12
|
+
|
|
13
|
+
| Status | Who acts | What it means |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| Needs you | You | Work is stopped on a decision or an answer only you can give. |
|
|
16
|
+
| In progress | The agent | An agent run is logged and nothing is merged yet. |
|
|
17
|
+
| Planning | The agent | The initiative is recorded and no run has started. |
|
|
18
|
+
| Awaiting acceptance | You | The work is delivered. It waits for your acceptance. |
|
|
19
|
+
| Accepted | Nobody | You accepted it. Nothing remains. |
|
|
20
|
+
| On hold | You | You paused it. It is off the board. |
|
|
21
|
+
| Closed | You | You closed it. It is off the board. |
|
|
22
|
+
| Cancelled | You | You cancelled it. It is off the board. |
|
|
23
|
+
| Unknown | Nobody | The status could not be worked out, so none is shown. |
|
|
24
|
+
|
|
25
|
+
The first four are the active statuses. Choose **active only** in the list to hide the others.
|
|
26
|
+
|
|
27
|
+
To read the same table in the app, choose **status** in the list, then **what do these mean?**. The app shows, for each status, the fact it is read from, what moves an initiative out of it, and what you can do.
|
|
28
|
+
|
|
29
|
+
## Where each status comes from
|
|
30
|
+
|
|
31
|
+
- **Needs you** comes from your latest acceptance row (a return), or from an open item in the needs queue that names the initiative.
|
|
32
|
+
- **In progress** comes from `agent-runs.jsonl`: at least one run, and no merged `initiative/<id>` branch.
|
|
33
|
+
- **Planning** means the record exists and `agent-runs.jsonl` has no run for it.
|
|
34
|
+
- **Awaiting acceptance** comes from git: an `initiative/<id>` branch was merged, or a trunk commit names the initiative and changes build files. No acceptance row exists yet.
|
|
35
|
+
- **Accepted** comes from your latest acceptance row.
|
|
36
|
+
- **On hold**, **Closed** and **Cancelled** come from your latest line in `lifecycle.jsonl`.
|
|
37
|
+
- **Unknown** appears when the trunk history or a ledger cannot be read. The detail gives the reason.
|
|
38
|
+
|
|
39
|
+
## What you can change by hand
|
|
40
|
+
|
|
41
|
+
You can hold, close, cancel or reopen an initiative. Each action writes one line to `lifecycle.jsonl` with your reason. A held, closed or cancelled initiative leaves the board and stops gating. Reopen puts it back. The detail lists every change.
|
|
42
|
+
|
|
43
|
+
You cannot set any other status. To move an initiative from Awaiting acceptance to Accepted, record an acceptance. Acceptance is yours and nobody can do it for you. Tell the session that holds the initiative to record it, or run `scripts/record-acceptance.js`. The workspace never records an acceptance for you.
|
|
44
|
+
|
|
45
|
+
## How a status changes
|
|
46
|
+
|
|
47
|
+
A status changes when a fact changes:
|
|
48
|
+
|
|
49
|
+
1. An agent logs its first run: Planning becomes In progress.
|
|
50
|
+
2. A branch is merged: In progress becomes Awaiting acceptance.
|
|
51
|
+
3. You return the work at acceptance: it becomes Needs you.
|
|
52
|
+
4. You accept: it becomes Accepted.
|
|
53
|
+
5. You hold, close or cancel: it moves to that status, whatever it was. Reopen returns it to the status its facts give.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Guide
|
|
3
|
+
title: "Guide: validate a repository"
|
|
4
|
+
timestamp: 2026-10-03
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guide: validate a repository
|
|
8
|
+
|
|
9
|
+
The validate item checks the documents of one repository. It has two parts. The first part checks that the repository agrees with itself. It runs on your machine and sends nothing. The second part uses TypeSafe's Jev model for checks that need judgement. It sends text only after you turn it on.
|
|
10
|
+
|
|
11
|
+
## Check that the repository agrees with itself
|
|
12
|
+
|
|
13
|
+
The top of the validate page shows a verdict: *Consistent*, a number of problems, or *Not checked yet*. Press **check now** to get one.
|
|
14
|
+
|
|
15
|
+
The workspace first decides what kind of document each file is. It uses the `type` in the file, an initiative record that names the file, the file name, or the headings. Then it compares the file only with what that kind of document must agree with:
|
|
16
|
+
|
|
17
|
+
| Kind of document | Compared with |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Initiative record | The PRD, rubric and explainer it points to. Each must exist and name the initiative. |
|
|
20
|
+
| PRD | Its initiative record, its rubric, and the decisions it cites. |
|
|
21
|
+
| Rubric | Its PRD. The dimension weights must sum to 1.00. |
|
|
22
|
+
| Story | Its PRD. Each requirement the story cites must exist in the PRD. |
|
|
23
|
+
| Decision record | The decisions file. The decision must be recorded there. |
|
|
24
|
+
| Any other markdown file | Its own links and dates only. |
|
|
25
|
+
| JSON file | Its own syntax only. |
|
|
26
|
+
|
|
27
|
+
A file that nothing declares a kind for is **not classified**. The workspace never compares it with another file.
|
|
28
|
+
|
|
29
|
+
Each document row shows what it was compared with. Each finding is one sentence. It names the documents and says what the source says. The groups are:
|
|
30
|
+
|
|
31
|
+
- **Problems.** A statement is contradicted by its source. For example, a link points to a file that does not exist.
|
|
32
|
+
- **Stale.** A source changed after the document did, or the date in the document has passed. A source must be at least one hour newer than the document to count.
|
|
33
|
+
- **Worth a look.** The structure cannot decide. For example, a PRD does not name the rubric that names it.
|
|
34
|
+
- **Checked and fine**, and **not classified.** Open a group to see its documents.
|
|
35
|
+
|
|
36
|
+
The record of problems is the file `claims.jsonl` in the runs folder of a PMOS repository. Press its name to read it in a tab. It lists every claim that is not verified. It does not list claims that verified the first time.
|
|
37
|
+
|
|
38
|
+
**Automatic checking** is off until you turn it on for a repository. When it is on, the workspace looks for changed files about every ten seconds. It waits until the files have stopped changing for about eight seconds. Then it re-checks the changed documents and the documents that cite them. It re-checks no others. The check reads only files that changed. It makes no network request.
|
|
39
|
+
|
|
40
|
+
A verdict of *Consistent* means that no recorded statement contradicts its source. The workspace does not read prose. A sentence that no structure records is not checked.
|
|
41
|
+
|
|
42
|
+
## Check with TypeSafe
|
|
43
|
+
|
|
44
|
+
## What leaves your machine
|
|
45
|
+
|
|
46
|
+
Validation is off until you turn it on. Until then, the workspace sends nothing.
|
|
47
|
+
|
|
48
|
+
When you turn it on, the workspace sends document text to `api.typesafe.ai`. It sends nothing else. It does not send binary files. It does not send a document that you excluded. It does not send a document that matches a credential pattern, such as a private key or a token. It lists that document as withheld.
|
|
49
|
+
|
|
50
|
+
The workspace reads the TypeSafe key only on this machine. After you save the key, the screen does not show it again. The workspace does not give the key to a terminal or to an agent.
|
|
51
|
+
|
|
52
|
+
## Set it up
|
|
53
|
+
|
|
54
|
+
1. Open **validate** in the settings and tools drawer.
|
|
55
|
+
2. Under **TypeSafe key**, paste the key and press **save**. Press **remove** to delete a saved key.
|
|
56
|
+
3. Under **this repository**, press **turn on**. This choice applies to the selected repository only.
|
|
57
|
+
4. Enter the paths that the workspace must never send, one for each line. A path ends with `/` for a folder. A `*` matches any characters. Press **save excluded paths**.
|
|
58
|
+
|
|
59
|
+
## Run a validation
|
|
60
|
+
|
|
61
|
+
1. Press **show what would be sent**. The workspace shows the number of requests, the number of characters, and the documents it withholds. It sends nothing at this step.
|
|
62
|
+
2. Press **confirm and send**. If the repository changed since the plan, the workspace refuses and asks you to read the plan again.
|
|
63
|
+
|
|
64
|
+
The workspace does the local checks first. It finds links that point to a file that does not exist. It finds documents whose `stale_after` date has passed. It reads the workflow sweep. These checks send nothing.
|
|
65
|
+
|
|
66
|
+
Then it asks Jev these questions about each document: Does the document contradict itself? Can a reader tell what it is for? Is the writing succinct? For an old document, it also asks if the document is out of date. For documents that link to each other, it asks if they state conflicting facts. For a document that names its sources, it asks if the source supports the claims.
|
|
67
|
+
|
|
68
|
+
## Read the findings
|
|
69
|
+
|
|
70
|
+
A finding has a severity, a rule, a confidence and the files it concerns. Press a finding to open the first file.
|
|
71
|
+
|
|
72
|
+
- **Confidence** shows how sure the answer is. For a yes-or-no question, the workspace derives it from the probability that Jev returns. A finding with low confidence says **for your judgement**.
|
|
73
|
+
- **Coverage** is the first line under **findings**. Read it first. It shows how many requests Jev answered, and how many documents were withheld, too large, excluded or failed. A short list of findings does not mean the repository is clean.
|
|
74
|
+
- A finding is advice. It does not change a file. It is not an acceptance. You decide what to do.
|
|
75
|
+
|
|
76
|
+
The workspace keeps the findings in `validation-findings.jsonl`. In a PMOS repository, this file is in the runs folder. In another repository, it is in the runtime folder of this machine. The file holds the answers. It does not hold document text.
|
|
77
|
+
|
|
78
|
+
## Limits
|
|
79
|
+
|
|
80
|
+
Jev's verdicts are advice until a person compares them with real decisions. The workspace does not yet measure how often Jev is right. Treat a high-confidence finding as a reason to look, not as proof.
|