T7.2 - F6/D3: the form gets structure - a section rail, one section open
F6 as amended by D3 (Aug 18): one page, persistent side navigation, sections collapsible, only the current one open by default, plus Expand all. Tabs were rejected in D3 because they hide sections a first-time author does not know exist. What changed: - The jump-chip strip (#section-nav, span onclick) is gone. In its place a <nav> section rail of real <button> entries, aria-current on the current section, 44px tap targets, above the form at 390px and beside it at 1440px. - Every section heading is now a disclosure <button> with aria-expanded and aria-controls. One section open at rest; Expand all (aria-pressed) opens everything and is remembered per browser. - Sections are URL-addressable (?section=, T4.2 machinery) and a deep link to a collapsed section expands it. Positional-id fallback removed: a card without an id gets a console.error and no rail entry, never an invented sec-N id that would ride into shareable URLs and move between visits. - General Information (1,288px on its own) split into #general-card and #assign-card (Assignment & Schedule). The split is presentational: both cards are the ONE CR-006 section `general` (WP_SECTION_NODES lists both), so wp-sections.js and the SOP wizard are untouched. CR-001's adjacency (P6 activity beside due date) is preserved and asserted. - gotoSection() flushes autosave, which the deleted chips used to do. - secMakeToggle() preserves every element child of a heading - help tips go outside the button, everything else inside the label. The first version cleared textContent and destroyed #saved-count, which killed boot one line short of wpCreatorReady with the page still visibly rendered. - BL-013 folded in per the task: the T3.4 focus ring on the rebuilt form. frame_check reports outline solid 2px on creator inputs. Height, measured not asserted: 5,399px before; 1,995px at rest at 1440x900. DONE-WHEN NOT FULLY MET - stated per CLAUDE.md rather than marked complete: "no single view exceeds roughly two screen heights at rest" reads 2.22 screens (1995/900). The remaining gap is page chrome this wave reworks: .ctx-bar (67px, T7.4) and .release-banner (45px, T7.5). The criterion was already amended once (D3, "at rest") and is not being moved again to fit; tests/form_structure_check.py keeps the check red and it is re-measured at the end of wave 7. Every other done-when entry passes. Backlog: BL-001's cause corrected a third time - at rest the overflow is help.js's .help-tip::after tooltip (481 vs 390), the S8 component T9.5 rebuilds; the tables still overflow only when expanded. Deliberately not fixed here - a fix would be thrown away with the component at T9.5. Verification (each probe run alone): form_structure_check 50/51 (the height check above), sections_check 95/95, generalinfo_check 49/49, frame_check 39/39 regression pass. Items: F6, D3, BL-013, BL-001 (re-measured) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -182,11 +182,20 @@ def run(page, base, tok):
|
||||
const p6 = document.getElementById('wp_p6_id').closest('.field');
|
||||
return due.nextElementSibling === p6;
|
||||
})()"""))
|
||||
chk("...inside General Information, so the CR-006 toggle governs them",
|
||||
# Re-pointed at T7.2, not relaxed. This used to assert DOM containment in
|
||||
# #general-card, and T7.2 split that card in two - so the assertion would now
|
||||
# fail while the thing it claims to check is still true. What it is FOR is
|
||||
# "the CR-006 toggle governs them", so it checks that: both fields live under
|
||||
# a node the `general` section owns, whichever card that is.
|
||||
chk("...owned by the General Information section, so its CR-006 toggle governs them",
|
||||
page.eval("""(() => {
|
||||
const card = document.getElementById('general-card');
|
||||
return card.contains(document.getElementById('wp_p6_id'))
|
||||
&& card.contains(document.getElementById('wp_p6_desc'));
|
||||
const owners = ['#general-card', '#assign-card']
|
||||
.map(sel => document.querySelector(sel)).filter(Boolean);
|
||||
const covered = id => {
|
||||
const el = document.getElementById(id);
|
||||
return !!el && owners.some(o => o.contains(el));
|
||||
};
|
||||
return covered('wp_p6_id') && covered('wp_p6_desc');
|
||||
})()"""))
|
||||
|
||||
print(" they persist, and survive a reload")
|
||||
|
||||
Reference in New Issue
Block a user