T9.9 - C4 + the backlog sweep: nine entries closed, each re-measured first
The colour half (C4, approved Aug 18 - "change them"):
- BL-004: the help centre's own 52-colour palette collapsed onto theme tokens
- BL-005: the JS-built dialogs (auth-guard, wp-format) and project-data's
badges read tokens; the creator's categorical badge palette moved to
theme-light as --wp-chart-1..10, read by computed style at boot; the print
popup - a document with no stylesheet - inlines live token VALUES
- BL-008: the second brand blue (#2563d6) is deleted; .sop-inherited tints
with THE blue at the same 7% alpha
- BL-009: the ninth amber (--wp-status-warning-text-alt) is deleted
- theme-light gained the two missing feedback tokens the consoles carried as
literals (--wp-status-success-text / -error-text)
- NEW tests/color_check.py 4/4: zero hex literals outside theme-light.css,
comments stripped (the BL-017 lesson), with the exceptions named in full
(meta theme-color cannot resolve a var; rgba alphas are opacity recipes)
The correctness half, each re-measured before touching, as the task ordered:
- BL-011 STILL REPRODUCED: the sync badge mounted on the first async sync
event; its holder now mounts at DOMContentLoaded, so the three overlays land
in script order deterministically
- BL-012 fixed and MEASURED: baseline_shots freezes Date and Math.random per
document; two consecutive admin captures came back byte-identical
- BL-016 fixed: a step-less wizard URL is step 1; stepper_check's deliberately
wrong pin flipped with the fix, exactly as the entry planned
- BL-018 fixed both halves: the false-complete write now requires the
{sop,state} production shape, and browser_check.seed writes that shape -
which un-detoured four probes' creators from the SOP gate. stepper_check
re-pointed at projB (no SOP) because its premise is a wizard someone is
STARTING, and projA now legitimately restores a finished one.
- BL-019 fixed: a stored cost code that left COST_CODES is kept as an option
(the gov_wosize pattern), so opening a package no longer blanks its record
- hold_check's AST sweep refined in passing detection: it flagged T8.3's
notification-row .status as a release transition; it now reads wp.status only
Every wave-9-pointing backlog entry is closed with its measurement recorded.
Verification (each probe run alone): color_check 4/4, stepper_check 71/71,
validation_check 77/77, url_state_check 23/23, autosave_check 34/34,
a11y_check 22/22, launcher_check 58/58, aggregates_check 16/16,
kitting_check 26/26, hold_check 50/50, mobile_check 24/24, frame_check 38/38,
sections_check 95/95, form_structure_check 50/51 (BL-022's question).
Items: C4, BL-004, BL-005, BL-008, BL-009, BL-011, BL-012, BL-016, BL-018, BL-019
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1944,7 +1944,11 @@ function renderPackage(pkg){
|
||||
}
|
||||
function printPackage(){
|
||||
const c=document.getElementById('pkg-doc').innerHTML; const w=window.open('','_blank');
|
||||
w.document.write(`<!DOCTYPE html><html><head><title>Work Package</title><style>body{font-family:Arial,sans-serif;font-size:12px;line-height:1.6;color:#1a2230;padding:40px;max-width:820px;margin:0 auto}h1{font-size:20px;margin-bottom:4px}h2{font-size:13px;font-weight:700;text-transform:uppercase;border-bottom:2px solid #cdd9f2;padding-bottom:4px;margin-top:22px;color:#2563d6}table{width:100%;border-collapse:collapse;margin:10px 0;font-size:11px}th{background:#f0f2f5;border:1px solid #ccc;padding:5px 8px;text-align:left}td{border:1px solid #ccc;padding:5px 8px}@page{margin:18mm}</style></head><body>${c}</body></html>`);
|
||||
// C4/T9.9 (and BL-008): the popup document has no stylesheet, so the theme's
|
||||
// values are read from the live page and inlined - including THE blue where
|
||||
// the second brand blue (#2563d6) used to be.
|
||||
const tok=(name)=>getComputedStyle(document.documentElement).getPropertyValue(name).trim();
|
||||
w.document.write(`<!DOCTYPE html><html><head><title>Work Package</title><style>body{font-family:Arial,sans-serif;font-size:12px;line-height:1.6;color:${tok('--cds-text-primary')};padding:40px;max-width:820px;margin:0 auto}h1{font-size:20px;margin-bottom:4px}h2{font-size:13px;font-weight:700;text-transform:uppercase;border-bottom:2px solid ${tok('--cds-highlight')};padding-bottom:4px;margin-top:22px;color:${tok('--cds-link-primary')}}table{width:100%;border-collapse:collapse;margin:10px 0;font-size:11px}th{background:${tok('--cds-layer-01')};border:1px solid ${tok('--cds-border-subtle-01')};padding:5px 8px;text-align:left}td{border:1px solid ${tok('--cds-border-subtle-01')};padding:5px 8px}@page{margin:18mm}</style></head><body>${c}</body></html>`);
|
||||
w.document.close(); w.print();
|
||||
}
|
||||
|
||||
@@ -2594,12 +2598,12 @@ const WP_NAV_CRITICAL_CSS = `
|
||||
body{--nav-w:288px;}
|
||||
body.wp-nav-collapsed{--nav-w:56px;}
|
||||
.wp-nav{position:fixed;top:var(--rail-top,48px);left:0;bottom:0;width:var(--nav-w);
|
||||
z-index:120;display:flex;flex-direction:column;overflow:hidden;background:#fbfbfc;
|
||||
border-right:1px solid #e0e0e0;}
|
||||
z-index:120;display:flex;flex-direction:column;overflow:hidden;background:var(--cds-layer-01);
|
||||
border-right:1px solid var(--cds-border-subtle-01);}
|
||||
.wp-nav-list{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;}
|
||||
.wp-nav-item,.wp-nav-link{display:flex;align-items:center;gap:11px;width:100%;
|
||||
background:none;border:0;text-align:left;cursor:pointer;font:inherit;}
|
||||
.wp-nav-badge{flex:0 0 28px;width:28px;height:28px;border-radius:5px;color:#fff;
|
||||
.wp-nav-badge{flex:0 0 28px;width:28px;height:28px;border-radius:5px;color:var(--cds-text-on-color);
|
||||
display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;}
|
||||
.wp-nav-body{min-width:0;flex:1 1 auto;}
|
||||
.wp-nav-num,.wp-nav-subj{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
@@ -2691,8 +2695,19 @@ function setWpNavView(view){
|
||||
// A stable colour per package so the same one is always the same swatch — the cue
|
||||
// Planner gets from its plan avatars. Hashed from the WP number, not its index, so
|
||||
// it doesn't shuffle when a package is added or deleted.
|
||||
const WP_BADGE_COLORS = ['#0f62fe','#8a3ffc','#007d79','#d02670','#ba4e00',
|
||||
'#1192e8','#198038','#a56eff','#9f1853','#005d5d'];
|
||||
const WP_BADGE_COLORS = (() => {
|
||||
// C4/T9.9: the values live in theme-light.css (--wp-chart-1..10), the ONE
|
||||
// place a colour may exist; this reads them at boot. The fallback array is
|
||||
// token NAMES, not values - if the theme fails to load there are no colours
|
||||
// anywhere, which is the correct failure.
|
||||
const cs = getComputedStyle(document.documentElement);
|
||||
const out = [];
|
||||
for(let k = 1; k <= 10; k++){
|
||||
const v = (cs.getPropertyValue('--wp-chart-' + k) || '').trim();
|
||||
out.push(v || 'var(--wp-chart-' + k + ')');
|
||||
}
|
||||
return out;
|
||||
})();
|
||||
function wpBadgeColor(p){
|
||||
const key = (p.number || p.id || '') + '';
|
||||
let h = 0;
|
||||
@@ -2920,7 +2935,18 @@ function loadPackageIntoForm(p){
|
||||
onClashChange();
|
||||
applyKind();
|
||||
buildTypePicker(); document.getElementById('wp_type').value=p.type||'';
|
||||
buildCostCodes(); document.getElementById('wp_cost').value=p.cost||'';
|
||||
buildCostCodes();
|
||||
// BL-019 (fixed at T9.9): setting a <select> to a value with no option does
|
||||
// NOTHING, silently - so a code that left COST_CODES blanked on open and the
|
||||
// next save wrote the blank over the record. Same fix as gov_wosize: keep
|
||||
// the stored value as an option so the round-trip preserves it.
|
||||
{ const cs=document.getElementById('wp_cost');
|
||||
if(p.cost && ![...cs.options].some(o=>o.value===p.cost)){
|
||||
const o=document.createElement('option');
|
||||
o.value=p.cost; o.textContent=p.cost+' (not in the current list)';
|
||||
cs.appendChild(o);
|
||||
}
|
||||
cs.value=p.cost||''; }
|
||||
set('wp_wbs',p.wbs);
|
||||
document.getElementById('wp_kit_status').value=p.kitStatus||'';
|
||||
buildSequencePicker(); document.getElementById('wp_seq').value=p.seq||'';
|
||||
|
||||
Reference in New Issue
Block a user