Clear the notepad of what this pass closed
Records what the work turned up on the way: no way to reach a stored secret from the params form, flow-level edits outside the undo stack, the mobile panel having no test id, and the Playwright specs leaving their users and flows in the development database. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KkmeRiyeYmVZqJVwuyHq9o
This commit is contained in:
co-authored by
Claude Opus 5
parent
e3b3d234ce
commit
881d5c1cf2
+31
-38
@@ -8,54 +8,47 @@ Deferring because out of scope is fine, but don't mention deferring than.
|
||||
|
||||
## Open
|
||||
|
||||
- BUG/UI: the sidebar background on dark mode does not match the background of the viewport/flow panel
|
||||
- BUG/UI: there is some strage dot (li item) sitting next to the appearance button
|
||||
- FEAT/UI: introduce User settings page showing up in the sidebar where the apperance, email password etc can be set (copy UX design from ../../n3xd/app)
|
||||
- BUG/UI: edge value labels should be opaque
|
||||
- BUG/UI: the popover which opens when clicking on an edge should be more compact, i.e. make label, value and last updated fit in a single row (truncate decimals)
|
||||
- BUG/API: `pytest tests/` deletes every user on teardown (`tests/conftest.py`), so running
|
||||
it against the development database logs you out of the running app. Point tests at their
|
||||
own database, or reseed with `init_db` afterwards.
|
||||
- BUG/UI: `SidePanel`'s mobile branch does not set `data-testid` on the `SheetContent`, so
|
||||
`[data-testid=node-panel]` does not exist on a phone. Mobile specs cannot address the panel.
|
||||
- FEAT/UI: no way to point a node parameter at a stored secret. The store and the
|
||||
`{"$secret": "name"}` reference both work, but the params form only produces literals, so a
|
||||
webhook secret typed there lands in `flow.json`.
|
||||
- FEAT/UI: flow-level edits (title, inputs) go through `FlowPanel.onChange` and stay outside
|
||||
the undo stack.
|
||||
- CHORE/UI: `make test-backend` cannot reach Postgres while the integrated stack is up —
|
||||
`compose.local.yml` does `db: ports: !reset []`. Run it against the container's address, or
|
||||
move the suite inside the compose network.
|
||||
- CHORE/UI: the Playwright specs run against the development stack and leave their users and
|
||||
flows behind, which is why the flowbar fills with `test_flow_*`. Give them their own data
|
||||
or clean up after themselves, as `pytest` now does.
|
||||
- CHORE/UI: the standalone Vite origin (`make dev-frontend` on :5173) is still not in
|
||||
`BACKEND_CORS_ORIGINS`. `scripts/setup.sh` regenerates the list on every `make init` and
|
||||
`compose.local.yml` re-declares it as a container variable that wins, so the origin has to
|
||||
be added in both places to work.
|
||||
- CHORE/INFRA: `test-backend.yml` runs pytest on the runner host, so it keeps the fixed
|
||||
container name and port 5432 that `compose.ci.yml` resets everywhere else. Two concurrent
|
||||
runs of that one job collide.
|
||||
- CHORE/FLOW: the InfluxDB token committed in the old `flow/nodes/influx_test.py` is in
|
||||
pushed history (`d222ce5`). Rotate it in InfluxDB; removing it from history needs a
|
||||
rewrite of published commits.
|
||||
- BUG/UI: six template Playwright specs fail on validation copy that no longer matches
|
||||
(`login`, `sign-up`, `reset-password`, `user-settings` theme persistence). Unrelated to
|
||||
the flow editor, which passes; fix or delete them with the `Item` cleanup.
|
||||
- CHORE/UI: `bunx playwright test` starts a dev server on :5173, which is not in the API's
|
||||
`BACKEND_CORS_ORIGINS`, so every spec fails at login. Run against the integrated stack
|
||||
with `PLAYWRIGHT_BASE_URL=http://app.localhost`, or add the dev origin to CORS.
|
||||
- FEAT/UI: no undo on the canvas. Deleting a node autosaves immediately, so a mis-click
|
||||
costs the node's source.
|
||||
- PERF/UI: the Monaco chunk is 2.6 MB. It only loads when a node panel opens, but the
|
||||
- PERF/UI: (deferred for now) the Monaco chunk is 2.6 MB. It only loads when a node panel opens, but the
|
||||
editor could be trimmed further or swapped for CodeMirror if that becomes a problem.
|
||||
- FEAT/UI: renaming a message updates only the node being edited; the nodes consuming it
|
||||
keep the old name and quietly disconnect. Offer to rename across the flow.
|
||||
- CHORE/INFRA: port the n3xd CI workflows (pre-commit, backend tests, Playwright shards,
|
||||
compose smoke) to `.gitea/workflows/`. The Gitea instance runs Gitea Actions and needs CI
|
||||
enabled per repository.
|
||||
- CHORE/FLOW: `app/flow/nodes.py` and `state.py` are excluded from strict mypy
|
||||
(`[[tool.mypy.overrides]]` in `pyproject.toml`). The node classes still carry prototype
|
||||
typing and redis-py types its calls as sync/async unions. Shrink the exclusion as each
|
||||
integration is revisited.
|
||||
- FEAT/API: per-hook shared secrets for `HttpNode` webhooks. They are mounted unauthenticated
|
||||
under `/hooks/{flow}/…` because devices cannot present a JWT.
|
||||
- FEAT/FLOW: state does not survive a restart — the engine runs on `MemoryState` unless
|
||||
`REDIS_HOST` is set, and there is no Redis compose service yet.
|
||||
- CHORE/FLOW: rotating `SECRET_KEY` makes the stored secrets unreadable, since the Fernet key
|
||||
is derived from it. Needs a re-encrypt path before anyone rotates in production.
|
||||
- CHORE/FLOW: `app/flow/nodes.py` is excluded from strict mypy (`[[tool.mypy.overrides]]` in
|
||||
`pyproject.toml`). The node classes still carry prototype typing, `croniter` ships no stubs
|
||||
and `influxdb_client` does not re-export its names. Shrink it as each integration is revisited.
|
||||
- PERF/FLOW: every save rebuilds the whole pipeline. Fine at the current flow count; rebuild
|
||||
only the touched flow when it starts to show.
|
||||
- FEAT/UI: reintroduce `--chart-*` tokens as one designed sequential scale when the first
|
||||
chart lands. The stock shadcn five were dropped because their light and dark values are
|
||||
unrelated hues.
|
||||
- CHORE/API: `backend/app/models.py` still holds the template's `Item` model. It has no
|
||||
purpose now that flows are persisted and can go with its routes and tests.
|
||||
- PERF/UI: both frontend bundles exceed the 500 kB warning threshold. Revisit chunking
|
||||
once the canvas and editor are in, since they will dominate.
|
||||
chart lands. The node sparkline draws one series in `--primary` and needs none.
|
||||
- PERF/UI: the app's entry chunk is 680 kB (210 kB gzipped) and exceeds the warning
|
||||
threshold. React Flow and Monaco are already lazy; a manualChunks split measured no better,
|
||||
so this needs route-level work on the shell rather than chunking config.
|
||||
|
||||
## Blocked
|
||||
|
||||
- FEAT/UI: a "Bug" icon on the node error bubble opening the console at the full error. The
|
||||
bubble now shows one line and the traceback only reaches the server log; there is no
|
||||
console in the roadmap yet for it to open.
|
||||
- FEAT/INFRA: MQTT broker and InfluxDB compose services for local development. The node types
|
||||
exist; a local broker would make them testable without external hardware.
|
||||
- CHORE/INFRA: `bun install` inside the frontend Docker build intermittently fails with
|
||||
|
||||
Reference in New Issue
Block a user