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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Preserve the existing Job lifecycle while keeping timing, cancellation and independent pipeline errors observable.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
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>