Commit Graph
149 Commits
Author SHA1 Message Date
Samuel CuiandClaude Opus 5.5 a6125e679d Remove the uncalled Library name search
Library.Search predated query-based Search and had no callers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:46:10 +08:00
Samuel CuiandClaude Opus 5.5 80e15cd4de Remove the second Library File listing path
ListFiles, ListFilesMatching and FileTreeSize duplicated the paged File listing
with their own cursor input and ordering, and only tests called them. Tests now
use ListFileRows, the listing every service path uses; the unused query helper
goes too, and the remaining scope resolution lives in file_scope.go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:45:16 +08:00
Samuel CuiandClaude Opus 5.5 ace224b025 Order Tape byte positions with one entity helper
Media read ordering and the read planner each carried an identical
comparePosition, and tar member validation wrote the same ordering inline.
entity, which both packages already import, now owns CompareTapeBytePosition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:42:54 +08:00
Samuel CuiandClaude Opus 5.5 87e857e8ab Remove unused helpers and log the real panic value
The generic caches, the statfs helper, ToEnum and SQLEscape had no callers, so
their dependencies drop out of the direct requirements. WrapWithLogger
formatted a non-error panic from a nil error and logged "<nil>"; it now logs
the recovered value. A dead nil check in the debug listener is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:40:39 +08:00
Samuel CuiandClaude Opus 5.5 7a96c49e03 Reset the Media read dialog through one function
Opening, closing and a successful read each cleared the same eleven pieces of
dialog state in separate copies; the success path had already missed one.
One reset and one dismiss function now serve all three.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:39:27 +08:00
Samuel CuiandClaude Opus 5.5 732313de3b Give Tape format rules one frontend owner
Archive, Device Settings, Media inspection and read dialogs each re-derived a
Media's Tape format and repeated the writable-format list or the LTFS check.
One small module now owns the format getter, the writable set, the LTFS check
and the display label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:38:46 +08:00
Samuel CuiandClaude Opus 5.5 32694d8c5e Use the theme radius and shared status colors
Job and Scan creation cards overrode the theme's card radius, and Media
inspection drew its status dot with colors that differed from the File status
dot in the same detail surface. They now use the theme and the shared status
palette.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:37:52 +08:00
Samuel CuiandClaude Opus 5.5 ac1e196f8f Place Recent Jobs actions in the shared action row below the list
Recent Jobs put Refresh and All related Jobs beside its heading in a hand-built
flex header, while list-level actions belong in the shared action row below
their list, as the Locations list already does. The unused heading style is
removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:37:19 +08:00
Samuel CuiandClaude Opus 5.5 5358f4169b Confirm selection replacement through the shared action dialog
Recreating a Job with unsent selections asked for replacement in a hand-built
dialog whose confirm button was not the primary style and which ignored Escape.
It now uses the shared action dialog; cancelling still returns to the
creation page with the current draft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:36:34 +08:00
Samuel CuiandClaude Opus 5.5 3665543d44 Use the shared list placeholder for version and directory lists
Saved-version lists and the Location directory chooser drew their reading and
empty states with ad hoc paragraphs, a bare spinner and a progress bar. They now
use the one list placeholder, as the UI contract requires for lists without
rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:35:21 +08:00
Samuel CuiandClaude Opus 5.5 cf13797542 Reuse the shared file mode and size formatters
File details and the Media inspector each formatted permission bits inline, and
the browser's file-size formatter repeated formatFilesize's options. One mode
helper beside contentHex and formatFilesize now serve them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:34:06 +08:00
Samuel CuiandClaude Opus 5.5 cc3f9d98a3 Share the Volume free-space label
Archive, read and Media inspection dialogs each formatted a mounted Volume's
free space and the "Mount required" text inline. One helper beside the Media
availability label now owns that wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:32:48 +08:00
Samuel CuiandClaude Opus 5.5 2f5649f810 Stop polling progress for settled Jobs
Visible Archive, Restore and Scan cards refreshed progress every two seconds
even after their Job settled. The shared progress hook now reads a settled Job
once and polls only while the Job is running; a Job that starts again resumes
polling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:29:59 +08:00
Samuel CuiandClaude Opus 5.5 615e2cae38 Use the shared Settings loading feedback for Location and devices
Location details showed a bare info Alert outside the page frame while loading,
and Device Settings stacked a second progress bar for device discovery. Both now
use the one Settings loading indicator inside the page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:28:56 +08:00
Samuel CuiandClaude Opus 5.5 37ba59e17a Decode every RPC error message through errorMessage
Media inspection, Job logs, Files search, Media browsing and the global request
toast read Error.message directly, so gRPC-Web's percent-encoded messages
reached users undecoded. They now use the shared formatter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:28:15 +08:00
Samuel CuiandClaude Opus 5.5 3d22b1d6b4 Show saved-version dates with one shared label
File details read "Date not recorded" for a version without archive dates, while
the Restore picker said "Archive date unknown" and the Restore list "Date
unknown", each re-deriving the date. All three now use one helper beside
contentTime, matching the shared saved-version choice rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:28:15 +08:00
Samuel CuiandClaude Opus 5.5 6ad3a4c3e2 Give every Settings editor the same loading and validation feedback
Jobs and Preview hid their whole form, including the page action row, until
values loaded while Library and Devices kept theirs; all four now keep the
disabled action row. Draft validation failures used the load/save error and
offered "Reload saved settings", which would discard the draft; they are now a
separate in-place message without that action. Device discovery uses the
shared progress indicator instead of status text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:18:28 +08:00
Samuel CuiandClaude Opus 5.5 49d38096d5 Report preserved Tape scripts that differ from bundled templates
Upgrades keep customized Tape scripts, so outdated local copies stayed silent
after template fixes. The installer's check now compares each configured script
with the candidate template of the same name (ignoring a .local suffix) and
prints a unified diff, and lists differing template-named helpers beside them.
The report is a manual check; preserved scripts are never replaced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:15:45 +08:00
Samuel CuiandClaude Opus 5.5 2baecc6fe0 Settle fixture Jobs before Tape read-learning test cleanup
recordTapeReadJob created a Restore Job whose asynchronous indexing could still
write its catalog and bundle while test cleanup removed them, so
TestTapeReadObservationsRoundTrip failed intermittently with a non-empty
temporary directory. Wait for the fixture Job to settle first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.0-alpha.3
2026-10-30 18:00:27 +08:00
Samuel CuiandClaude Opus 5.5 42881b1679 Stop building the unsupported ARMv5 target in CI
The ARMv5 matrix entry could only fail: the build refuses GOARM=5 before
compilation and the candidate set never contains an ARMv5 archive. Drop it and
its allowed-failure setting so a failed job always means a real failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 17:52:19 +08:00
Samuel CuiandClaude Opus 5.5 8d563223d1 Give E2E Library and Preview storage a Work directory
Library and Preview temporary files now live under the configured Work
directory, but the in-process E2E fixtures constructed both without one, so
Import Positions and Preview generation failed against the candidate. Prepare
each fixture's Library temporary root and give Preview a shared Work-relative
root.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 17:33:00 +08:00
Samuel CuiandClaude Opus 5.5 80904cbba4 Keep distributed Preview module sources writable
Go module-cache directories are read-only, and the Linux runner preserves that
mode when the Preview package copies module sources. Extracted corresponding
sources, the validators' copies and the build's temporary directory then
cannot be removed. Grant user write access once when the sources are
assembled, replacing the narrower build cleanup workaround.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 17:03:51 +08:00
Samuel CuiandClaude Opus 5.5 acd5e155e2 Remove read-only module sources after the Preview build
The Preview package copies Go module sources from the read-only module cache.
Restore write access before the successful build removes its temporary
directory or replaces the distributed module set, so cleanup does not fail on
the Linux release runner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 16:32:47 +08:00
Samuel CuiandClaude Opus 5.5 f904787241 Remove the read-only module cache after package-source tests
Go extracts module-cache directories without write permission, so removing the
test's temporary root failed with EACCES on the Linux release runner. Restore
user write access before removal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:58:49 +08:00
Samuel CuiandClaude Opus 5.5 d33a6847f4 Name the Library visibility preference by saved versions
The default-on Library preference hides or shows Files that have no saved version.
Its "unbacked" name conflicted with the vocabulary, where backup never means
archived File content. Rename the protobuf field to
include_files_without_versions, the CLI flag to --include-files-without-versions
and the Settings label to "Include files without saved versions", and describe
archive coverage in archive terms. Pre-stable installations reread the
preference with its new name, so a saved value from an earlier Alpha reverts to
the field default until saved again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:32:21 +08:00
Samuel CuiandClaude Opus 5.5 8f3d7f2959 Publish releases as reviewed commit stacks
Replace the single squash in Release SOP step 2 with a stack re-sliced from the
final source: one concern per commit with its tests, fixes folded into the
commit they correct, dependency order, contract changes with their callers and
every commit building and passing tests on its own. Review fixes fold back into
the owning commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:16:41 +08:00
Samuel CuiandClaude Opus 5.5 97faae0d78 Document tar Tape operation, architecture and research
Organize documentation by audience: packaged user guides in docs/operations
(including Devices, Tape scripts, Auto read order, Jobs, offline migration and
tar recovery), contributor procedures in docs/development, maintainer release
procedures in docs/release, current behavior in docs/architecture (now with
separate Tape and read-planning documents) and evidence in docs/research. Each
rule keeps one owner and other pages link to it; the document checker, the
packaged guide allowlist and their tests follow the new layout. The documents
land together because the new guides and index link to each other.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:16:41 +08:00
Samuel CuiandClaude Opus 5.5 d33bf030bb Verify packages and physical tar Tape acceptance
Extend package and physical acceptance with tar stages, EW fill and read-order comparison and script-aware public recovery, and keep release content checks, licenses and installer inputs aligned with the shipped scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:49 +08:00
Samuel CuiandClaude Opus 5.5 1463b444ec Expose Tape devices, Device settings and tar options to users
Serve InspectDevice and typed Device settings, and list configured devices as summaries for the CLI and UI. In the UI, edit Device settings with explicit drafts, choose Tape device, format and read options in Archive, Restore and Scan, show Device details and the last prepared read, present the Tape format in Media details, and add a tar Tape to the review Demo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:48 +08:00
Samuel CuiandClaude Opus 5.5 b294b6d5a9 Freeze read-order workloads and performance tiers
Keep fixed planner inputs, quality references, resource cases and the Go scenario benchmarks together with the performance collector tiers, so route quality and planning time remain comparable across changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:45 +08:00
Samuel CuiandClaude Opus 5.5 47b525b747 Write, read and publish encrypted tar Media
Compose tar FORMAT/APPEND, Restore, Scan and Verify through complete Media sessions and the configured encrypt adapter. Publish only complete members at normal or capacity/EW completion, maintain position maps, apply Logical or Auto read order, record passive read learning observations in each Job and refit learned read parameters after drive release. LTFS keeps its adapters and gains the shared read order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:44 +08:00
Samuel CuiandClaude Opus 5.5 67bbf04d86 Plan complete Tape read orders
Score complete selections with one Go planner using bounded caches and external route indexes, including completion costs. The planner owns no device access; its callers decide when an order applies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:37 +08:00
Samuel CuiandClaude Opus 5.5 64e8a11029 Own Tape device I/O, inspection and cartridge memory
Add the native SCSI transport with SSC record, navigation, capacity and early-warning observations, cartridge memory barcode read/write and directory decoding, and read-only encryption state. Inspection never positions, writes, loads keys or issues measurement commands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:37 +08:00
Samuel CuiandClaude Opus 5.5 2af707970b Add Tape device inspection, tar and read options to the CLI
Add the InspectDevice RPC with tape device inspect, settings devices, tar FORMAT/APPEND record and compression options, Media hints and position-map refresh for Restore, Scan and Verify, with safety checks before any write. Update the bundled CLI Skill.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:34 +08:00
Samuel CuiandClaude Opus 5.5 2d9ffda088 Persist tar locators, Media geometry and Device settings
Store tar member locators, initialization-bound position maps and Device settings, including server-owned learned read parameters, through the existing Library and Settings owners. Keep Library backups and imports complete for tar Media.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:32 +08:00
Samuel CuiandClaude Opus 5.5 5c0002af3a Define tar Tape, Device settings and prepared-read contracts
Add the tar Media profile, member locators, Tape read parameters, Device settings with learned read parameters, device reports and prepared-read messages, with generated Go and TypeScript code. Register the Tape vocabulary in CONTEXT and document the API and option contracts. Existing read dialogs request no position-map refresh. Encryption stays with the configured script; write options carry no native encryption switch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:31 +08:00
Samuel CuiandClaude Opus 5.5 afc7b87581 Keep Job settlement visible and retain independent copy failures
Preserve the existing Job lifecycle while keeping timing, cancellation and independent pipeline errors observable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:28 +08:00
Samuel CuiandClaude Opus 5.5 55608b175c Preserve complete Library exports and existing output files
Keep CLI and HTTP export consumers streaming with explicit error handling. Validate selections and replace named outputs only after a complete export.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:27 +08:00
Samuel CuiandClaude Opus 5.5 63eef7bea9 Keep disposable files under owned Work directories
Use the common temporary root for Library, Restore probes, Preview and script output. Preserve active ownership, ordinary outputs and retryable cleanup failures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:27 +08:00
Samuel CuiandClaude Opus 5.5 9b5e4df73a Update ACP and add go-multierror
Use ACP v0.2.7 for the content endpoints the tar backend reads through, and add go-multierror for retaining independent pipeline failures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:25 +08:00
Samuel Cui 472d74132a docs: add pending work and clarify deployment configuration 2026-10-14 14:12:43 +08:00
Samuel Cui 57e71c99f4 Prepare Alpha 2.1 installation and sorting documentation v1.0.0-alpha.2.1 2026-10-14 11:00:57 +08:00
Samuel Cui 031589506c Restore file-row selection with Chonky 0.3.10 2026-10-14 02:35:56 +08:00
Samuel Cui 3b8c6b240b Correct streamed list totals and use native scrollbar layout 2026-10-14 00:42:48 +08:00
Samuel Cui 005f6513a1 Keep file browser content clear of native scrollbars 2026-10-13 21:56:18 +08:00
Samuel Cui 8a9dfd96ce Clarify cached Location choices in Scan documentation 2026-10-13 20:25:25 +08:00
Samuel Cui 5f91c475de Unify browser sorting, shared UI state and result loading 2026-10-13 20:13:49 +08:00
Samuel Cui b34f39599a Use workflow identity instead of the dynamic run name 2026-10-13 12:00:33 +08:00
Samuel Cui b07eedb190 Compile observer diagnostics with fortified libc checks v1.0.0-alpha.2 2026-10-13 11:05:00 +08:00
Samuel Cui 0d9889e3fa Keep the standalone SG observer out of Go E2E builds 2026-10-13 10:51:09 +08:00