FSEdit and File System Maintenance in Symbolics Genera
Genera's File System Maintenance program is two interfaces in one frame. FSEdit is the ordinary, mouse-oriented tree editor for viewing and changing directories, files, links, and properties. Behind it are three progressively more privileged maintenance menus for backup media, free-record management, server shutdown, LMFS salvage, partition changes, initialization, and finally direct editing of active file-system structures.
The distinction is a data-safety boundary. Browsing a tree is not equivalent to running the Salvager; soft deletion is not immediate expunging; flushing the free buffer is not a hierarchy check; and initializing or removing an LMFS partition can irretrievably destroy data. The installed documentation itself grades the four menu levels from general operations to “extremely dangerous” internal manipulation.
This page records all 33 menu labels in that four-level framework, all 20 documented FSEdit object commands, every documented direct mouse gesture and configuration switch, and the complete stated Salvager option surface. It does not reproduce licensed Symbolics source or Help prose. The earlier MIT disk-label and LMFILE layers are documented separately in Disk labels, packs, checkout, and file-system repair.
Evidence and rights boundary
The installed Help database and the limited source subset came from the licensed Open Genera release and remain untracked. The decoded Help stays under the ignored build tree. This article publishes only portable artifact identities, short interface labels, factual inventories, and original analysis.
| Licensed artifact | Bytes | SHA-256 | Use in this study |
|---|---|---|---|
| doc/installed-440/fsed/fsed1.sab.~27~ | 42,970 | b9efac9a9abb05018fc05ae1c33a75c632019d2e0c02a21364a278bd08b21b32 | FSEdit gestures, commands, variables, and display format |
| doc/installed-440/site/site1.sab.~53~ | 293,406 | 827915f0be3b308e7988af80ed53020b2928afcd6910aaeb1979bf59277a5728 | File System Maintenance framework and 33 menu labels |
| doc/installed-440/file/file7.sab.~59~ | 97,800 | 68be53ced439bdffe36310ada5bc5152b9bbcbe40a7271f54bf7455827104b18 | free records, LMFS Salvager, properties, and links |
| doc/installed-440/file/file8.sab.~34~ | 20,745 | 79325ecbd99b6271806207dfd08ad96f5fdcfdaecead44bedd0bdb4f02e9f810 | LMFS organization and operations |
| doc/installed-440/file/file9.sab.~35~ | 5,097 | 33b2c4b75b0a44479ece416f84040da24e8b2df56ea37dc8b0190f87d18a5fd6 | local LMFS maintenance entry points |
| lmfs/defstorage.lisp.~3033~ | 61,929 | dee8e9b5dc62948bb8208cc28450d1ca45bbba5322a0901d2658d02e7794ba8a | flat storage-description substrate |
| lmfs/fs-user.lisp.~109~ | 4,927 | e73fc6dcda32fc3fd51aef046f44a5962b9c60a66f0ea027fa3f2403cead877f | local/remote LMFS access-path boundary |
| lmfs/lmfs-pathnames.lisp.~79~ | 18,054 | d32dbc2b91283339ec75ec2cfe586b8080b38da8d4a1b177515f1b1169e6a9dc | LMFS pathname behavior in the distributed subset |
| lmfs/fep-pathnames.lisp.~129~ | 13,629 | 6eb480065501ef795ec78adad5171f33a135f764ec8ecd6ad96fb4761f0ab1c0 | FEP pathname behavior in the distributed subset |
The inspected source subset does not contain the implementation of the FSEdit frame, its object menus, the File System Maintenance command levels, or the LMFS Salvager. Consequently, the user interface and maintenance behavior below are installed-Help and public-manual findings unless explicitly marked as a limited source finding. A future complete licensed-source recovery is required for the same code-level completeness achieved for the MIT tools.
Names and boundaries
| Name | Role |
|---|---|
| File System Maintenance, or FSMaint | The whole frame: command menu plus a large interaction/editor pane |
| FSEdit, or File System Editor | The tree-oriented state of the large pane |
| LMFS | The Lisp Machine File System being maintained |
| FEPFS | The Front-End Processor file system that holds LMFS partition files, boot files, and suitable emergency logs |
| Salvager | The LMFS record scanner that rebuilds free maps and can inspect hierarchy and repatriate orphans |
| Dired | A separate Zmacs special-purpose directory editor; it is not FSEdit |
The frame starts with a command menu above a Lisp Interaction pane. A Tree Edit command changes the large pane into FSEdit. Lisp Window changes it back, where Command Processor commands or Lisp forms can be entered. The menu has four nested levels; moving deeper increases both authority and potential damage.
Entry points and a version discrepancy
The installed Genera 8 documentation gives three entry routes:
- Select F;
- the Command Processor command Select Activity File System Operations; and
- File System in the System menu.
Those are intended documented routes, not all confirmed behavior of the repository's live 8.5 world. A fresh runtime inventory documented in Activities, Select keys, and the System Menu found no Select F binding and no File System Maintenance entry in the live activity table. That world may differ by release, loaded systems, or site state. The discrepancy is preserved rather than “corrected” from one source.
The workbook assigns three gestures to Tree Edit Home Dir:
| Gesture | Workbook behavior |
|---|---|
| Left | Use the user's directory on the file-server machine |
| Middle | Use the user's directory on the current machine, or notify if none exists |
| Right | Prompt for a host, then use the user's directory there |
The Site Operations Help record only says that Tree Edit Home Dir uses the home directory. Because the exact three-way behavior has not yet been exercised in the 8.5 runtime, it remains a version-sensitive manual finding.
FSEdit's tree model
The selected base directory opens automatically. Each inferior appears as an indented row:
- a closed directory initially has a pathname row with no inferiors;
- opening it inserts rows for its contents;
- a file row has name, type, version, lengths, dates, and available ownership/flag fields; and
- a link row substitutes an arrow and target pathname for ordinary length detail.
Opening successive directories produces a recursive tree, not a new window for each directory. Closing a directory hides its inferiors. The ordinary mouse scrolling behavior handles trees larger than the pane.
FSEdit caches an opened directory. If another user changes it, the display can be stale until Decache tells FSEdit to discard the cached model and reread the directory. This is an important operational distinction: Refresh Display repaints the current view, whereas Decache refreshes its file-system data.
Directory-row notation
The documented common row can contain:
| Field or mark | Meaning |
|---|---|
| leading D | object is soft-deleted |
| physical volume | storage volume, where the host reports one |
| name, type, version | pathname components |
| blocks and bytes with byte size | two size representations |
| creation date and time | creation timestamp |
| reference date | most recent reference date |
| X= date | last expunge date on a directory, in place of reference date |
| author and last reader | identities where the host records them |
| exclamation mark | not backed up |
| at sign | do not delete |
| dollar sign | do not reap |
| arrow and pathname | link target |
| DIRECTORY | directory object in place of byte length |
Fields depend on the remote file-system protocol. Their absence is not evidence that a generic concept does not exist on another host.
Direct FSEdit gestures
With TV:USE-NEW-FSEDIT-COMMAND-SET at its default true value:
| Gesture on an object row | Operation |
|---|---|
| Left | Toggle an open/closed directory; on a file, show the file |
| Middle | Delete or undelete the selected object |
| Right | Open the object-sensitive operation menu |
Setting that variable false restores the pre-Genera 8.0 mapping: Left opens and Middle closes. It removes the direct Middle delete/undelete gesture; deletion remains available from the menu.
TV:CONFIRM-FSEDIT-QUICK-SOFT-FILE-DELETION defaults true. Setting it false removes confirmation only when the target host supports soft deletion and therefore undeletion. FSEdit always confirms deletion on a host where deletion is immediate. This prevents a preference intended for reversible LMFS deletion from weakening the hard-delete boundary on another file system.
The installed FSEdit Help defines no dedicated keyboard command table. It refers to ordinary scrolling and to keyboard continuation after typeout, while the encompassing Lisp Interaction pane accepts commands. Without the missing implementation source or a runtime audit, this page does not infer additional FSEdit keys.
Complete FSEdit object-command inventory
Right-click presents only commands applicable to the selected object's type and the host's capabilities. These are all 20 commands documented by the inspected installed Help:
| Menu command | Objects | Behavior and boundary |
|---|---|---|
| Delete | files, directories, links | Mark for soft deletion; shown only for a live object on a host with undeletion |
| Delete (immediate) | files, directories, links | Confirm hard deletion, then remove the row; used where soft deletion is unavailable |
| Wildcard Delete | directories | Prompt with wildcard defaults, list matches, confirm, delete with per-object error reports, and update the display |
| Undelete | files, directories, links | Restore a D-marked object where the host supports soft deletion |
| Rename | files, directories, links | Prompt for a new name; a full pathname can also move a file or link, but not a directory, to another directory |
| Show Properties | files, directories, links | Type out each property and value over the tree until keyboard continuation or Refresh Display |
| Edit Properties | files, directories, links | Use Choose Variable Values for changeable system and user properties |
| New Property | files, directories, links | Uppercase the supplied property name; an empty value removes the user property |
| Show | files, links | Display file contents without updating the reference date; a link must be transparent to read and target a file |
| Create Inferior Directory | directories | Prompt for a simple inferior name and create it |
| Create Link | directories | Prompt for link name and full target pathname |
| Expunge | directories | Permanently remove soft-deleted entries; offered only where the host supports the operation |
| Open | closed directories | Insert all ordinary inferiors; equivalent to the current Left gesture |
| Selective Open | directories | Open only entries matching a prompted wildcard; unspecified components default to a wildcard |
| Close | open directories | Hide the inferior rows |
| Link Transparencies | links, directories | Edit a link's operation transparencies or a directory's defaults, then choose Do It or Abort |
| Decache | directories | Discard the cached directory model and reread it from the host |
| Hardcopy | files | Open the system hardcopy menu for the file |
| Edit File | files | Invoke Zmacs on the file |
| Load | files | Load the file into the running Lisp world |
The Link Transparencies choice exposes five documented operation keywords:
| Keyword | Operation redirected to the target when transparent |
|---|---|
| READ | open for input |
| WRITE | open for append |
| CREATE | open for output |
| RENAME | rename |
| DELETE | delete |
Defaults can be set on a directory for newly created links. This makes a link's behavior operation-specific rather than a single follow/do-not-follow switch. Directory links are a special case: the documentation permits chains up to ten links and says the transparency list is not interpreted while resolving such a directory chain.
Delete and Expunge must also be kept separate. Soft-deleted LMFS objects can be undeleted. Expunge makes the corresponding storage reclaimable and is not undone by FSEdit's Undelete command.
Free records and crash behavior
LMFS keeps a small working pool of free records in memory; the installed documentation describes roughly 30 records in normal use. Those records are marked as in use in the on-disk free map while held in the pool. A crash before the pool is flushed can therefore strand space, but it should not make the same record available to two files. Flush Free Buffer makes that state durable, and logout normally invokes the same protection. The Salvager reconstructs the map and can recover stranded records.
Free Records reports three different views because they answer different questions:
- Left/default compares the maps' free and used totals and can expose lost records;
- Middle attributes record use by directory into a requested output file; and
- Right reports use by physical LMFS partition, which is the necessary capacity evidence before growing or removing one.
LMFS partition files and FSPT
An LMFS installation can use a default FEP file on the boot drive and additional FEP files as partitions. An optional FEP:>fspt.fspt table records which FEP files comprise the local LMFS. If that table is absent, the boot-drive lmfs.file is the default.
The LMFS partition contents do not themselves record their current FEP pathname. That permits moving a partition file if FSPT is updated to the new location, but it also means preservation provenance must retain both the partition bytes and the external table that assembles them. The table file is metadata for the set, not an interchangeable data partition.
The Salvager
Complete option surface
Salvage opens an Accept Values menu. For a multipartition LMFS it first lists the partitions, then provides:
| Option | Values and effect |
|---|---|
| partitions | select some or all for scanning |
| Top-down treewalk record check | Yes or No; after other work, walk from root and report bad records, missing files, and hierarchy disagreements |
| Check for and repatriate orphans | Yes or No; find unreferenced objects, restore them to the hierarchy, and replace bad directory records |
| Output recording | Tape, File, or Console only |
| File for output | destination used by File recording |
If any partition is deselected, the orphan option disappears. The reason is architectural: repatriation requires a model of the complete hierarchy, which cannot be established from only part of the local file system.
The Genera 8.1 release notes changed the repatriation default to No because automatically reinserting orphan objects was judged less safe than making the operator request it. That is a versioned behavior change; a screen from another release must not be assumed to use the same default.
What it repairs
The documented Salvager:
- reads every selected LMFS record;
- always reconstructs free-record maps;
- identifies records in use and free;
- finds objects present in storage but absent from the directory hierarchy;
- can repatriate those orphans;
- can perform a separate root-down hierarchy check; and
- can replace bad or misplaced directory records with fresh empty records.
When an orphan's intended directory cannot be recovered, it is placed under a >repatriations>lost-N directory for human inspection. Orphan storage remains in use even when repatriation is disabled, so the map rebuild does not silently reuse its records.
The installed documentation characterizes repatriation as not losing files. Because the actual Salvager source is absent and no destructive runtime experiment was performed, this page records that as the vendor's intended guarantee, not an independently verified outcome for every damaged-record case. Replacing a record with a fresh empty one is itself a reason to retain the pre-salvage disk clone.
Logging is part of recovery
Tape output writes each message immediately in its special format; industry-compatible reel tape is documented as durable for this use, whereas immediate cartridge persistence is not guaranteed. File output can use local FEPFS or another host's FEPFS or LMFS, but not the local LMFS being salvaged. The default is a boot-unit-zero FEP file. Each log line is followed by a finish operation so a crash should retain output through the last completed line. Console-only logging is the fallback, not the preferred evidence record.
Two documented Lisp helpers recover tape logs:
| Function | Arguments | Purpose |
|---|---|---|
| LMFS:PRINT-SALVAGER-OUTPUT-TAPE | optional tape-spec and output stream | print the Salvager tape, prompting for omitted tape specification |
| LMFS:COPY-SALVAGER-OUTPUT-TAPE-TO-FILE | optional tape-spec and pathname | copy the Salvager tape into a file |
There is no documented automatic analyzer for the resulting file log.
Limited source findings
The distributed source subset establishes two architectural points but does not implement the visible programs:
- The storage-description layer constructs explicit flat byte and bit fields over ART-8B storage, including bit arrays and character strings. It is an on-disk representation substrate rather than a graph of ordinary in-memory Lisp pointers.
- The user-facing file-system access layer distinguishes a local LMFS access path from network paths. If local LMFS support is not loaded, it signals that condition instead of trying to connect back to the same machine through the network protocol.
The second behavior is a fail-closed local/remote boundary. It does not establish how FSEdit commands are dispatched, how Salvager updates are ordered, or whether Active Structure Edit has safeguards.
Manual disagreements and source gaps
The evidence does not form one seamless specification:
- installed manuals prescribe Select F, but the inspected live 8.5 activity table has no F binding;
- the workbook gives three mouse gestures for Tree Edit Home Dir, while Site Operations states only the generic home-directory result;
- the public and installed manuals describe the visible and operator surfaces, but the distributed licensed source subset omits their implementation; and
- installed Help states the intended no-file-loss property of repatriation, but the same description permits replacing bad records with fresh empty ones.
These are explicit TODOs for implementation recovery and runtime observation, not invitations to select whichever version is more convenient.
Runtime and screenshot status
No FSEdit or File System Maintenance screenshot is published with this page. The root operator did not clear a Genera harness slot for this subtask, and the current private world is not documented as a configured Symbolics site with a disposable local LMFS. Entering Levels 2–4 without that isolation would create an unnecessary risk of changing licensed world or FEP storage. The live activity-table discrepancy also means Select F cannot be treated as a verified route in this world.
TODO: copy the licensed world and all FEP/LMFS inputs into a named isolated Genera harness session; create a disposable test hierarchy; reach the frame through a route actually present in that world; capture the initial Lisp pane, one FSEdit tree, an object-sensitive Right menu, and the four menu levels without invoking maintenance actions. Verify Left/Middle/Right behavior only on disposable objects. Record all harness hashes and shutdown flags, then select only the minimum scholarly images for image-specific review under the screenshot publication policy.
Destructive runtime tests of Initialize, Remove Partition, salvage repair, or Active Structure Edit require a separately hash-identified throwaway LMFS image and an explicit experiment plan. They are not prerequisites for safely capturing the menus.
Preservation implications
- Preserve the FEP partition files and FSPT together; neither alone completely identifies a multipartition LMFS.
- Hash an immutable pre-salvage copy. A successful boot or directory listing after salvage does not prove that every original record survived.
- Write Salvager output outside the local LMFS under repair.
- Use Free Records' partition report before any grow/remove decision.
- Treat Close All Files and Server Shutdown as machine-wide operations, not only file-system-local cleanup.
- Distinguish soft deletion, expunging, orphan repatriation, free-map rebuilding, record checking, and partition evacuation in research logs.
- Never infer an implementation guarantee from Active Structure Edit's presence; the available source does not expose its mutation model.
Sources
- Symbolics, Site Operations, Genera 8.
- Symbolics, Genera User's Guide, Genera 8.
- Symbolics, Genera Workbook, FSEdit exercise.
- Symbolics, Genera 8.0 Release Notes, FSEdit mouse-command transition.
- Symbolics, Genera 8.1 Release Notes, safer orphan-repatriation default.
- The licensed installed-Help and source artifacts identified above, inspected locally without reproducing their payloads.
Last verified: 2026-07-18.