create-pmos 0.69.1 → 0.69.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/guide/layout.md +1 -1
- package/workspace/package-lock.json +1 -1
- package/workspace/package.json +1 -1
- package/workspace/public/pm/components.css +12 -4
- package/workspace/public/pm/panel-tabs.js +5 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pmos",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.2",
|
|
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-07T03:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-07T03:49:30Z"}
|
|
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-07T03:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-07T03:49:30Z"}
|
|
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-07T03:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-07T03:49:30Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -55,7 +55,7 @@ The dock holds your terminals, documents, conversations, skills and web pages. I
|
|
|
55
55
|
- Press **⋯** on a row to change the name, the initiative or the type of work.
|
|
56
56
|
- Press **✕** on a row to end the session. The row asks "End “name”?". Press **End** or **Cancel**. When you end the last running session on its own working copy, the message offers **Remove working copy**. This removes the folder only. The branch stays. If the folder has unsaved work, the workspace keeps it and tells you why.
|
|
57
57
|
- **+ Session** at the top of the dock, or **+** on an initiative, opens one sheet. Type a name, or leave it empty to name the session after the skill and the initiative. **For** is the initiative. **On** is where the session runs. **Automatic** uses the initiative's own working copy on `initiative/<id>` (made the first time), or the main tree when there is no initiative. You can also choose a branch that has a working copy, or **New branch…**. Then press **Blank session** (the CLI and model from Settings) or a skill. The session starts at once.
|
|
58
|
-
- The icons at the
|
|
58
|
+
- The icons at the top of the session list, under **+ Session**, show the sessions as a strip on top, give the dock the whole window (Focus), and fold the dock. They stay in view when you scroll the list. On top, a select chooses the group, and each session of the group is a button. **+** starts a session, and **✕** ends the session in front.
|
|
59
59
|
- To make the dock wider or narrower, drag its left edge. With the edge focused, the left and right arrow keys change the width in steps. Double-click the edge to go back to the default width. The width is kept in this browser.
|
|
60
60
|
- **Focus** in the dock gives the dock the whole window. The place and the detail are hidden, and the dock stays full width on every place. Press Focus again, or ⌘⇧J (Ctrl-Shift-J), to show the place again. Folding the dock also ends Focus.
|
|
61
61
|
- **Scratchpad** in the bar at the bottom of the dock opens and closes the scratchpad. The pad keeps one note for each terminal session, and one for the repository when no terminal is in front. **Send to terminal** types the note into the session in front and presses Enter. It is available only when a terminal is in front. **Copy** and **Clear** act on the note.
|
package/workspace/package.json
CHANGED
|
@@ -2500,13 +2500,21 @@
|
|
|
2500
2500
|
align-self: center;
|
|
2501
2501
|
padding: 0 6px;
|
|
2502
2502
|
}
|
|
2503
|
-
.fr-ds-
|
|
2503
|
+
.fr-ds-top {
|
|
2504
|
+
position: sticky;
|
|
2505
|
+
top: 0;
|
|
2506
|
+
z-index: 1;
|
|
2504
2507
|
display: flex;
|
|
2508
|
+
flex-wrap: wrap;
|
|
2505
2509
|
justify-content: flex-end;
|
|
2510
|
+
align-items: center;
|
|
2506
2511
|
gap: 4px;
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2512
|
+
padding-bottom: 6px;
|
|
2513
|
+
background: var(--background);
|
|
2514
|
+
}
|
|
2515
|
+
/* + Session keeps its whole label on its own row; the controls sit in a row under it, right-aligned, still above the list */
|
|
2516
|
+
.fr-ds-top .fr-session {
|
|
2517
|
+
flex: 1 0 100%;
|
|
2510
2518
|
}
|
|
2511
2519
|
.fr-ds-note {
|
|
2512
2520
|
margin: 0;
|
|
@@ -1139,6 +1139,7 @@ let dsMod = null;
|
|
|
1139
1139
|
if (!FIXTURE) import('./dock-sessions.js').then((m) => { dsMod = m; if (inFrame()) setState({}); }).catch(() => { dsMod = null; });
|
|
1140
1140
|
let dockParts = null;
|
|
1141
1141
|
let dockOrient = null;
|
|
1142
|
+
let dockHead = null; // the side list's head: + Session and the dock's controls, one node across paints
|
|
1142
1143
|
function frameDock() {
|
|
1143
1144
|
if (!dockMod || !inFrame()) return null;
|
|
1144
1145
|
const repo = currentProduct();
|
|
@@ -1429,16 +1430,18 @@ export function renderTabs(host) {
|
|
|
1429
1430
|
* the frame's dock (split stays only to undo one already made). */
|
|
1430
1431
|
if (ck && ds) {
|
|
1431
1432
|
const others = notListed(dsMod.listedSessionIds(ds));
|
|
1433
|
+
// The dock's own controls (tabs on top, Focus, Minimize) sit beside + Session at the head of the list, held in view while
|
|
1434
|
+
// the list scrolls: at the foot they were below every session, and a long list put them off screen.
|
|
1432
1435
|
setChildren(tabBar, vertical ? [
|
|
1433
|
-
fr
|
|
1436
|
+
dockHead || (dockHead = el('div', { 'data-tabs': 'vcontrols', class: 'fr-ds-top' })),
|
|
1434
1437
|
...dsMod.railNodes(ds, others.map((t) => dockTabRow(t, (act && act.id === t.id) || (splitTab && splitTab.id === t.id)))),
|
|
1435
|
-
el('div', { 'data-tabs': 'vcontrols', class: 'fr-ds-foot' }, state.splitId ? splitBtn : null, fr.orient, fr.focus, fr.fold),
|
|
1436
1438
|
] : [
|
|
1437
1439
|
...dsMod.stripNodes(ds, others.map((t) => dockTabChip(t, (act && act.id === t.id) || (splitTab && splitTab.id === t.id)))),
|
|
1438
1440
|
state.splitId ? splitBtn : null, fr.orient, fr.focus, fr.fold,
|
|
1439
1441
|
]);
|
|
1440
1442
|
}
|
|
1441
1443
|
|
|
1444
|
+
if (ck && ds && vertical) setChildren(dockHead, [fr.session, state.splitId ? splitBtn : null, fr.orient, fr.focus, fr.fold]);
|
|
1442
1445
|
if (tabBar.scrollLeft !== keepX) tabBar.scrollLeft = keepX;
|
|
1443
1446
|
if (tabBar.scrollTop !== keepY) tabBar.scrollTop = keepY;
|
|
1444
1447
|
// When the tab in front changes, the bar scrolls just enough to show it, so a tab opened at the far end of a crowded strip or a
|