docs: record completed AFP ProDOS smoke status

This commit is contained in:
ai
2026-06-01 10:10:45 +00:00
committed by Mario Fetka
parent 5a1b3935f6
commit 2a41480a65
3 changed files with 61 additions and 21 deletions

34
AI.md
View File

@@ -108,13 +108,20 @@ use, the current project status that the user pasted into the chat.
- Implement it only as an adapter over the shared mars_nwe salvage/deleted-entry
record. Do not expose or normally open `.recycle` or `.salvage` through AFP
code; those remain hidden backend repositories.
- The first implementation returns FinderInfo from the salvage JSON snapshot,
ProDOSInfo from the nwatalk xattr-backed JSON snapshot, resource fork size from the JSON snapshot, and the
deleted original name.
- The implementation returns FinderInfo[32], ProDOSInfo[6], resource fork size,
and deleted original name from the Salvage JSON snapshot. FinderInfo and
ProDOSInfo are captured through the existing nwatalk xattr-backed AFP
metadata store, not through a parallel AFP metadata database.
- The AFP smoke suite has a dedicated `afp_deleted_info_smoke` helper. It
pre-cleans salvage entries in the tested directory through NCP purge, creates
a temporary AFP file, writes FinderInfo, deletes it, verifies AFP `0x13`, and
purges the tested deleted entry afterwards.
a temporary AFP file, writes FinderInfo and ProDOSInfo, deletes it, verifies
AFP `0x13`, and purges the tested deleted entry afterwards.
- Verified AFP smoke status: the full suite completed with `failures=0` after
AFP 35/19 and ProDOSInfo work. It verifies live FinderInfo and ProDOSInfo
xattrs on `SYS:PUBLIC/pmdflts.ini`, verifies AFP 35/19 returns
`prodos=010203040506` from the deleted-file Salvage snapshot, and leaves
normal AFP-only attributes absent when Hidden/System/Archive map through the
NetWare attribute path.
- Reuse existing AFP/nwatalk metadata mechanisms for FinderInfo, AFP
attributes, entry ids, resource fork state, and related restore/lookup
behavior. Do not add a parallel AFP metadata database.
@@ -180,13 +187,19 @@ cmake --build build --target \
ncp_read_smoke \
ncp_salvage_scan_smoke \
ncp_salvage_recover_smoke \
ncp_salvage_purge_smoke
ncp_salvage_purge_smoke \
afp_entry_id_smoke \
afp_file_info_smoke \
afp_scan_info_smoke \
afp_set_file_info_smoke \
afp_deleted_info_smoke
```
Runtime smoke suite:
Runtime smoke suites:
```sh
tests/salvage/salvage_smoke_suite.sh --out /tmp/mars-salvage-report.txt
tests/afp/afp_smoke_suite.sh --out /tmp/mars-afp-smoke.txt
```
The suite streams the report to `--out` while running, so a failure before the
@@ -211,4 +224,9 @@ to FinderInfo's 32-byte `org.mars-nwe.afp.finder-info`.
Salvage captures this as `prodos_info_hex` (12 hex characters) beside
`finder_info_hex`. AFP 35/19 Get Macintosh Info On Deleted File returns
FinderInfo[32] followed by ProDOSInfo[6] from the Salvage snapshot.
FinderInfo[32] followed by ProDOSInfo[6] from the Salvage snapshot. The
verified smoke value is `010203040506` and the Linux xattr dump should show:
```text
user.org.mars-nwe.afp.prodos-info=0x010203040506
```

25
TODO.md
View File

@@ -238,24 +238,31 @@ Follow-up:
Current status:
- The active AFP compatibility slice is implemented and covered by the smoke
- The current AFP compatibility slice is implemented and covered by the smoke
tests under `tests/afp/`. Endpoint inventory, WebSDK audit notes, and AFP
implementation history live in that directory instead of this project-level
TODO file.
- The shared NCP salvage backend is now available and tested, including
versioned scan/recover/purge and stale-sidecar cleanup. It should be the
backing data source for AFP deleted-file compatibility work.
Current AFP focus:
- AFP `0x13 Get Macintosh Info On Deleted File` is now implemented as a
salvage/deleted-entry adapter and covered by the AFP smoke suite.
- AFP `0x13 Get Macintosh Info On Deleted File` is implemented as a
salvage/deleted-entry adapter and covered by the AFP smoke suite. It returns
FinderInfo, ProDOSInfo, resource fork size, and deleted filename from the
shared Salvage snapshot.
- ProDOSInfo is persisted through the existing `nwatalk` AFP metadata xattr
layer (`org.mars-nwe.afp.prodos-info`) and is captured/restored in Salvage as
`prodos_info_hex`; no parallel AFP metadata store was added.
- The verified AFP smoke suite covers live FinderInfo/ProDOSInfo xattrs, AFP
35/19 deleted-file metadata, and the readonly Modify-rights negative path.
- Keep future AFP deleted-file work on the shared salvage backend; do not expose
`.recycle` or `.salvage` through normal AFP/NCP path opens.
- Keep AFP metadata restore/lookup paths tied to the existing mars_nwe AFP and
nwatalk mechanisms, not a new side database.
- Keep the detailed AFP inventory and audit notes in `tests/afp/`.
Follow-up:
- Continue the final AFP WebSDK audit only where inventory files still mark an
endpoint as needing layout verification. AFP 0x13 and ProDOSInfo storage are
no longer open TODO items.
## Deferred / optional protocol work
* Basic Packet Burst file transfer support is implemented and verified with a

View File

@@ -12,10 +12,12 @@ itself rather than Netatalk/libatalk. Directory Entry IDs prefer the existing
mars_nwe NetWare namespace/basehandle mapping. Regular-file Entry IDs use the
mars_nwe-owned `org.mars-nwe.afp.entry-id` xattr so entry-id-only AFP probes can
resolve back to files without treating file IDs as DOS namespace directory
numbers. FinderInfo uses `org.mars-nwe.afp.finder-info`; only future AFP-only
attribute bits belong in `org.mars-nwe.afp.attributes`. NetWare semantics such
as Hidden/System/Archive attributes, timestamps, trustee rights, create, rename,
delete, and data-fork open/write stay on the existing mars_nwe NetWare paths.
numbers. FinderInfo uses `org.mars-nwe.afp.finder-info`; ProDOSInfo uses the
6-byte `org.mars-nwe.afp.prodos-info` xattr in the same nwatalk metadata layer;
only future AFP-only attribute bits belong in `org.mars-nwe.afp.attributes`.
NetWare semantics such as Hidden/System/Archive attributes, timestamps, trustee
rights, create, rename, delete, and data-fork open/write stay on the existing
mars_nwe NetWare paths.
Resource forks remain unsupported. On Linux the local xattr helper stores
source-level `org.mars-nwe.*` names through the portable `user.` namespace.
@@ -68,11 +70,24 @@ checks for:
```text
user.org.mars-nwe.afp.finder-info
user.org.mars-nwe.afp.prodos-info
user.org.mars-nwe.afp.attributes
user.org.mars-nwe.afp.entry-id
```
A verified AFP/ProDOS smoke run completed with `failures=0`. The suite set
FinderInfo and ProDOSInfo on the live smoke file, verified the live xattr, then
created and deleted a temporary AFP file and verified AFP `0x13 Get Macintosh
Info On Deleted File` returned the same ProDOSInfo from the Salvage snapshot:
```text
AFP Set File Info ... finder_type=TEXT finder_creator=MARS ... prodos_info verified
AFP deleted prodos=010203040506
user.org.mars-nwe.afp.prodos-info=0x010203040506
```
The suite now also exercises the WebSDK AFP attribute bits that
`afp_set_file_info_smoke` supports: Hidden (`0x0200`), System (`0x0400`), and
Archive (`0x2000`). Those bits are verified through the NetWare attribute path,