As of v0.1.7 (2026-05-19)
This document records discrepancies between the documented design and the current codebase, and tracks features planned but not yet implemented.
Status: CLOSED
Implemented: src/fileforge/extractor/xlsx.py — reads sheets in order using openpyxl.load_workbook(read_only=True, data_only=True), emits [SheetName] headers, joins cell values with |, respects max_chars. Registered for .xlsx and .xlsm in extractor/__init__.py. 7 tests added in tests/test_extractor.py.
Status: CLOSED
Implemented: src/fileforge/extractor/image.py — PIL and pytesseract imported separately so Pillow-only installs still work; converts image to grayscale before OCR; degrades to None when pytesseract or Tesseract binary unavailable. Registered for 8 extensions (.png, .jpg, .jpeg, .bmp, .tiff, .tif, .webp, .gif) in extractor/__init__.py. 6 tests added in tests/test_extractor.py.
Impact: Low (functional workaround in place)
Current behavior: Action logging is implemented through SessionDB.log_action() in db.py. The action_logs table exists and is written to by actions.
Previously documented as: A standalone fileforge.actions.logger module with ActionLog, log_action(), and undo_action() in the old api.md.
Status: Removed from api.md. The db.py API docs should be updated to document log_action() and list_action_logs() when those methods are public.
Impact: Medium
Previous state: api.md documented only the Python library API. The REST API served by api/server.py had no documentation.
Status: REST API section added to api.md in this release.
Priority: Roadmap
Description: Replace the vanilla JS frontend/index.html SPA with a React-based PWA with offline capability and a service worker.
Blocked by: None — independent of Phase 1–4 features.
Priority: Roadmap
Description: Sync scan results and file actions across multiple machines (e.g., Raspberry Pi nodes in NEXUS).
Blocked by: Phase 5 (stable PWA layer needed for sync UI).
Priority: Low
Description: Extract text from .rtf files. Can use striprtf or pyrtf-ng.
Mentioned in: CHANGELOG.md Unreleased section.
Priority: Low
Description: Extract text from .epub files. Can use ebooklib.
Mentioned in: CHANGELOG.md Unreleased section.
Impact: Low
Description: prune.py implements empty-directory removal but there is no CLI command for it. It is called indirectly from organize.
Fix (optional): Add fileforge prune <dirs> command or document that it runs automatically after organize.
| Issue | Status |
|---|---|
overview.md version said 0.1.0 |
Fixed → 0.1.7 |
overview.md missing fileforge server command |
Fixed |
architecture.md listed extractor/xlsx.py, extractor/html.py, extractor/image.py (don't exist) |
Fixed |
architecture.md missing web server in architecture diagram |
Fixed |
api.md referenced actions/logger.py (doesn't exist) |
Fixed — section removed |
api.md had no REST API documentation |
Fixed — REST API section added |
setup.md referenced fileforge[ui] extra (correct: fileforge[web]) |
Fixed |
setup.md missing fileforge server command |
Fixed |
tech-stack.md fastapi/uvicorn/Jinja2 listed as optional; they are core deps |
Fixed |
docs/superpowers/plans/ — stale planning docs for phases now complete |
Removed |
- The
extractor/html.pygap from architecture.md is not actually a gap: HTML files are handled byextractor/text.pyvia BeautifulSoup tag-stripping. The architecture doc incorrectly implied a separate module. - The
api/__init__.pyis absent from theapi/package but the FastAPI app imports correctly without it. Not a functional gap.