conductor/SAVE_073026.md

12 KiB
Raw Blame History

Conductor Save Point — 2026-07-30

Purpose

Resume Conductor from the current working tree at /home/vwiebe/projects/conductor and finish Slice 2 before starting Slice 2a or Slice 3.

Do not commit or push without explicit authorization. Do not restore the deliberately removed root documents or overwrite unrelated documentation-consolidation changes. Automated validation and manual acceptance must remain separately reported.

Resume Checklist

Read, in order:

  1. SAVE_073026.md
  2. ROADMAP.md
  3. SLICE2.md
  4. SLICE2a.md
  5. CODEX.md
  6. TESTING.md
  7. BASELINE.md
  8. MVP_SCOPE.md

Then run:

git status --short --branch
git log --oneline -5
git diff --check

Expected pushed baseline:

  • Branch: main
  • main and origin/main: 86ca42a Add page-load actions and component deletion safeguards
  • Everything described below is intentionally uncommitted and unpushed.

Working-Tree Boundaries

Preserve the intentional documentation consolidation already in the tree:

  • ROADMAP.md is the master work index.
  • SLICE2a.md is an untracked deferred-usability plan.
  • Root duplicate specifications were removed in favor of authoritative docs/ copies.
  • TASKS.md, NEXT_SESSION_PROMPT.md, and SAFETY_TEST_PLAN.md were deliberately removed.
  • Do not restore deleted files.
  • Preserve all unrelated modified slice, README, baseline, scope, testing, and handoff documents.

