SFPCKUSR32 v0.4.0 Beta 1
========================

Release date: August 4, 2026

SFPCKUSR32 is a native 32-bit Windows replacement for the DOS SFPCKUSR.COM
caller-database packer for Spitfire BBS. It safely packs SFUSERS.DAT,
SFUSERS.PTR, and every SFMSGxx.LMR as one matched set.

This is a MANUAL OFFLINE beta. Do not run it from a Spitfire event or the
built-in Sysop pack option.

INSTALLATION
------------

1. Close every Spitfire node and prevent caller access.
2. Rename or remove the old SFPCKUSR.COM.
3. Disable or secure the old Pack Caller Database menu item so it cannot be
   launched accidentally.
4. Copy SFPCKUSR.EXE into the Spitfire HOME directory containing SFNODE.DAT,
   normally C:\SF.
5. Run it manually from a command prompt. No installer is required.

QUICK START
-----------

Always preview the exact command first.

To remove callers already marked Deleted:

  C:
  CD \SF
  SFPCKUSR.EXE /DEL /DRYRUN

Review every WOULD-PURGE line. Then run the same command without /DRYRUN:

  SFPCKUSR.EXE /DEL

To remove callers inactive for at least one year:

  SFPCKUSR.EXE /OLD=365 /DRYRUN
  SFPCKUSR.EXE /OLD=365

IMPORTANT: any normal invocation without /DRYRUN is a real pack.

COMMON COMMANDS
---------------

  SFPCKUSR.EXE /DRYRUN
      Preview the legacy deleted-record-only behavior.

  SFPCKUSR.EXE
      Pack only records already marked Deleted.

  SFPCKUSR.EXE /DEL
      Explicit deleted-record-only pack.

  SFPCKUSR.EXE /OLD=365
      Pack callers at least 365 days old when AllowPurge is Yes, plus records
      already marked Deleted.

  SFPCKUSR.EXE /SEC=5
      Pack exact security level 5 when AllowPurge is Yes, plus records already
      marked Deleted.

  SFPCKUSR.EXE /SEC=5 /OLD=365
      Security OR old, matching the legacy combination behavior.

  SFPCKUSR.EXE /SEC=5 /OLD=365 /AND
      Security AND old for non-deleted callers.

Add /DRYRUN to any command for a read-only preview. User record #1 is always
protected. Backups are mandatory; there is no /NOBACKUP switch.

BEFORE EVERY REAL PACK
----------------------

* Close every Spitfire node window, including idle nodes.
* Prevent new caller access.
* Stop SFToss32 and other Spitfire maintenance tools.
* Confirm MESSAGE\SFTOSS.BSY is absent before starting.
* Review the complete /DRYRUN candidate list.
* Make sure enough disk space is available for staging and backup.

SFPCKUSR32 checks SFWHOSON.DAT for active callers, but it cannot prove that an
idle Spitfire node process is closed.

BACKUPS AND VERIFICATION
------------------------

Every real pack creates and verifies a unique timestamped backup under:

  <Spitfire HOME>\SFPCKUSR-BACKUPS

A custom backup root may be selected:

  SFPCKUSR.EXE /OLD=365 /BACKUP=D:\SFBAK

The program stages and verifies the new files, verifies the backup, repeats its
safety checks, commits, verifies the final files, and attempts verified rollback
if a commit or post-write verification failure is detected.

Before reopening the BBS, require these report results:

  Verified backup result: PASS
  Final pre-commit safety result: PASS
  Commit: COMPLETE
  Post-write verification: PASS
  WRITE RESULT: SUCCESS
  Shared SFTOSS.BSY lock: RELEASED
  Errors: 0
  Exit code: 0

The backup is intended for immediate rollback before callers return. Restore
SFUSERS.DAT, SFUSERS.PTR, and every SFMSGxx.LMR together as one matched set.

AFTER A SUCCESSFUL PACK
-----------------------

1. Confirm MESSAGE\SFTOSS.BSY is absent.
2. Confirm no *.SFPNEW staging files remain.
3. Start one Spitfire node.
4. Test a normal login and message-conference access.
5. Reopen the remaining nodes only after the sanity check passes.

MORE INFORMATION
----------------

The docs folder contains:

  COMMAND_REFERENCE.txt   Complete commands, rules, and exit codes
  SAFETY_AND_BACKUPS.txt  Detailed offline, backup, and restore procedure
  BETA_TESTING.txt        Recommended testing and bug-report information
  KNOWN_LIMITATIONS.txt   Current beta boundaries
  WHATS_NEW.txt           Beta 1 release changes and validation status
  CHANGELOG.txt           Full project history
  TEST_RESULTS.txt        Automated and field-validation summary
  PROJECT_BASELINE.md     Detailed project and file-format baseline
  TECHNICAL_NOTES.md      Writer design and implementation notes
  SHA256_MANIFEST.txt     Package file hashes

Complete source and fixture tests are under source. Ordinary sysops only need
SFPCKUSR.EXE and this README.
