Vito Sansevero
afc77ef4ab
ci: raise the viewerjs job budget for the larger browser suite
...
The cross-browser workflows suite grew from 396 to 496 tests on this
branch, which pushed the whole viewerjs job to about 25.5 minutes
against the 25 minute cap set in #181 . Two exact-head runs on this
branch timed out without any test failing: run 39173019283 was killed
on test 474 of 496, and run 39175125474 printed "496 passed (12.8m)"
and was then cancelled during Playwright shutdown.
Raise only the job budget. Browser projects, workers and per-test
timeouts are unchanged. Splitting the browsers into parallel jobs is
tracked separately.
2026-10-18 16:45:19 -07:00
Vito Sansevero
86a3a44f75
test(history): repair Windows fixtures and review feedback
...
Address #209 and PR #227 native path, cleanup, media and review-comment expectations. Document Windows portability preflight without changing production behavior.
2026-10-18 16:00:43 -07:00
Vito Sansevero
b27842dc69
fix(history): resolve final chronological review findings
...
Address #209 recovery, bounded visit restoration, exact receipt availability, and portable regression coverage.
2026-10-18 15:16:42 -07:00
Vito Sansevero
c32d01e8aa
fix(history): enforce chronological marker visual parity ( #209 )
2026-10-18 14:21:50 -07:00
Vito Sansevero
3fb608bc21
test(history): verify chronological history across restore and host modes ( #209 )
2026-10-18 13:51:30 -07:00
Vito Sansevero
a3010e151e
fix(history): recover receipts and refresh capture evidence ( #209 )
2026-10-18 12:53:34 -07:00
Vito Sansevero
d2f449efc4
feat(history): render recorded executions and frozen run details ( #209 )
2026-10-18 12:33:30 -07:00
Vito Sansevero
1f62e7880a
fix(history): preserve slideshow and clear stale reentry actions ( #209 )
2026-10-18 12:07:00 -07:00
Vito Sansevero
e67b48ed52
feat(history): add scoped history state and current-file adapter ( #209 )
2026-10-18 11:57:16 -07:00
Vito Sansevero
b070d5455f
fix(history): reject invalid inspection targets ( #209 )
2026-10-18 11:45:09 -07:00
Vito Sansevero
aa7741000a
feat(history): resolve reported outputs through current authorization ( #209 )
2026-10-18 11:27:24 -07:00
Vito Sansevero
6e30853ed6
fix(history): release retired projection connections ( #209 )
2026-10-18 10:50:14 -07:00
Vito Sansevero
e7c45ca946
feat(history): expose fenced history windows and run details ( #209 )
2026-10-18 10:50:14 -07:00
Vito Sansevero
f9f54c867a
fix(history): validate internal continuation positions ( #209 )
2026-10-18 10:50:14 -07:00
Vito Sansevero
4f82800927
feat(history): add bounded chronological read projections ( #209 )
2026-10-18 10:50:14 -07:00
Vito
10197026be
fix(database): refuse unsafe restore file fallback ( #226 )
...
* fix(database): refuse unsafe restore file fallback (#223 )
* fix(database): retain safety backup limit after restore refusal (#223 )
2026-10-18 10:26:29 -07:00
Vito
ac23f22a37
fix(logging): close retired owned handlers ( #225 )
...
* fix(logging): close replaced owned handlers (#218 )
* fix(logging): keep retired file handlers closed (#218 )
2026-10-18 10:01:19 -07:00
Vito
d9537a726c
feat(workspace): complete shared inspector and collection viewer ( #224 )
...
* feat(inspector): expose bounded physical file evidence
* fix(inspector): distinguish ambiguous saved associations
* feat(inspector): derive conservative generation facts
* fix(inspector): guard fact ancestry and inspection state
* feat(inspector): share complete file details and exports
* fix(inspector): preserve fact states and touch targets
* feat(viewer): navigate the loaded media collection
Refs #216
* fix(viewer): refit after current stage geometry changes
Ref #216 . Observe the current media stage after readiness and wrapped title changes without rebuilding focused controls or resetting transforms at unchanged dimensions.
* feat(viewer): add lifecycle-safe slideshow and media preferences
* fix(viewer): resume gallery continuation after close (#216 )
* fix(images): guard source recovery and wrap viewer actions
Clear stale root and folder intent, cancel old pages, and wait for current source discovery before loading a refreshed collection. Preserve safe retry through failed, superseded, and disposed discovery.
Wrap narrow viewer footer actions and wait for measured gallery viewport settling in responsive checks. Refs #216 ; addresses PR #224 review.
* test(viewer): await gallery layout after viewport changes
Require actual inner, root client, and document widths to agree after each responsive-case viewport and CSS zoom transition. Keep the existing exact frame, overflow, focus, and coarse target assertions unchanged.
Observed PR #224 CI initial mobile resize at537px before pending card relayout settled to356px. Refs #216 .
2026-10-18 09:41:53 -07:00
Vito
e7cfcc2bfb
style(workspace): align browsing with the approved concept ( #219 )
...
* style(workspace): align approved shell and visual fixtures
* test(workflows): preserve evidence across browser projects
* style(workspace): match approved image browsing geometry
* style(workspace): match natural library card layout
* fix(workspace): retain wheel motion during row correction
* fix(workspace): contain zoomed controls and image metadata (#215 )
2026-10-18 02:53:26 -07:00
Vito
4ef236aaf7
feat(history): persist exact run output references ( #214 )
...
* feat(history): define bounded output reference contracts
* feat(database): migrate execution output evidence to schema v3
* feat(history): persist immutable run output references
* test(history): isolate mocked node gallery monitor
* feat(history): capture bounded output descriptors with shared leases
* fix(history): authenticate payload owners and release failed captures
* feat(history): attach output evidence to exact finalized attempts
* test(history): verify run output evidence on real ComfyUI
* fix(history): release idle worker payload references
* docs(history): clarify defensive lease cleanup
* test(history): align output fixtures with native path styles
* test(history): separate restore completion from writer drain
* test(history): bound batch drains by progress and total time
2026-10-17 23:26:37 -07:00
Vito
bae542c9ac
feat(history): persist exact execution prompt contexts ( #213 )
...
* feat(history): define exact bounded execution contexts
* fix(history): retain observable sources and validate evidence
* feat(history): migrate execution contexts to schema v2
* feat(history): persist immutable execution context snapshots
* fix(history): preserve package identity for execution contexts
* feat(history): bound context payloads beside lifecycle finalization
* fix(history): fence context commits and resolve stored run identity
* fix(history): bound persisted identifier bytes before restore reads
* feat(history): bind exact runtime context to execution attempts
* test(history): discover owner invalidation callback regression
* feat(history): capture cached prompt strings without mutating host caches
* test(history): verify durable contexts on real ComfyUI hosts
* fix(history): scope transforms to captured source paths
* test(ci): update execution context tooling fixtures (#209 )
* fix(history): harden context validation and worker fixtures (#209 )
* fix(history): honor close deadlines after early joins (#209 )
2026-10-17 19:51:22 -07:00
Vito
763e6b37b1
feat(history): record durable ComfyUI execution attempts ( #212 )
...
* feat(history): normalize bounded execution evidence (#209 )
* fix(history): bound lifecycle kind checks before hashing (#209 )
* feat(history): persist execution attempts with restore fencing (#209 )
* test(api): bootstrap standalone backup restore fixtures (#209 )
* feat(history): isolate bounded asynchronous ledger writes (#209 )
* feat(history): observe actual queue attempts without altering execution (#209 )
* fix(database): honor package-scoped configuration (#211 )
* test(history): exercise real cached and headless executions (#209 )
* fix(history): reject unsupported uniqueness and isolate package fixtures (#209 )
* test(history): support Python 3.10 package fixture cleanup (#209 )
2026-10-17 16:42:07 -07:00
Vito
fdba6fd012
feat(workspace): group saved negatives in the native Prompt Library ( #210 )
...
* feat(workspace): group saved negative variants in native library (#208 )
* fix(library): preserve full name order and batch previews (#208 )
2026-10-17 14:38:03 -07:00
Vito
dc345671ae
feat(workspace): inspect and send positive and negative prompts ( #206 )
...
* feat(workspace): inspect and send positive and negative prompts
* docs(workspace): capture complete inspector and viewer previews
* docs(inspector): explain the subprocess cleanup race
* fix(workspace): defer observed gallery layout writes (#207 )
* fix(inspector): keep path-only prompt associations unverified
2026-10-17 13:43:19 -07:00
Vito
76e9b51079
feat(bridge): add acknowledged ComfyUI prompt destinations ( #203 )
...
* feat(bridge): add guarded PromptManager prompt destinations
* fix(ci): install shared contracts before frontend unit tests
* test(comfyui): wait for paired editor resize before measuring layout
2026-10-17 13:14:02 -07:00
Vito
590aa2cd0e
feat(workspace): add native Images browsing and infinite scroll ( #201 )
...
* feat(workspace): add native image browsing and continuous loading
* test(workspace): assert empty collections through their status
* fix(workspace): rescan refreshed images and expose ancestor folders
2026-10-17 11:22:10 -07:00
Vito
d4bb5c5ba9
feat(ui): add the tested opt-in Prompt Manager workspace shell ( #198 )
...
* docs(ui): prototype unified prompt management application
* docs(ui): add masonry and per-image tagging to application concept
* docs(ui): make gallery concept use continuous infinite scrolling
* feat(ui): introduce the tested application workspace shell
* fix(docs): preserve concept controls across cached navigation
* test(ci): emit Python tracebacks for native test crashes
* test(ui): cover workspace restoration across cached navigation
2026-10-17 10:36:30 -07:00
Vito
caa9649f32
feat: reuse positive and negative prompt combinations ( #195 )
...
* feat(db): add pair schema and stage restore migrations for #193
* feat(database): persist reusable ordered prompt pairs (#193 )
* feat(api): expose reusable pairs and atomic metadata enrichment (#193 )
* feat(metadata): resolve canonical prompt pairs with bounded provenance (#193 )
* feat(scan): enrich image pairs without guessing or duplicate links (#193 )
* fix(database): preserve pair tags during global maintenance (#193 )
* feat(tracking): enrich live image pairs and cancel scans safely (#193 )
* feat(nodes): encode paired prompts and count cached recipe runs (#193 )
* fix(database): validate restored pair ownership and provenance (#193 )
* feat(admin): report pair scan outcomes and cancellation (#193 )
* feat(ui): add paired prompt editor and explicit recipe library for #193
* fix(autocomplete): include reusable pair metadata vocabulary (#193 )
* fix(pairs): honor recent sorting and conservative scan outcomes (#193 )
* fix(ui): protect paired draft saves and clarify negative variants (#193 )
* fix(metadata): preserve bounded paired execution evidence (#193 )
* fix(tracking): follow actual pair output roles and prefer execution evidence (#193 )
* docs(pairs): document live validation and retain renderer screenshots (#193 )
* test(api): inject disposable databases before API startup (#194 )
* test(api): canonicalize portable temporary gallery roots (#194 )
* docs(ui): prototype branching negative variant history (#193 )
* docs(ui): show selected negative beneath positive in timeline concept (#193 )
* docs: retain approved timeline for later gallery redesign (#193 )
* test(db): close restore fixture connections before cleanup (#194 )
* test(db): reuse existing handle guards in all pair fixtures (#194 )
* chore: clarify rollback test and intentional exception handling (#193 )
2026-10-17 08:00:42 -07:00
Vito
3870590704
feat(ui): add Split Prompt Manager workspace ( #192 )
...
* feat(ui): add Split Prompt Manager workspace (#186 )
* test(ui): use consistent unittest imports (#186 )
2026-10-17 06:47:46 -07:00
Vito
a52ff4e052
feat(ui): add Focused Prompt Manager with shared autocomplete ( #191 )
...
* feat(ui): add Focused Prompt Manager node (#186 )
* feat(ui): autocomplete saved Focused metadata with shared controls (#186 )
* feat(ui): autocomplete Focused library filters (#186 )
2026-10-17 05:31:24 -07:00
Vito
035e816db6
feat(ui): adopt shared toolkit for Prompt Manager Classic ( #190 )
...
* feat(ui): adopt shared toolkit for Prompt Manager Classic (#186 )
* test(ui): retain Text node Web UI coverage alongside Classic
* fix(tooling): reject lookalike toolkit download URLs (#186 )
2026-10-16 22:18:18 -07:00
Vito
f98f6fa08d
test(ci): validate shared toolkit in real PromptManager hosts ( #189 )
...
* test(ci): prove shared toolkit with real PromptManager host coverage
* test(ci): match KikoTools Python 3.13 compatibility coverage
2026-10-16 20:56:50 -07:00
Vito
ce82dfb912
fix: quiet routine console logging and prevent duplicate output ( #183 )
2026-10-16 09:58:05 -07:00
Vito
5ded3189c1
test: cover backup restore and destructive browser workflows ( #185 )
2026-10-16 07:56:15 -07:00
Vito
f1b1d4731b
test: exercise real page workflows and enforce frontend coverage ( #181 )
2026-10-16 06:45:20 -07:00
Vito
e9fe586442
fix: repair prompt edit hashes, auto-tag review, and stale UI responses ( #180 )
...
* fix: keep edited prompt hashes consistent
Fixes #176
* fix: align gallery auto-tag review with scoped image APIs
Fixes #177
* fix: keep Tags prompt results on the current filter
Fixes #178
* fix: ignore stale metadata in admin image viewers
Fixes #179
* test: compare canonical gallery paths on macOS
2026-10-16 06:14:06 -07:00
Vito
6d9f3fc8fb
fix: preserve gallery image identity and ignore stale metadata ( #175 )
...
* fix: preserve gallery root identity across media and metadata
Fixes #173
* fix: ignore stale gallery metadata responses
Fixes #174
* test: use platform-valid gallery filenames on Windows
2026-10-16 05:35:03 -07:00
dependabot[bot]
911b801883
deps(pip)(deps-dev): update aiohttp requirement ( #172 )
...
---
updated-dependencies:
- dependency-name: aiohttp
dependency-version: 3.14.5
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-16 05:23:48 -07:00
dependabot[bot]
a576cff69f
deps(pip)(deps-dev): update black requirement ( #171 )
...
Updates the requirements on [black](https://github.com/psf/black ) to permit the latest version.
- [Release notes](https://github.com/psf/black/releases )
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md )
- [Commits](https://github.com/psf/black/compare/26.10.0...26.10.1 )
---
updated-dependencies:
- dependency-name: black
dependency-version: 26.10.1
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-16 05:23:28 -07:00
Vito
cf0cef3f25
feat: vendor Viewer.js reproducibly and automate release updates ( #170 )
...
Refs #169 . Pin and verify pristine distribution assets, upgrade to 1.15.2, and add tested maintainer tooling plus desktop and touch browser checks.
2026-10-16 04:56:25 -07:00
Vito
7b6430e20a
fix: stop misleading thumbnail prompts on gallery startup ( #168 )
...
* fix: count pending thumbnails accurately across gallery roots
* fix: clear thumbnails across all configured gallery roots
* fix: log skipped thumbnail directory cleanup
2026-10-16 04:56:07 -07:00
Vito
611c19d2f4
fix: keep infinite-scroll gallery rendering and viewer work bounded ( #166 )
2026-10-16 04:17:20 -07:00
ghosttigerllc-bit and kai
2763e9f9fa
Read A1111/Forge generation parameters: fix the SELECT and parse multi-line prompts ( #165 )
...
* get_image_prompt_info: include gi.parameters in SELECT and return value
The function selects workflow_data, prompt_metadata and generation_time from
generated_images but omits the parameters column, so the A1111/Forge
generation-parameters string (steps, sampler, CFG, seed, LoRA list) never
reaches the API even when present in the database. Add it to the SELECT and
include it in the returned dict.
* parse A1111/Forge parameters: multi-line prompts, structured settings
_parse_comfyui_prompt took lines[0] of the parameters chunk as the whole
positive prompt, truncating every multi-line prompt to its first line, and
matched 'negative prompt:' only as a full line start. Split on the trailing
'Steps: ...' settings line instead, keep the full multi-line positive prompt,
and extract Steps / Sampler / Schedule type / CFG scale / Seed as structured
fields alongside the raw string.
Together with the get_image_prompt_info SELECT fix (previous commit), the
full A1111/Forge generation recipe now flows from the database to the API.
* style: apply black to the A1111 parameters parser
CI's black --check flagged py/api/__init__.py (slice spacing and two long
lines in the settings extraction). Formatting only; the AST is unchanged.
---------
Co-authored-by: kai <kai@hermes.local >
2026-10-16 03:50:26 -07:00
Vito Sansevero
3bb21c621c
chore: release 3.3.1
...
- Fix Prompt Manager UI routing behind a ComfyUI proxy mount such as
SwarmUI's /ComfyBackendDirect/ (#164 , thanks @ghosttigerllc-bit)
- Restore runtime minimums Pillow>=8.0.0 and watchdog>=2.1.0: nothing
requires the newer floors, and raising them forces upgrades in users'
shared ComfyUI environment
v3.3.1
2026-10-14 03:26:05 -07:00
ghosttigerllc-bit and Zayne
374ce6e7a8
Fix Prompt Manager UI routing behind a ComfyUI proxy ( #164 )
...
* Fix gallery folder filters behind SwarmUI proxy
* Route Prompt Manager UI requests through proxy mount
* Use Comfy frontend base for Prompt Manager node requests
---------
Thanks @ghosttigerllc-bit
Co-authored-by: Zayne <noreply@gtb.ai >
2026-10-14 03:18:29 -07:00
dependabot[bot]
e2ec6df3d4
deps(pip)(deps-dev): update numpy requirement from >=1.24 to >=2.2.6 ( #162 )
...
Updates the requirements on [numpy](https://github.com/numpy/numpy ) to permit the latest version.
- [Release notes](https://github.com/numpy/numpy/releases )
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst )
- [Commits](https://github.com/numpy/numpy/compare/v1.24.0...v2.2.6 )
---
updated-dependencies:
- dependency-name: numpy
dependency-version: 2.2.6
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 07:46:02 -07:00
dependabot[bot]
38daedf131
deps(pip)(deps-dev): update flake8 requirement from >=7.0.0 to >=7.4.1 ( #160 )
...
Updates the requirements on [flake8](https://github.com/pycqa/flake8 ) to permit the latest version.
- [Commits](https://github.com/pycqa/flake8/compare/7.0.0...7.4.1 )
---
updated-dependencies:
- dependency-name: flake8
dependency-version: 7.4.1
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 07:45:59 -07:00
dependabot[bot]
1e1b92a1ba
deps(pip)(deps-dev): update aiohttp requirement from >=3.8.0 to >=3.14.4 ( #159 )
...
---
updated-dependencies:
- dependency-name: aiohttp
dependency-version: 3.14.4
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 07:45:55 -07:00
dependabot[bot]
ef66d7bd3e
deps(pip)(deps): update watchdog requirement from >=2.1.0 to >=6.0.0 ( #156 )
...
Updates the requirements on [watchdog](https://github.com/gorakhargosh/watchdog ) to permit the latest version.
- [Release notes](https://github.com/gorakhargosh/watchdog/releases )
- [Changelog](https://github.com/gorakhargosh/watchdog/blob/master/changelog.rst )
- [Commits](https://github.com/gorakhargosh/watchdog/compare/v2.1.0...v6.0.0 )
---
updated-dependencies:
- dependency-name: watchdog
dependency-version: 6.0.0
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 07:45:52 -07:00
dependabot[bot]
f00d6408d8
deps(pip)(deps-dev): update pre-commit requirement ( #163 )
...
Updates the requirements on [pre-commit](https://github.com/pre-commit/pre-commit ) to permit the latest version.
- [Release notes](https://github.com/pre-commit/pre-commit/releases )
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md )
- [Commits](https://github.com/pre-commit/pre-commit/compare/v4.0.0...v4.6.2 )
---
updated-dependencies:
- dependency-name: pre-commit
dependency-version: 4.6.2
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 07:32:43 -07:00