272 lines
12 KiB
Markdown
272 lines
12 KiB
Markdown
# 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 column’s **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 column’s 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 editor’s 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.
|