conductor/SAVE_073026.md

272 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```bash
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:
```json
{
"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:
```json
{"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:
```bash
docker compose exec -T backend wget -qO- http://localhost:4000/api/health
```
3. If services are missing or source changed, run:
```bash
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
```bash
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.