1175 Commits
Author SHA1 Message Date
Juan Denis 7249d2247b Drop plan citations from the controls styles 2026-10-25 23:27:17 -04:00
Juan Denis f2f9ec7267 Polish stepper rail and radio card selection
The vertical stepper rail floated between steps instead of joining the
markers, and the current step borrowed the focus ring. Radio cards
showed a radio dot beside the icon; the card already marks selection,
so the radio becomes a check badge in the corner.
2026-10-25 23:18:24 -04:00
Juan Denis 7c8519772f Add accessible form controls and field wiring
FormField now hands its control the id, aria-describedby, aria-invalid
and aria-required through context, so every settings form announces
its hint and validation without per-call wiring. IconButton gets a real
tooltip instead of title=, ProgressBar is a labelled progressbar with
tones and an indeterminate state, and Button takes `loading` without
changing width.

New controls the panel lacked: NumberField, Combobox (single, multiple,
creatable), TagInput, Calendar with DatePicker and DateRangePicker,
PinInput, Slider, RadioGroup, Stepper, TreeView, and FileDropzone with
FileUploadList. Rounding, date and file-type rules live in lib/ with
unit tests. All of them render on /style-guide/controls.
2026-10-25 23:18:24 -04:00
darren 228cfbf92f fix: show remote images by name, size and date on the server Docker tab (#186) 2026-10-25 23:18:07 -04:00
Juan Denis d00c4a72ea fix: bind file editor previews to their storage target 2026-10-24 15:00:57 -04:00
Juan Denis e955134e41 feat: run approved assistant deployments through persistent recipe operations 2026-10-24 06:30:26 -04:00
Juan Denis fd4795a376 fix: preserve search focus and ignore stale list responses 2026-10-24 06:29:24 -04:00
Juan Denis ada1276d39 feat: add pinned preview deployment controls and queued lifecycle feedback 2026-10-24 06:23:06 -04:00
Juan Denis 355157856f feat: add effective environment inspector with browser regression checks 2026-10-24 06:02:51 -04:00
Juan Denis d4f6b2af55 feat: expose value-free effective environment provenance through app access boundary 2026-10-24 05:58:02 -04:00
Juan Denis 0894b8ff5b fix: require provisioned runtime before advertising previews 2026-10-24 05:56:04 -04:00
Juan Denis ac0871c016 fix: start agent maintenance only in the guarded runtime phase 2026-10-24 05:14:36 -04:00
Juan Denis dd93f01fd6 refactor: keep File Manager download operations in the action hook 2026-10-24 05:02:47 -04:00
Juan Denis a853c91d61 fix: preserve File Manager deep links on initial mount 2026-10-24 04:54:38 -04:00
Juan Denis 8bf9f4681c test: cover File Manager tree races and listing failures 2026-10-24 04:51:50 -04:00
Juan Denis 3c5b948f2e test: enforce core boundaries and document extension rules 2026-10-24 04:48:54 -04:00
Juan Denis b534ee2baf refactor: split File Manager state and views with regression guards 2026-10-24 04:44:18 -04:00
Juan Denis e7ba1c2a89 refactor: route file operations through capability-checked adapters 2026-10-24 04:31:28 -04:00
Juan Denis fe42d19048 Feature templates the registry marks as featured
The Templates page only featured a hard-coded list, so `featured: true`
in a template (Prompture Hub, Torre) never reached the Featured-first
view. The page now honors the flag alongside the list, and bundled
templates carry it into the catalog and the published index.
2026-10-11 16:41:38 -04:00
Juan Denis e49c627640 Let memoized file rows skip unrelated re-renders
FileRow and FileCard were wrapped in memo, but every handler passed to
them was re-created on each render, so a keystroke or a selection
re-rendered every row of a large directory. useStableHandler gives the
rows fixed handler identities that still run the latest code.
2026-10-10 22:38:21 -04:00
Juan Denis 540b86c445 Give each schedule picker its own field ids
The picker hardcoded ids like sp-hour, so two on one page (one per
schedule card) produced duplicate ids and every label pointed at the
first picker's field.
2026-10-10 22:35:53 -04:00
Juan Denis 73a93a7b36 Let labels name the resource and server pickers
The pickers dropped an id, so the five labels above them named
nothing. They now put it on the trigger button; clicking the label
opens the picker. Ratchet 46 -> 41.
2026-10-10 22:35:28 -04:00
Juan Denis f033edb70d Use the shared uptime formatter on monitor pages
Monitors and MonitorDetail each carried a copy of formatUptimePercent.
2026-10-10 22:28:16 -04:00
Juan Denis c7a50510c7 Format build and backup durations through intl
Three hand-rolled copies printed untranslated "3m 0s" and never
reached hours ("75m 0s"). They now use the intl formatter ("1h 15m",
in the panel language), keeping each caller's placeholder. The cron
and deploy-console formats with tenths of a second stay as they are.
2026-10-10 22:27:17 -04:00
Juan Denis a636f2cdb1 Ratchet unassociated form labels at 46
The rest head a group of options, sit over read-only text, or label a
picker that does not forward an id yet. A new label must name its
field.
2026-10-10 22:25:44 -04:00
Juan Denis 0adb6bf752 Tie form labels to their fields
156 labels named no field: no htmlFor and no control inside, so
clicking one did not focus the input and screen readers announced the
input without a name. Each now points at its field through a useId()
id. The change is additive only (ids and htmlFor), checked by comparing
tokens with the previous version.
2026-10-10 22:25:37 -04:00
Juan Denis adb9ae8fbb Open clickable rows and cards from the keyboard
A row with onRowClick could only be opened with a mouse or the j/k
cursor: it took no Tab focus and ignored Enter. Clickable rows in the
tables, the grid and the card view are now focusable and open on Enter
or Space, with a focus ring. Keys on a button inside the row still
reach the button, and the cursor listener skips a key a row handled.
2026-10-10 22:17:18 -04:00
Juan Denis ca4bdb2236 Drop a needless exhaustive-deps disable
load is a useCallback with no deps, so listing it is exact.
2026-10-10 22:01:34 -04:00
Juan Denis 95a9e227fc Fix row deletes that read state from first render
The vault secret and variable-group columns were memoized without the
state their delete handlers read. Deleting a secret then refreshed a
null vault and reported failure; deleting a group variable sent group
null; deleting a group after a workspace switch reloaded the old
workspace's groups.
2026-10-10 22:01:16 -04:00
Juan Denis 89eb7fb2e3 Keep a server name typed during the pair lookup
The lookup's answer checked the name as it was when the code was
typed, so a name entered while it was in flight was overwritten with
the agent's hostname.
2026-10-10 22:01:08 -04:00
Juan Denis ada4d49ea4 Reload the file listing when the source changes
The listing effect watched only the path. Switching to a remote agent
that advertises no allowed paths keeps the path, so the panel host's
files stayed on screen under the agent's header, and edits went to
the agent against the wrong host's entries.
2026-10-10 22:01:06 -04:00
Juan Denis 9d750a4f6f Remove the /system process and service routes
Both used psutil without importing it, so every call has been a 500
since they were written. Nothing calls them: the process list and
service status come from /processes and /processes/services.
2026-10-10 21:51:15 -04:00
Juan Denis c98952b907 Load two stylesheets nothing imported; lint for orphans
The Coexistence page and the extension crash card were written with
their own stylesheets, but neither file was ever imported, so both have
always rendered without their layout. A new lint step,
check-orphan-files, fails on any src file nothing imports (SCSS
included) unless it is kept with a reason; it is what found these two.
2026-10-10 20:40:35 -04:00
Juan Denis 48aed13d65 Delete four more frontend files nothing imports
An app-detail SettingsTab and its shared helper left behind when the
page merged into service detail, a re-export shim nobody imports, and
an unused utility; with their 13 strings in every locale.
2026-10-10 20:38:41 -04:00
Juan Denis e0e1d271a4 Delete the dead query-runner stylesheet
420 lines styled a query runner component removed long ago. One of its
unscoped rules, .sidebar-section, was still sizing the File Manager
rail by accident; that rule moves into the File Manager stylesheet so
the compiled CSS for it is unchanged (compared before and after).
2026-10-10 20:36:51 -04:00
Juan Denis c7ea877d88 Send the journal priority filter to the API
Picking a priority in the Terminal's journal view highlighted the level
but never sent it, so the list was unfiltered. The API already filtered
on ?priority=; the client now passes it, with the fresh value rather
than the previous render's.
2026-10-10 20:33:12 -04:00
Juan Denis 84ac8684e3 Guard the remaining Docker tabs against stale loads
Volumes, Networks and Compose had the same two bugs fixed earlier in
Containers and Images: a late answer from the previously selected
server replaced the current list, and a failed load showed an empty
list (or the old one) instead of the error.
2026-10-10 20:31:25 -04:00
Juan Denis a7413e34fa Move File Manager dialogs into components
Four inline dialogs kept their open flags, targets and input values as
ten separate useState calls on the page. One dialog state now says which
is open, and NamePromptModal / PermissionsModal own their inputs; the
browser test drives all three flows and passes on the old code too.
The create-file dialog had no way to open it and is removed with its
strings.
2026-10-10 20:28:55 -04:00
Juan Denis ddaeb549ad Remove bare plan-section citations
Comments cited plan sections as "(§G3)" or "(§8 unification)", which
point into the same git-ignored plans the plan-number citations did.
References next to a real document (docs/REDESIGN_MAP.md §3) stay. Code
and runtime strings are unchanged (AST and token comparison).
2026-10-10 20:25:49 -04:00
Juan Denis e94537d0a4 Cut docstrings that narrate refactor history
The worst cases the audit named: docstrings and header comments that
told how three old copies drifted, or quoted subprocess counts that
were stale the day they were written, instead of stating the contract.
Each now says what the function does and keeps one line of why. Also
drops the always-zero n_cloud counter that existed only to keep a boot
log line's or-chain intact.
2026-10-10 20:21:00 -04:00
Juan Denis 78201eeefc Format dates and numbers in the panel's language
107 direct toLocaleString/DateString/TimeString calls followed the
browser's locale (or a hard-coded en-US/en-GB) instead of the language
the panel is set to, and built a formatter per call. They now go
through utils/intl (formatDate/Time/DateTime/Number), keeping each
site's components via parts. A missing date now renders the fallback
dash instead of "Invalid Date". Ratchet ceiling 115 -> 4.
2026-10-10 20:19:32 -04:00
Juan Denis 07b992704d Use the persistent-state hook in Terminal and Databases
Terminal's six log preferences and the Databases sidebar repeated the
same lazy localStorage read plus mirroring effect the File Manager
just dropped.
2026-10-10 18:53:51 -04:00
Juan Denis dac348596a Persist File Manager prefs through one hook
Six view preferences each had a lazy localStorage read plus a copied
mirroring effect. usePersistentState does both and tolerates storage
that throws, so the page no longer crashes on it; the panel as a whole
still needs storage for its auth tokens.
2026-10-10 18:53:01 -04:00
Juan Denis d5a6e83198 Drop seven frontend packages nothing imports
Six Radix primitives (accordion, avatar, progress, scroll-area,
separator, tooltip) and class-variance-authority are imported by no
file in the panel or any extension repo. boneyard-js stays: the
skeleton capture script keeps it on purpose as its upstream source.
2026-10-10 18:27:00 -04:00
Juan Denis 8b4a19bc95 Delete ten frontend files nothing imports
Components, hooks and a workflow-builder rules file left behind when
their last consumer was replaced or retired, along with their 76
strings in every locale and a style block only they used. Three
unreferenced components that were never wired in (the DNS cutover
drawer, member actions card and account security nudge) are kept:
whether to mount or drop them is a product call.
2026-10-10 16:09:21 -04:00
Juan Denis 6296887bad Remove internal plan citations from app code
Comments, docstrings and a few strings cited plan numbers ("plan 29
#9", "plan 86 §B2") from a git-ignored folder, so they pointed at
nothing; one reached users in a bottleneck hint. Code and frontend
strings are unchanged apart from those citations (checked by AST and
token comparison). A vhost still carrying the old asset comment reads
as undrifted, and a guard test keeps new citations out.
2026-10-10 15:50:45 -04:00
Juan Denis fd8abdda47 Ignore stale folder listings in the File Manager
Opening a folder while the previous listing was still loading let the
slow answer land last and set the current path back, pulling the user
into the folder they had just left. Only the newest browse may now
write.
2026-10-10 14:20:41 -04:00
Juan Denis b9456d1a9a Stop status pages claiming 100% with no data
Uptime columns defaulted to 100.0 and the pages formatted a missing
value as 100.00%, so a new monitor showed a perfect month. The average
also used 'uptime || 100', turning a fully down component (0%) into
100%. Missing data now reads as a dash and 0 stays 0; both status pages
share one helper.
2026-10-10 14:17:41 -04:00
Juan Denis db5f4df74a Show Docker list errors and ignore stale loads
The API now answers 503 when docker ps fails instead of an empty list,
so the Containers page no longer says "No containers" on a host
running many. The Containers and Images tabs show that error, and a
late answer from the previously selected server can no longer replace
the current server's list. Also fixes the local branch of the remote
Docker listing, which passed all= to a parameter named all_containers
and always failed.
2026-10-10 14:01:56 -04:00
Juan Denis 5e4ca2e8a1 Refetch logs with the values just chosen
Changing the line count, clearing a search or picking a journal unit
re-fetched through a closure from the previous render, so the request
used the old count, the old search pattern or the previous unit. The
loaders now take the new values explicitly. Also drops a stray brace
that kept the selected journal unit from ever highlighting.
2026-10-10 13:38:30 -04:00