SLICE2a.md now records, but does not implement:

  • compatible component/variable suggestions in template-capable request fields, including after typing {{;
  • improved source/destination alignment in Request value reference;
  • common REST header-name suggestions such as Accept and Content-Type, while preserving custom header-name entry.

Do not begin Slice 2a until Slice 2 has final manual sign-off.

Completed and Manually Accepted This Session

Final workflow-launcher and dependent-data acceptance

Manual acceptance passed on 2026-07-30 and is recorded in TESTING.md, SLICE2.md, BASELINE.md, CODEX.md, and ROADMAP.md.

  • The workflow launcher was built visually with an environment Dropdown, hostname Text Input, Submit Button, JSON Viewer, canonical component request templates, Button onClick, and an onSuccess response binding.
  • Success echoed both runtime values.
  • HTTP 503 handling was readable, withheld onSuccess, and cleared stale errors after retry.
  • Page onLoad populated Dropdown options through https://httpbingo.org/anything.
  • Populated, empty, failed, and recovered dependent-data states passed.
  • Save/load and fresh Preview preserved canonical configuration and reset runtime state.
  • No inputMap, action.responseMapping, secrets, responses, loading flags, errors, selected runtime values, or loaded runtime options were persisted.

Page-onLoad diagnostics correction

Implemented and manually accepted:

  • frontend/src/components/ActionInspector/ActionInspector.tsx now passes pages into diagnostics.
  • Page-event action IDs and component-event action IDs both count as valid triggers.
  • Wording now says “component or page event” and recommends supported component events or page onLoad.
  • Page onLoad suppresses both the false untriggered-action information diagnostic and false binding warning.
  • A genuinely untriggered action still reports the revised diagnostic.
  • Existing component-trigger behavior remains valid.

Automated evidence:

  • Focused ActionInspector: 1 suite / 11 tests passed.
  • Complete frontend at that checkpoint: 20 suites / 493 tests passed.
  • Production build passed.

The first browser check showed the old bundle; a hard refresh loaded the rebuilt frontend and manual acceptance passed.

Runtime-aware Preview canvas sizing

Implemented and manually accepted:

  • frontend/src/components/Preview/Preview.tsx observes rendered component-wrapper dimensions.
  • The white Preview page grows when runtime content, especially a populated Table, exceeds design-time bounds.
  • It can contract back to design bounds after content becomes empty or smaller.
  • Measurements remain runtime-only and do not change canonical component positions or sizes.

Manual acceptance confirmed populated rows stay inside the white page, the expanded page remains scrollable, an empty result contracts to a usable empty state, and canonical Table size.height remains unchanged.

Current Implemented Increment — Manual Acceptance Pending

The remaining audited MVP component-property and basic-appearance controls are implemented, automated validation passes, Docker has been rebuilt, and proportional manual acceptance is the current gate.

Implemented behavior

  • JSON Viewer exposes Default JSON in the Visual Editor. Preview formats and displays the configured default before a runtime response arrives.

  • Table column definitions expose an optional numeric Width. Canvas and Preview render configured column widths.

  • Dropdown now exposes Required alongside Text Input and Text Area; Preview renders native required semantics for those three controls.

  • Canonical properties.style supports:

    {
      "fontSize": 20,
      "textColor": "#112233",
      "backgroundColor": "#ddeeff"
    }
    
  • The shared schema permits font sizes from 8 through 72 and six-digit hexadecimal colors.

  • Basic appearance authoring is available for selected components and applies to Visual Editor component content and Preview.

  • Reset controls remove individual color overrides; selecting the default font size removes the font-size override.

  • Absence of style overrides preserves existing component rendering.

  • This is per-component basic styling only. It does not introduce themes or post-MVP styling systems.

Files materially changed by this increment

  • frontend/src/components/VisualEditor/VisualEditor.tsx
  • frontend/src/components/VisualEditor/Canvas/CanvasComponent.tsx
  • frontend/src/components/VisualEditor/Canvas/CanvasComponent.module.css
  • frontend/src/components/Preview/PreviewComponent.tsx
  • frontend/src/components/Preview/PreviewComponent.module.css
  • frontend/src/components/Preview/mvpComponents.test.tsx
  • frontend/src/types/project.ts
  • shared/schemas/conductor-project.schema.json
  • Status/evidence documents listed above

Current automated validation

All passed under the documented Node 20/npm 10 toolchain:

  • Focused Preview property suite: 1 suite / 13 tests.
  • Complete frontend suite: 20 suites / 500 tests, 0 snapshots.
  • Frontend production build.
  • Backend TypeScript build.
  • Schema fixture matrix: 13 valid, 2 expected-invalid, 2 diagnostic-invalid.
  • git diff --check.
  • Docker Compose rebuild.
  • Both Docker services running.
  • Backend health returned status: ok.

Standalone frontend tsc --noEmit retains the existing TypeScript 4.9 / @types/node@26.1.0 dependency incompatibility and is separate from the passing CRA production compile.

Current Manual Acceptance Test

Hard-refresh http://localhost:3000 before testing so the rebuilt development bundle is loaded.

Use a disposable project or the existing acceptance project. Do not hand-edit JSON to create the configuration being tested; JSON inspection is allowed to verify canonical synchronization.

1. JSON Viewer default

  1. Add or select a JSON Viewer.

  2. Enter valid JSON in Default JSON, for example:

    {"status":"ready","count":2}
    
  3. Open Preview before any action populates the viewer.

  4. Confirm Preview displays formatted configured JSON.

  5. Inspect canonical JSON and confirm the value is stored only as the configured defaultValue.

Expected: configured default persists; no runtime response/loading/error fields are added.

2. Table column width

  1. Add or select a Table with at least one column and row.
  2. Set one columns Width to a recognizable value such as 180.
  3. Confirm the Visual Editor canvas uses that width.
  4. Open Preview and confirm the same column width is used.
  5. Inspect canonical JSON for the columns numeric width.

Expected: canvas, Preview, and canonical column configuration agree.

3. Required inputs

  1. Add or select a Text Input, Text Area, and Dropdown.
  2. Enable Required on each.
  3. Open Preview and inspect or exercise the controls.
  4. Confirm the rendered controls carry native required semantics.
  5. Confirm no current input/selection value is persisted into canonical JSON.

Expected: required is canonical configuration; runtime values remain ephemeral.

4. Basic appearance

Test representative components: Label, Button, one input, Table, Status Panel, and Card.

For each representative component:

  1. Set Font size to 20px.
  2. Set Text to a recognizable color.
  3. Set Background to a contrasting recognizable color.
  4. Confirm the Visual Editor canvas updates without changing the editors type badge/delete-control styling.
  5. Open Preview and confirm the component content uses the same appearance.
  6. Inspect canonical JSON and confirm only the selected component has the expected properties.style values.

Expected: style changes synchronize immediately across canonical JSON, canvas, and Preview without changing runtime state.

5. Reset and persistence

  1. Reset text and background colors.
  2. Select the default font size.
  3. Confirm default rendering returns and the individual keys are removed from properties.style.
  4. Save the project and reload it.
  5. Confirm non-reset property and appearance configuration persists.
  6. Open a fresh Preview and confirm runtime values, responses, loading, and errors are reset.

Expected: configuration persists; runtime state does not.

Manual result boundary

Do not mark this increment accepted unless all five sections pass. Record partial results and defects separately if only some sections pass.

How to Proceed After Power-On

  1. Run the resume checklist and confirm no unexpected working-tree drift.

  2. Run docker compose ps and verify backend health:

    docker compose exec -T backend wget -qO- http://localhost:4000/api/health
    
  3. If services are missing or source changed, run:

    docker compose up --build -d
    
  4. Hard-refresh the browser.

  5. Execute the complete current manual acceptance test above.

  6. If a defect is found:

    • reproduce it narrowly;
    • fix only the affected property/editor/canvas/Preview path;
    • add focused automated coverage;
    • run focused tests, the complete frontend suite, frontend production build, backend build if schema/types/backend-relevant code changed, and the 13/2/2 schema matrix;
    • rebuild Docker and rerun the failed manual section plus proportional regressions.
  7. If every section passes, update ROADMAP.md, SLICE2.md, TESTING.md, BASELINE.md, and CODEX.md, keeping manual acceptance distinct from automation.

  8. Continue Slice 2 in this order:

    1. Improve Actions & Bindings information architecture and readability with clearer cards, hierarchy, spacing, and summaries.
    2. Decide whether v0.1.0 needs a canonical configurable per-action timeout or should document the existing fixed backend timeout.
    3. Run consolidated Slice 2 automated validation.
    4. Run final proportional manual acceptance for remaining changes.
    5. Reconcile all Slice 2 status/evidence documents.
    6. Stop for explicit manual sign-off before starting Slice 2a or Slice 3.

Do not add Table pagination or action orchestration; both are post-MVP. Do not begin broad visual redesign outside the scoped Actions & Bindings information-architecture task while functional Slice 2 work remains.

Final Safety Checks Before Ending the Next Session

git diff --check
git status --short --branch

Report separately:

  • implemented changes;
  • automated validation;
  • manual acceptance status;
  • partial checkpoints or blockers;
  • remaining Slice 2 work;
  • commit/push state.