Skip to content

Add explicit startup experience hub - #334

Merged
MajorIncident merged 47 commits into
mainfrom
feature/startup-experience-hub
Oct 9, 2026
Merged

MajorIncident merged 47 commits into
mainfrom
feature/startup-experience-hub

Conversation

@MajorIncident

Copy link
Copy Markdown
Owner

Issue

Implements #330.

Current implementation

Startup detection

  • deterministic substantive saved-Intake predicate;
  • ignores automatic/presentation-only noise such as saved timestamps, bridge time, theme, Notes open state, table labels, action analysis IDs, and unchecked steps;
  • detects saved Intake, Student resume, and Instructor resume independently;
  • expired Classroom envelopes are not offered as Continue choices;
  • safe #join=<human-code> is detected but not auto-admitted.

Explicit startup hub

  • ordinary startup no longer silently resumes a stored experience preference;
  • explicit Standalone ?workspace= links remain authoritative and bypass the hub;
  • Continue section renders independent cards for saved Intake, Student class, and Instructor class;
  • Start / Join section uses Work independently, Join a class, and Run a class;
  • Administration / Maintenance remains a secondary privileged entry;
  • a join link highlights Join a class and leaves the human code untouched until normal Student routing consumes it;
  • opening the hub never clears saved work;
  • starting a fresh independent Intake requires confirmation when substantive saved Intake exists;
  • choosing a different Student/Instructor experience explicitly confirms replacement of the same-type valid resume;
  • expired same-type resumes are cleared only when the user explicitly chooses that new intent.

Resume recovery

  • Student/Instructor lifecycle controllers remain authoritative;
  • invalid/expired server-backed resumes can return to the required startup hub with a human-facing explanation rather than leaving a dead shell.

Coverage already added/updated

  • startup substantive-detection unit tests;
  • production-markup startup hub feature tests;
  • experience-role tests updated for no implicit preference/#join routing;
  • Standalone/Student/Instructor reload E2E now clicks the correct Continue card;
  • join-link integration now proves explicit startup Join before admission;
  • expired Student E2E proves stale context cannot silently resume.

Still in progress

  • run/fix repository quality + required browser gate;
  • startup-hub accessibility/mobile/reduced-motion audit;
  • README/architecture/security/workstream documentation reconciliation;
  • final exact-head validation and production verification.

Cold restart

Continue from feature/startup-experience-hub. Read #330 and docs/preproduction-hardening.md. Preserve the key invariant: startup intent is navigation/session state, not Intake persistence, and multiple resumable contexts must remain separate choices.

Copy link
Copy Markdown
Owner Author

Mini milestone — startup browser-gate repair

Head: 3f3cfad3a3b350d90f07a60f662e5d3f7fbdf9cb

Proven before this head:

  • repository npm run quality: green;
  • Dependency Review: green;
  • Template Manifest Guard: green;
  • CodeQL: green;
  • Classroom feature harnesses now explicitly activate Student/Instructor roles and the unit cascade is resolved.

Browser failure isolated from run #1552:

  • 26 browser tests passed, 12 skipped;
  • only 4 Standalone journeys failed;
  • clicking Work independently stayed data-experience-role="unselected".

Root cause:

  • isSubstantiveSavedIntake() compared the entire normalized Major Incident object shape against a synthetic baseline;
  • the real blank DOM collector includes empty changeControl.rollbackPlan / verification.result keys, while the synthetic baseline omitted them;
  • therefore the app-generated bridge timestamp autosave was falsely classified as substantive and triggered the replacement confirmation; Playwright auto-dismissed it.

Fix on this head:

  • Major Incident substantive detection is semantic, not structural;
  • default owner/risk/change-control/verification values do not count as work;
  • actual decision/risk content still does;
  • regression test now models the real blank Major Incident collector shape.

Next action: inspect exact-head CI and fix only concrete remaining validation failures.

Copy link
Copy Markdown
Owner Author

Recovery checkpoint — 2026-10-09

Recovered the interrupted #330 validation from live repository state.

Exact prior failure:

  • CI #1560: repository quality green; required browser gate had 29 pass / 12 intentional skips / 1 fail.
  • Sole failure: mobile Standalone Notes interaction in tests/e2e/standalone.spec.mjs.
  • Cause was test-locator churn, not product behavior: the test stored a role/name locator for Open notes, then the intentional toggle changed its accessible name to Collapse notes, so the locator no longer matched.

Fix:

  • commit 03629ee05fa69d0a77100e173d4fd1462235bfd4
  • test now locates the stable #notesWorkspaceToggle element while continuing to assert the accessible state/name behavior.
  • no production behavior changed.

Fresh exact-head validation is running as CI #1561. Dependency Review and Template Manifest Guard are already green; CodeQL and CI remain in progress.

Repo hygiene recovery:

Next action: finish exact-head CI; if all gates are green, complete docs/a11y reconciliation if still outstanding, mark PR ready, merge exact head, verify merged-main publication/runtime, close #330, then begin #316.

@MajorIncident
MajorIncident marked this pull request as ready for review October 9, 2026 16:10
@MajorIncident
MajorIncident merged commit ad7b983 into main Oct 9, 2026
5 checks passed
@MajorIncident
MajorIncident deleted the feature/startup-experience-hub branch October 9, 2026 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant