Commit Graph
6874 Commits
Author SHA1 Message Date
Nick Sweeting 11c35a1e2e Keep macOS process inspection failures out of SQLite recovery 2026-09-16 17:18:57 -07:00
Nick Sweeting 7fba7dcd46 Reuse the parent crawl when importing snapshots from JSONL 2026-09-16 16:50:33 -07:00
Nick Sweeting 351ae9f35d Exclude docs and old from simplification measurements 2026-09-16 16:40:23 -07:00
Nick Sweeting 30d03318d4 Share API ownership fields and remove unused helpers 2026-09-16 16:37:44 -07:00
Nick Sweeting 28df240577 Render archive result tables with Django templates 2026-09-16 16:28:39 -07:00
Nick Sweeting fb23f73224 Merge dev machine refresh fix into split model package 2026-09-16 16:17:33 -07:00
Nick Sweeting 73e19bb355 Simplify form parsing, streaming responses, and tag interfaces 2026-09-16 16:13:12 -07:00
Nick Sweeting 41af0160cd Keep upload metadata and maintenance operations on models 2026-09-16 15:32:31 -07:00
Nick Sweeting 36dae9d2ce Share legacy migration fixture records and history 2026-09-16 15:32:30 -07:00
ArchiveBox Release Bot 8c5ea7974c Bump release version to 0.9.35rc449 release-candidate/0.9.35rc449 v0.9.35rc449 2026-09-16 22:32:20 +00:00
Nick Sweeting 9a00ac6929 Fix Machine.current startup after weekly host refresh
Machine.save intentionally invalidates the process cache so config edits are visible immediately. Keep a local instance through host refresh, sanitation, and file reconciliation, then publish the completed instance to the cache. Explain why invalidation must remain and why reading the global after save can return None.

Add a real CLI regression that ages persisted machine rows, runs archivebox status, and verifies successful refresh without changing machine identities. Confirmed failing before the fix; 13 targeted tests and Ruff checks pass.
2026-09-16 15:31:50 -07:00
Nick Sweeting 80bc0c636e Unify common admin fields and remove duplicate result routing 2026-09-16 15:22:52 -07:00
Nick Sweeting 9bacad13c5 Merge dev fixes for Sonic lifecycle and Docker permissions 2026-09-16 15:22:45 -07:00
Nick Sweeting 597960123a Share replay response construction across preview formats 2026-09-16 15:09:57 -07:00
Nick Sweeting 7fdc9f92ce Use Persona.to_json for every persona CLI record 2026-09-16 15:09:07 -07:00
Nick Sweeting 2ca634981d Expose search plugin failures with their underlying stderr 2026-09-16 15:09:06 -07:00
ArchiveBox Release Bot 5d6fc0cc3c Bump release version to 0.9.35rc448 v0.9.35rc448 release-candidate/0.9.35rc448 2026-09-16 22:04:08 +00:00
ArchiveBox Release Bot 86b81452db Bump for abx-dl 1.12.274 2026-09-16 22:03:45 +00:00
Nick Sweeting 79f1df1bbd Share snapshot progress rendering and output discovery records 2026-09-16 15:01:05 -07:00
ArchiveBox Release Bot 30a1ec8fa3 Bump release version to 0.9.35rc447 release-candidate/0.9.35rc447 2026-09-16 22:00:09 +00:00
Nick Sweeting 1f3f3b6e0f Serve log and shell script files as inline plain text 2026-09-16 14:59:27 -07:00
ArchiveBox Release Bot e81802c91b Bump release version to 0.9.35rc446 release-candidate/0.9.35rc446 2026-09-16 21:54:09 +00:00
Nick Sweeting e410fbfff3 Remove superseded admin declarations and disabled upgrade banner 2026-09-16 14:51:39 -07:00
Nick Sweeting 1ebb020691 Keep media inventory on ArchiveResult and reuse it when rendering cards 2026-09-16 14:51:38 -07:00
Nick Sweeting 57240f8798 Self-heal Docker permissions and wait for Sonic search readiness (#1877)
Fixes #1876.

## Root cause

`restart: unless-stopped` repeated the startup failure; it did not
create it. The Docker entrypoint created required directories as
container root first and swallowed failures before checking them as the
application user. On NFS `root_squash` and filesystems with synthetic
ownership, root can be unable to create or change a path that the
intended non-root identity can use. That led to the reported `cannot
write to /data/logs` failure.

## What changed

- Honor Docker `PUID`/`PGID` when supplied, otherwise retain
collection-owner detection and the `911:911` fallback. ArchiveBox and
Chrome remain non-root; `PGID=0` remains supported.
- Check and create required paths as the final non-root identity first.
If a collection path is inaccessible, repair only that path's own
metadata as root and recheck. Runtime/cache trees can receive one-time
recursive repair only after their access check fails.
- Use real create/delete probes for logs, archive output, and the Chrome
profile. Writable NFS/synthetic-permission mounts avoid repeated
metadata operations.
- Never recursively scan or change `data/archive`, regardless of byte
size. The cost is driven by file count and filesystem latency, so even
measuring a 2 GiB threshold would be undesirable at startup.
- Clean up only known browser lock files at persona profile roots,
without traversing large profiles.
- Keep the shipped Compose restart policy, and test fresh
initialization, non-root execution, restarts, root-squashed NFS, and
explicit `PGID=0` with real containers.
- Wait for a newly started Sonic worker to answer on its search port
before querying. An explicit `SONIC_BINARY` (absolute path or relative
executable name) now takes precedence over a persisted Machine config
value before plugin hydration; absolute paths are pinned in Supervisor
rather than routed through a mutable `lib/env/bin/sonic` projection.
Sonic releases have incompatible on-disk KV encodings. A real CLI
regression test checks both override forms, the generated Supervisor
command, and the listener guard. Backend failures now include child
stderr and the Sonic worker log in test output.

## Verification

- `uv run pytest archivebox/tests/test_permissions.py -q` (15 passed)
- `bash -n bin/docker_entrypoint.sh bin/validate_docker_uid_gid.sh`
- Targeted pre-commit hooks for all changed files
- Real Docker checks for distinct PUID/PGID, explicit `PGID=0`, PUID 0
fallback, shallow collection repair, and unchanged nested archive
ownership
- Fresh Compose initialization and non-root writes succeeded; a restart
returned healthy
- Five warm starts on the same Docker Desktop host: previous entrypoint
1.48s, changed entrypoint 1.50s (within run-to-run noise)
- Live Sonic search matrix passed locally on Linux ARM and in native
x86_64 CI
- Real CLI regressions for absolute and relative Sonic binary overrides
over persisted config passed locally on Linux ARM
- Full CI workflow passed on the final PR commit
2026-09-16 17:51:32 -04:00
Nick Sweeting c461476a51 Run shared migration invariants against both legacy schemas 2026-09-16 14:46:37 -07:00
Nick Sweeting f13f3cd55b Share the card fieldset declaration across Django admins 2026-09-16 14:40:22 -07:00
Nick Sweeting 79028156f1 Publish one screenshot gallery from real browser captures 2026-09-16 14:40:21 -07:00
Nick Sweeting 241f871906 Consolidate real CLI test setup and repeated model imports 2026-09-16 14:37:09 -07:00
Nick Sweeting a9b5fe0911 Honor relative Sonic binary environment overrides 2026-09-16 14:23:41 -07:00
Nick Sweeting 2e2ba30a72 Share persona runtime preparation and admin rendering paths 2026-09-16 14:22:43 -07:00
Nick Sweeting e0a10c4f8b Unify process exit recording and use identity-safe tree waits 2026-09-16 14:13:52 -07:00
Nick Sweeting 9ad3bdcf2a Separate supervisor configuration and replace custom progress subprocess 2026-09-16 14:02:37 -07:00
Nick Sweeting bccedca6bb Separate monitor assets and unify CLI and binary persistence paths 2026-09-16 13:52:24 -07:00
Nick Sweeting 72f011c734 Honor explicit Sonic binary over stored machine config 2026-09-16 13:47:46 -07:00
Nick Sweeting 70852e2e46 Unify snapshot view switching and remove superseded UI rules 2026-09-16 13:41:53 -07:00
Nick Sweeting f36e4dfad0 Reuse the snapshot changelist across crawl and schedule admin pages 2026-09-16 13:35:29 -07:00
Nick Sweeting af73e93d51 Preserve Sonic listener guard for custom binary paths 2026-09-16 13:30:16 -07:00
Nick Sweeting 9b93a55fcb Keep Sonic E2E binary outside managed install tree 2026-09-16 13:25:58 -07:00
Nick Sweeting 89654b39f4 Use the shared Markdown parser and separate replay document rendering 2026-09-16 13:18:39 -07:00
Nick Sweeting 4d7573895e Refresh architecture example inventory after documenting model methods 2026-09-16 13:18:25 -07:00
Nick Sweeting 0b0ad81650 Separate CLI command tests from runner recovery scenarios 2026-09-16 13:10:52 -07:00
Nick Sweeting 09fb7270c5 Honor explicit Sonic binary in supervisor worker 2026-09-16 13:08:02 -07:00
Nick Sweeting 53e7ed771f Centralize tag creation and rename rules on Tag 2026-09-16 13:04:10 -07:00
Nick Sweeting 52d040513c Remove obsolete layouts and unify maintenance filters and Sonic readiness 2026-09-16 12:57:47 -07:00
Nick Sweeting fb6bfb8e16 Share browser API helpers and simplify tag editor rendering 2026-09-16 12:50:13 -07:00
Nick Sweeting b9833c962c Pin Sonic executable across search index lifecycle 2026-09-16 12:41:40 -07:00
Nick Sweeting 0c3197d983 Centralize snapshot progress on the model and document model entry points 2026-09-16 12:40:15 -07:00
Nick Sweeting 26161539f3 Keep manifest behavior on models and validate the active CLI runtime 2026-09-16 12:31:11 -07:00
Nick Sweeting 77ce497ad7 Include Sonic daemon logs in search test failures 2026-09-16 12:24:01 -07:00