14 KiB
Codex Project State
This file is the durable handoff record for Codex sessions working on Conductor. Read it before making changes, verify any drift against the current code, and update it at the end of each material work session.
Project
Conductor is a web-based, low-code builder for creating simple user interfaces backed by REST API endpoints. Its initial use case is IBM Concert Workflows / Rapid Infrastructure Automation, but the application must remain backend-agnostic.
Repository:
- Remote:
https://gitea.skeletonworks.online/vwiebe/conductor.git - Primary branch:
main - Workspace:
/home/vwiebe/projects/conductor - Initial fork commit:
cce97392f72049007cf00b0aa6c77fb8c8256191
Sources of Truth
Use these files in this order:
- Current source code and automated tests
TASKS.mdfor completed and remaining workdocs/response-mapping-model.mdfor response-binding decisionsshared/schemas/conductor-project.schema.jsonfor the accepted project-document shapedocs/REQUIREMENTS.mdfor product scopedocs/ARCHITECTURE.mdfor architectural directiondocs/BUILD_AND_TEST_PLAN.mdfor historical milestone and validation guidance
Some root-level documentation duplicates files under docs/. The docs/ copies should become authoritative, but that cleanup has not yet been completed.
Core Architectural Decisions
- The canonical source of truth is one versioned JSON project document.
- The Visual Editor, JSON Editor, Preview runtime, persistence layer, validation, and future AI tooling must operate on the same canonical document.
- Runtime state must remain separate from the canonical document.
- Projects are persisted in SQLite for the MVP.
- External REST requests must flow through the backend proxy.
- Secrets must never be intentionally exposed to the browser or stored in exported project JSON.
- Top-level
project.bindingsis the canonical data-flow mechanism. action.responseMappingis deprecated and must not be used for new behavior.- New action-response bindings should use
onSuccess; legacyonClickresponse bindings remain compatible. - Production deployment should use an external reverse proxy.
- Conductor must remain functional without AI services.
Current Implementation State
Foundation
- React and TypeScript frontend
- Node.js, Express, and TypeScript backend
- SQLite database initialization and project persistence
- Project CRUD API
- Health and validation endpoints
- Dockerfiles and Docker Compose configuration
- Application layout, navigation, and shared project context
- Project creation, save, update, and load controls
Project model and editing
- Canonical project JSON model at schema version
0.1.0 - Shared JSON schema and frontend TypeScript types
- Backend schema validation
- Valid and intentionally invalid example project definitions
- Visual Editor and JSON Editor operating on shared project state
- JSON syntax and schema validation before JSON Editor changes are applied
Active GUI components
All eleven schema-supported MVP components are available in the palette and have canvas, property-editor, and Preview support:
- Label
- Button
- Text Input
- Dropdown
- Table
- Text Area
- Checkbox
- Radio Group
- Status/Message Panel
- Container/Card (flat presentational title and body; nesting deferred)
- JSON Viewer
REST and Preview runtime
- REST action model supporting GET, POST, PUT, PATCH, and DELETE
- Visual anonymous REST action creation, editing, duplication, and reference-aware deletion in Actions & Bindings
- Progressive request controls for endpoint URL, headers, query parameters, static path parameters, and request bodies
- Valid action edits synchronize immediately to the canonical document; invalid form drafts stay local
- Anonymous server-side REST execution
- Request URL, header, query, path, and body templates
- Normalized proxy response envelope
- Button-triggered action execution in Preview
- Runtime component, action, and variable state
- Response mappings to Label and JSON Viewer values
- Response mappings to Dropdown options
- Response mappings to Table rows
- Response mappings to project variables
- Table row selection
- Binding and action diagnostics
- Frontend unit tests covering templates, bindings, variables, dropdowns, and tables
Known Gaps and Risks
- Basic, Bearer, and API-key authentication types are modeled but currently execute anonymously.
- Secure credential storage and secret resolution are not implemented.
- The REST proxy still needs endpoint allowlisting, SSRF protection, and stricter header and URL validation.
- Sanitized execution history and troubleshooting views are not implemented.
- Visual REST action, Button event, request-input, response-binding, and variable authoring are implemented; page-load actions still rely on JSON editing.
- Project documents are validated in the JSON Editor, but save operations still need an unconditional validation gate.
- Backend and end-to-end automated test coverage remains incomplete.
- IBM Bob/watsonx will not be used; AI is provider-neutral and post-MVP.
- All five modeled authentication modes are required for MVP.
- MVP completion is defined by the six workflows in
MVP_SCOPE.md. - Root-level requirement and architecture documents duplicate files under
docs/and may drift.
Validation Status
The initial repository push was completed on 2026-07-18.
- Remote
maincontains commitcce97392f72049007cf00b0aa6c77fb8c8256191. - The working tree was clean immediately after the push.
- All
:Zone.Identifiersidecar files were removed before the initial commit. - Node 20/npm 10 clean installs pass after repairing the frontend lockfile.
- Slice 2 Increment 1 frontend validation passes under Node 20/npm 10: 9 suites and 456 tests, plus the production build.
- Backend build and the schema fixture matrix pass: 13 valid fixtures, 2 expected schema failures, and 2 diagnostic-invalid fixtures that remain structurally valid.
- Standalone frontend
tsc --noEmitis blocked by the existing TypeScript 4.9 /@types/node@26.1.0dependency mismatch; the CRA TypeScript production compile passes. - In-app browser automation could not start during implementation while Docker Desktop was not running. After Docker Desktop and the app were started, the user manually accepted Slice 2 Increment 1 on 2026-07-19, including a Button
onClickevent inserted through canonical JSON and reference-aware action deletion. - Docker Compose builds and starts both services.
- Health, CRUD, cleanup, and restart persistence pass.
- See
BASELINE.mdfor exact evidence and remaining release work. - Manual Slice 1 acceptance passes for component configuration, Preview interaction, JSON synchronization, save/load persistence, and existing-component regressions.
Immediate Priorities
Unless the user chooses a different priority, proceed in this order:
- Complete the pending manual acceptance for request-input authoring and the proportional response-binding/variable workflow.
- Add visual page-load action configuration.
- Add validation to every project save path.
- Implement authentication and secure secret handling.
- Harden the REST proxy and add sanitized execution logging.
- Add backend, end-to-end, and security regression tests.
- Reconcile and consolidate project documentation.
See TASKS.md for the complete actionable checklist.
Working Conventions
- Keep the canonical schema, frontend types, backend validation, examples, editor, and runtime synchronized.
- Any project-model change must include schema validation of valid and invalid examples.
- Prefer small, focused changes with tests over broad rewrites.
- Do not execute deprecated
action.responseMappingrules. - Do not store runtime values in canonical project JSON.
- Do not commit secrets, environment files, SQLite databases, dependency directories, or build artifacts.
- Preserve backend-agnostic REST behavior; do not couple core runtime logic to IBM-specific services.
- Clearly distinguish implemented behavior from schema-only or planned behavior.
- Update
TASKS.mdwhen a task is completed, added, removed, or materially re-scoped.
Session Start Checklist
At the beginning of a new session:
- Read
CODEX.mdandTASKS.md. - Run
git status --short --branch. - Inspect recent commits with
git log --oneline -5. - Verify relevant source files before relying on this handoff; this document may lag behind code.
- Confirm the selected task and its acceptance criteria.
- Run focused baseline tests when dependencies are available.
Session End Checklist
After material work:
- Update completed and remaining items in
TASKS.md. - Update the implementation state, gaps, validation status, and next priority in
CODEX.md. - Record the exact commands run and whether they passed when validation results materially changed.
- Ensure documentation matches any schema or runtime decisions made during the session.
- Report modified files, tests, builds, and unresolved blockers to the user.
Latest Handoff
Date: 2026-07-20
- Completed Slice 2 Increment 1: visual anonymous REST action creation, editing, duplication, and reference-aware deletion.
- Added method, URL, header, query, static path-parameter, and body controls with immediate canonical-document synchronization.
- Kept invalid drafts and all execution state outside canonical JSON; new and duplicated actions are anonymous and omit deprecated
action.responseMapping. - Added focused validation for action IDs, URLs, duplicate IDs, header names, unsupported path-parameter templates, and referenced deletion.
- Added
valid-visual-rest-actions.jsonand 23 focused tests. - Validation passes under Node 20/npm 10: 9 frontend suites / 456 tests, frontend production build, backend TypeScript build, and the 13 / 2 / 2 schema matrix.
- The user manually accepted the Increment 1 REST action authoring and referenced-action deletion workflow after starting Docker Desktop and the app.
- Standalone frontend
tsc --noEmitremains blocked by the existing dependency mismatch. Browser automation remained unavailable; user manual acceptance passed. - Slice 2 REST action and Button event configuration was committed and pushed as
3994eaa.
Increment 2 Addendum
- Completed visual Button
onClickaction selection with no-action, add/change/clear, unrelated-event preservation, and missing-action diagnostics. - Canonical
component.eventsupdates immediately; automated coverage confirms Preview executes the selected REST action. - Reconciled request inputs:
ComponentEvent.inputMapis compatibility-only and is not consumed. Request-input UI must write executed REST request templates. - Updated schema/type documentation and the representative visual REST fixture.
- Validation passes: 12 frontend suites / 462 tests, frontend production build, backend build, and the 13 / 2 / 2 schema matrix.
- Standalone frontend
tsc --noEmitretains the recorded dependency failure. - Automated browser validation was unavailable. The user manually accepted the Increment 2 Button
onClickworkflow on 2026-07-19 by creating a REST action and assigning it visually to a Button. - Visual request-input authoring and its handoff were committed and pushed as
6fd084c.
Request Input Addendum
- Added guided component/variable reference insertion to REST action URL, header, query, and body template fields.
- The UI writes only executed
{{components.<name>.value}}and{{variables.<name>}}templates; path parameters andComponentEvent.inputMapremain excluded. - Header/query destinations replace the selected value; URL/body destinations append for further composition in the existing raw editor.
- Added pure canonical-update and UI interaction coverage.
- Validation passes: 14 frontend suites / 467 tests, frontend production build, backend build, and the 13 / 2 / 2 schema matrix.
- Standalone frontend
tsc --noEmitretains the recorded dependency failure. - Manual request-input acceptance remains pending.
NEXT_SESSION_PROMPT.mdcontains the continuation scope and manual request-input acceptance checklist.
Response Binding and Variable Addendum
- Added visual create, edit, and delete support for canonical top-level
project.bindings. - New action-response bindings select an existing REST action and unambiguous supported component or variable target and always default to
trigger: "onSuccess". - Existing legacy
onClickbindings remain editable and executable and can migrate one-way toonSuccess; the UI cannot create new legacy triggers. Deprecatedaction.responseMappingremains unused. - Added visual variable declaration, renaming, type/default-value/description editing, deletion, validation, and reference-aware deletion warnings. Preview continues to copy defaults into ephemeral runtime state.
- Updated
valid-visual-rest-actions.jsonwith representativeonSuccesscomponent and variable targets. - Focused tests pass under Node 20/npm 10 at 2 suites / 14 tests; the full frontend suite passes at 15 suites / 477 tests. The CRA production compile, backend build, and 13 / 2 / 2 schema matrix pass.
- Standalone frontend
tsc --noEmitstill fails in@types/node/ffi.d.tsbecause TypeScript 4.9 cannot parse the resolved@types/node@26.1.0; this remains separate from the passing CRA compile. - Docker validation could not begin during the 2026-07-20 audit because Docker Desktop integration is unavailable in this WSL distro. Request-input manual acceptance remains pending and has not been marked accepted. Response-binding/variable manual acceptance is also pending.
- Page-load action authoring remains the next Slice 2 increment.
Partial Manual Request-Input Checkpoint
- On 2026-07-20, the user confirmed that adding the
itemquery-parameter row and using Request value reference to insert the selected component intoQuery: itemlooked correct. - This marks the guided query-reference insertion checkpoint complete only. Preview execution, outgoing-request inspection, runtime-state separation, raw-template regression checks, path-destination exclusion, and variable resolution still require explicit confirmation before the overall request-input workflow is accepted.