create-pmos 0.157.0 → 0.158.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/c3-briefing-test.js +11 -0
- package/workspace/guide/briefing.md +2 -0
- package/workspace/package-lock.json +2 -2
- package/workspace/package.json +1 -1
- package/workspace/public/pm/console3.css +43 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pmos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.158.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-12T05:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-12T05:54:55Z"}
|
|
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-12T05:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-12T05:54:55Z"}
|
|
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-12T05:
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-10-12T05:54:55Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -118,6 +118,17 @@ process.on('unhandledRejection', (e) => { console.error(e); finish(1); });
|
|
|
118
118
|
const M = await open({ viewport: { width: 400, height: 900 } });
|
|
119
119
|
ok('R6 at 400 wide the Briefing does not scroll sideways', M.up && await M.page.evaluate(() => document.documentElement.scrollWidth <= innerWidth + 1 && document.getElementById('c3-root').scrollWidth <= innerWidth + 1), 'scrollWidth');
|
|
120
120
|
ok('R6 at 400 wide the stance and Needs you are on the page, with no day-part switch', await M.page.evaluate(() => !!document.querySelector('.stance') && document.querySelectorAll('[data-pg-dp]').length === 0 && !!document.querySelector('[data-c3pg="needs"]')));
|
|
121
|
+
/* c3-phone-layout: the five tabs share the width, the tool buttons fit on one row, and an avatar keeps its round look */
|
|
122
|
+
const ph = await M.page.evaluate(() => {
|
|
123
|
+
const W = innerWidth;
|
|
124
|
+
const tabs = [...document.querySelectorAll('.c3tabs [data-c3-tab]')].map((b) => b.getBoundingClientRect());
|
|
125
|
+
const tools = [...document.querySelectorAll('.c3top .tools > .ib, .c3top .tools > .psess, .c3top .tools > .c3pg-bell, .c3top .tools > .c3pg-menuwrap')].map((b) => Math.round(b.getBoundingClientRect().top));
|
|
126
|
+
const av = [...document.querySelectorAll('.nrow .av')].map((a) => a.getBoundingClientRect()).filter((r) => r.width);
|
|
127
|
+
return { tabs: tabs.length, inside: tabs.every((r) => r.left >= 0 && r.right <= W + 1 && r.height >= 44), rows: new Set(tools).size, toolsN: tools.length, av: av.length, round: av.every((r) => Math.abs(r.width - r.height) < 1) };
|
|
128
|
+
});
|
|
129
|
+
ok('phone: the five tabs are all on screen and each is a 44px target', ph.tabs === 5 && ph.inside, JSON.stringify(ph));
|
|
130
|
+
ok('phone: the tool buttons sit on one row', ph.toolsN >= 4 && ph.rows === 1, JSON.stringify(ph));
|
|
131
|
+
ok('phone: a person avatar is as wide as it is tall', ph.round, JSON.stringify(ph));
|
|
121
132
|
ok('0 no page error (400 wide)', M.errors.length === 0, M.errors.join(' | '));
|
|
122
133
|
await M.ctx.close();
|
|
123
134
|
return finish();
|
|
@@ -80,3 +80,5 @@ An item has its actions in one place only. On the Briefing, Today and Portfolio
|
|
|
80
80
|
## On a phone
|
|
81
81
|
|
|
82
82
|
At 400 pixels wide the Briefing is one column (greeting, cards, Needs you, Today, Portfolio pulse) with no sideways scroll. Each button in an opened row is 44 pixels high.
|
|
83
|
+
|
|
84
|
+
On a phone, every console page has the same top. The page title has Record at its right. The sunrise line is under it, then the tool buttons in one row. The five tabs share the width, and each tab shows an icon over its name, so Initiatives and Reports are always on screen. A count shows at the top right of its tab's icon. A person in a row shows as a small round letter, and you can tap anywhere in the 44-pixel square around it. A line that has a sentence and a due date wraps like normal text.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pmos-workspace",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.158.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pmos-workspace",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.158.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@xterm/addon-fit": "^0.11.0",
|
package/workspace/package.json
CHANGED
|
@@ -2172,3 +2172,46 @@
|
|
|
2172
2172
|
.c3 .cal3-bar i.p{background:var(--acc);opacity:.55}
|
|
2173
2173
|
.c3 .cal3-bar i.t{background:var(--border)}
|
|
2174
2174
|
.c3 .cal3-counts{gap:10px;font-size:var(--fs-1)}
|
|
2175
|
+
|
|
2176
|
+
/* ── Phone layout pass (initiative c3-phone-layout): at 760px and under, each console3 page fits a 390px screen ─────────────────
|
|
2177
|
+
* Layout only; the desktop is unchanged. The header puts Record beside the title and the tool buttons on one row; the five tabs
|
|
2178
|
+
* share the width, each an icon over its word; rows keep their chips, dates and avatars legible; switch rows wrap as whole groups. */
|
|
2179
|
+
@media (max-width:760px){
|
|
2180
|
+
/* header: title and Record on the first line, the sun line, then the tool buttons; the demo pill last */
|
|
2181
|
+
.c3.c3pg .c3top{gap:8px 6px;justify-content:flex-start}
|
|
2182
|
+
.c3.c3pg .c3top .tools{display:contents}
|
|
2183
|
+
.c3.c3pg .c3top>div:first-child{order:0;flex:1 1 auto;min-width:0}
|
|
2184
|
+
.c3.c3pg .c3top .c3rec{order:1;margin-left:auto}
|
|
2185
|
+
.c3.c3pg .c3top .c3pg-daylight{order:2;flex:1 0 100%}
|
|
2186
|
+
.c3.c3pg .c3top .tools>*{order:3}
|
|
2187
|
+
.c3.c3pg .c3top .tools>.c3rec{order:1}
|
|
2188
|
+
.c3.c3pg[data-c3-demo] .c3top .c3pg-demo{order:4;flex:1 0 100%;justify-content:center}
|
|
2189
|
+
/* tabs: five equal columns, an icon over a short word, the count on the icon's shoulder; nothing hides off the right */
|
|
2190
|
+
.c3.c3pg .c3tabs{gap:0;overflow-x:visible}
|
|
2191
|
+
.c3.c3pg .c3tabs button{position:relative;flex:1 1 0;min-width:0;flex-direction:column;justify-content:center;gap:3px;padding:6px 2px;font-size:var(--fs-1);line-height:1.1}
|
|
2192
|
+
.c3.c3pg .c3tabs button>svg{flex:none}
|
|
2193
|
+
.c3.c3pg .c3tabs .bdg{position:absolute;top:3px;left:calc(50% + 6px)}
|
|
2194
|
+
/* an avatar keeps its round 22px look; its 44px tap area is the transparent box around it */
|
|
2195
|
+
.c3.ph .nrow .av,.c3.ph .drow .av{width:44px;height:44px;min-height:44px;flex:none;border:0;background:radial-gradient(circle closest-side,var(--muted) 0 calc(100% - 12px),var(--border) calc(100% - 12px) calc(100% - 11px),transparent calc(100% - 10.5px))}
|
|
2196
|
+
/* a chip that holds a sentence and its date wraps as one line of text instead of two squeezed columns */
|
|
2197
|
+
.c3 .nrow .chips .chip2:has(>.dim){display:block;min-width:0;max-width:100%}
|
|
2198
|
+
.c3 .nrow .chips .chip2:has(>.dim)>svg{display:inline-block;vertical-align:-3px;margin-right:4px}
|
|
2199
|
+
.c3 .nrow .chips .chip2:has(>.dim)>span{display:inline}
|
|
2200
|
+
.c3 .nrow .chips .chip2>.dim{white-space:nowrap}
|
|
2201
|
+
.c3 .wrow .chips .jc{max-width:100%;white-space:normal;overflow:visible}
|
|
2202
|
+
/* a row's trailing button keeps its icon centred */
|
|
2203
|
+
.c3 .nrow .acts .ib{justify-content:center}
|
|
2204
|
+
/* a card head wraps its note under the title rather than squeeze both */
|
|
2205
|
+
.c3 .sect>.sh2,.c3 .brief .sect .sh2{flex-wrap:wrap}
|
|
2206
|
+
.c3 .sect>.sh2>h2,.c3 .brief .sect .sh2>h2{flex:0 1 auto;min-width:0}
|
|
2207
|
+
.c3 .card>h3{flex-wrap:wrap}
|
|
2208
|
+
/* switch rows (Calendar/Notes, Day to Yr): each switch stays in one piece and the row wraps between them */
|
|
2209
|
+
.c3 .calbar .lens{flex-wrap:wrap;gap:6px}
|
|
2210
|
+
.c3 .calbar .lens>.seg{flex-wrap:nowrap}
|
|
2211
|
+
/* Work's lead line: Open Briefing sits on its own line under the sentence */
|
|
2212
|
+
.c3 .lh .wk-min .pill{display:flex;width:max-content;margin-top:6px}
|
|
2213
|
+
/* Settings: search takes the row, the workspace picker the next */
|
|
2214
|
+
.c3.c3pg .c3set .st-hd .tools{width:100%}
|
|
2215
|
+
.c3.c3pg .c3set .st-hd input[type=text]{flex:1 1 100%;width:auto}
|
|
2216
|
+
.c3.c3pg .c3set .st-hd select{flex:1 1 0;min-width:0}
|
|
2217
|
+
}
|