From 2a41480a652730b3ce1434ffc2c32b7a4f2201b0 Mon Sep 17 00:00:00 2001 From: ai Date: Mon, 1 Jun 2026 10:10:45 +0000 Subject: [PATCH] docs: record completed AFP ProDOS smoke status --- AI.md | 34 ++++++++++++++++++++++++++-------- TODO.md | 25 ++++++++++++++++--------- tests/afp/README.md | 23 +++++++++++++++++++---- 3 files changed, 61 insertions(+), 21 deletions(-) diff --git a/AI.md b/AI.md index 4562f99..9278a6b 100644 --- a/AI.md +++ b/AI.md @@ -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 +``` diff --git a/TODO.md b/TODO.md index 4382389..2907abf 100644 --- a/TODO.md +++ b/TODO.md @@ -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 diff --git a/tests/afp/README.md b/tests/afp/README.md index 18d6c9b..89ebaae 100644 --- a/tests/afp/README.md +++ b/tests/afp/README.md @@ -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,