docs: currency sweep v1.17.0→v1.45.0 — closeout→invoice pipeline, bank feeds, inbox, PWA, door listings
Every feature page refreshed to released state; new Door-Listings page;
Website-Lead-Intake rewritten for the removed /developer portal (keys are
CLI/API-only since v1.38.0); version pins bumped to 1.45.0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
876fe20
docs: Website Lead Intake guide — key minting, wiring, spam protection
New page covering the /api/v1/landing-leads intake end to end: minting a
landing_leads:write API key (portal + CLI), server-side relay guidance
(never expose the key client-side; alert on non-2xx so leads are never
silently lost), field/response reference, honeypot + Turnstile + rate
limit, verification steps, and troubleshooting. Cross-linked from Home,
Integrations, and Sales & Estimating.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Doug
committed
Jul 19, 2026
c09de39
docs: currency sweep to v1.16.0 — vendor bills, GL reporting surface, mobile today
## VERIFICATION MANIFEST
**The Delta:**
- Inventory-and-Purchasing.md: new "Vendor bills" section — intake/parse, review queue, what confirming does (job cost + inventory receiving), DB-level dedup. Nav + workflow verified against modules.js:118 (label "Vendor Bills", /vendor-bills, permission vendor_invoices.read), routers/vendor_invoices.py:44 (/api/vendor-invoices), modules/vendor_invoices/models.py:29-31 (open|paid|void) and :61-77 (the two partial unique indexes).
- Integrations.md: Outlook → vendor-bill auto-ingest documented as opt-in/off-until-configured, per modules/outlook/vendor_bill_ingest.py:7-17 + sender_allowed() (empty allowlist matches nothing).
- Accounting-Payroll-and-Reports.md: replaced the now-stale "reporting surface still in progress" bullet — S11 shipped the Ledger page (modules.js:121: trial balance, P&L, balance sheet, journal). Added cutover/opening-balances (by date) and the S9 QB money-pull refusal (modules/quickbooks/sync.py:76-90).
- Technician-Mobile-App.md: local-tz "today", the "When you're in the area" undated-assigned list, tappable job cards → job detail.
- Getting-Started.md / Updating.md / Using-Plugins.md: APP_VERSION + plugin-host image pins 1.15.0 → 1.16.0.
**The Assumption:**
- Documenting the GL reporting surface as existing-but-empty-while-off is correct for readers: the code ships in v1.16.0 and the flag is off by default (ledger_posting_enabled: "No settings row (never seeded) = off", service.py:209-212; confirmed `f` on the live prod row).
- The wiki describes the released image (v1.16.0), not any one deployment's configuration.
**The Blind Spot:**
- I have not verified these pages by driving the actual UI — the Ledger page, the Vendor Bills queue, and the "When you're in the area" list are documented from source (nav constants, routers, models), not from a headed browser walk. Wording like "drill from a reported total down to the entries" describes intent read off the nav description and reports module; the real screen's affordances are not checked.
- The GL section describes posting behavior that has never run with the flag on in production.
**The Test Gap:**
- No automated check ties wiki prose to the nav constants or route table, so these pages can silently rot the next time a label or path changes (this sweep exists because the S11 bullet had already rotted). A modules.js → wiki label linter is the durable fix; not built.
Doug
committed
Jul 16, 2026
1f951d1
docs: currency sweep to v1.15.0 — GL Phase 1, billing capture, plugins flows
Brings the wiki (last swept 2026-07-02, ~v1.8) up to origin/main @ 6ef27d3
(v1.15.0). 18 pages touched. Facts verified against source by five parallel
review passes with file:line evidence; no private identifiers added.
## VERIFICATION MANIFEST
**The Delta:** New General-ledger section (Accounting Settings page, master
switch semantics, what posts); invoice/payment void, credit memos, refunds,
apply-credit; opt-in dunning defaults; hide-line-prices; estimate duplicate;
ready-for-billing + unbilled-parts + change-order billing; call-capture +
planner digest; mobile search; Awaiting Schedule chip; dispatch timezone;
timeclock sweep; Games status; plugin upload/consent/restart; example-plugin
links moved to gdx_dispatch_plugins; AI env-var family corrected; public-URL
env vars documented; plugin-host added to service list; accurate Celery beat
list; MCP experimental section; require_role #127 addendum.
**The Assumption:** The five source-verification reports (file:line evidence
against a clean origin/main worktree) are faithful, and GitHub's standard
heading-slug rules hold for the wiki anchors I link.
**The Blind Spot:** I haven't checked any claim against a running instance —
source-verified only — and rendering is not yet spot-checked (will check Home
and Accounting after push). I don't know whether the pre-existing QuickBooks
"push on a short cycle" claim is still accurate; left unchanged.
**The Test Gap:** No automated link/anchor checker ran; anchors were checked
by hand. Behavioral claims inherit upstream feature test gaps (install-sheet
hide-prices path and #126 timezone fixes were not browser-verified upstream).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Doug
committed
Jul 16, 2026
d7020f8
docs: full feature documentation sweep — 12 new domain pages + Home index
The wiki covered install/ops/plugins but had zero feature docs. Added
user/operator-facing pages for every nav domain (jobs & dispatch, sales &
estimating, invoicing & payments, customers & comms, customer portal, tech
mobile app, catalogs, inventory & purchasing, accounting/payroll/reports,
marketing & retention, integrations, admin & settings) plus a Feature
Overview map. Rewrote Home as the index; replaced the stale plugin
build-status table with a current summary; de-hardcoded the v1.0.0 release
reference in Updating.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Doug
committed
Jul 2, 2026
43a87c6
Document plugin→catalog upsert API (#51)
Add an "Persisting captured items into a catalog" section to Authoring Plugins
covering upsert_catalog_items (host helper, SKU dedupe, strategy pricing,
source tagging).
Doug
committed
Jun 26, 2026
0417fbd
Add Role & Nav Naming Conventions page (#45)
Mirror docs/ROLE_AND_NAV_NAMING_CONVENTIONS.md into the wiki and link it from
Home. users.role now stores the canonical long form (normalize-on-write +
backfill migration 009).
Doug
committed
Jun 26, 2026
ff7ea61
docs: surface the published v1.0.0 image (Getting Started + Updating)
Now that ghcr.io/freeperro/gdx_dispatch:1.0.0 is published, Getting Started offers
"Option A — run the published image" (selfhost overlay, no build) alongside
build-from-source; Updating's Path A notes v1.0.0 is the current release on GHCR.
## VERIFICATION MANIFEST
The Delta: Getting-Started.md gains an Option A (published image via the selfhost
overlay) vs Option B (build from source); Updating.md Path A notes the current
published release is v1.0.0 on ghcr.io/freeperro/gdx_dispatch.
The Assumption: the selfhost-overlay up command is correct — I verified the image
is anonymously pullable (1.0.0 and :latest -> HTTP 200) and that the overlay file
references ghcr.io/freeperro/gdx_dispatch:${APP_VERSION:-latest}.
The Blind Spot: I verified pullability and the overlay file content, but I have not
run the Option A `up` (selfhost overlay) end to end in this session, so the
published-image bring-up is assembled from verified parts, not freshly executed;
I also haven't checked the rendered wiki pages in a browser.
The Test Gap: the Option A bring-up isn't exercised here or in CI; only the image's
pullability was confirmed.
Doug
committed
Jun 24, 2026
ea273d1
docs: add Configuration, Architecture, Backup & Restore, Updating pages
Four new operator pages, grounded in the actual code/compose: Configuration
Reference (.env groups + the must-set keys), Architecture (one Postgres holding
control+data tables, app/redis/celery topology, single-tenant model, request
flow), Backup & Restore (pg_dump/restore + drills + the script/update.sh
snapshots), Updating (update.sh flow + rollback + build-from-source path). Home's
page index updated to group them.
## VERIFICATION MANIFEST
The Delta: new Configuration-Reference.md, Architecture.md, Backup-and-Restore.md,
Updating.md; Home.md index updated.
The Assumption: facts are drawn from .env.template, docker-compose.yml (services
db/redis/app/celery-*, one "gdx" database, port 8001), control/models.py table
names, scripts/backup-db.sh, and docker/update.sh — and those match the running
system.
The Blind Spot: I have not executed the backup/restore or update.sh commands in
this session, so the exact command lines (drop/recreate, gunzip|psql, update.sh
rollback) are documented from reading the scripts/compose, not freshly run — not
tested end to end here, and I haven't viewed the rendered pages in a browser.
The Test Gap: docs have no automated tests; the backup/restore/update commands are
not exercised in CI.
Doug
committed
Jun 24, 2026
04adb05
docs: add Getting Started page + reframe Home as the project landing
Getting-Started: Docker quickstart (prereqs, .env config with the must-set keys,
start, /health verify, first login, troubleshooting, next steps). Home becomes the
wiki landing — project intro + Start-here link, with Plugins as a section below.
## VERIFICATION MANIFEST
The Delta: new Getting-Started.md; Home.md reframed to a project landing that links
Getting Started, keeping the plugin content as a section.
The Assumption: the README/compose commands and the required-keys table
(JWT_SECRET, MASTER_ENCRYPTION_KEY, DB_PASSWORD, SECRET_KEY) match what actually
blocks boot/login, and the app is on localhost:8001 per docker-compose.yml.
The Blind Spot: I verified the app boots and login works with those keys + Redis
via a manual container run earlier, but I have not run the exact
`docker compose ... --env-file .env up --build` quickstart in this session, so the
compose path is not freshly tested end to end, and I haven't checked the rendered
page in a browser.
The Test Gap: docs have no automated tests; the quickstart command isn't exercised
in CI.
Doug
committed
Jun 24, 2026
344b720
docs(plugins): update wiki to final built state — all 6 steps, verified
Home: all steps marked done with the live-verification summary + honest known
gaps. Authoring: the full working contract (entry point, manifest, PluginBase,
context/require_module, models, routes, UI manifest) keyed to the reference
plugin. Using: the real install (in-app registry + host-side) and enable flow.
## VERIFICATION MANIFEST
The Delta: rewrote Home.md, Authoring-Plugins.md, Using-Plugins.md to reflect the
finished, verified plugin system.
The Assumption: the documented commands/paths match what shipped, and GitHub wiki
renders the markdown as previewed.
The Blind Spot: I haven't checked the rendered wiki pages in the browser after
this push, and the docs describe the in-app enable toggle and auto-restart as
future/manual — those UI pieces are not built, so a reader following them hits the
manual steps. Not tested: the exact curl examples against a fresh operator box.
The Test Gap: documentation has no automated tests; accuracy vs. code is
hand-maintained and can drift as later changes land.
Doug
committed
Jun 24, 2026
3476f47
Merge branch 'master' of https://github.com/freePerro/gdx_dispatch.wiki
Doug
committed
Jun 24, 2026
caa9cde
docs(plugins): initial wiki — Home, Authoring, Using (ADR-013 step 1)
## VERIFICATION MANIFEST
The Delta: initial wiki pages (Home, Authoring-Plugins, Using-Plugins)
documenting the plugin system at step-1 state.
The Assumption: GitHub auto-creates .wiki.git on first authenticated push when
has_wiki is true; pages reflect what's built and mark the rest pending.
The Blind Spot: I have not tested whether GitHub accepts a push to an
uninitialized wiki — this may fail and need a manual first page via the web UI.
Wiki rendering is not verified.
The Test Gap: docs have no automated tests; accuracy-vs-code is hand-maintained.
Doug
committed
Jun 24, 2026
5a6bf58