FLUX DOCUMENTATION SYSTEM Layer 9 — GOVERNANCE | changelog flux.dantesisofo.com/wiki/changelog/
A complete chronological record of protocol decisions, infrastructure changes, and version releases.
All dates are in ISO 8601. All decisions are final unless explicitly marked DEPRECATED or PROPOSED.
Released: 2026-05-13
FRAMES_PER_ISSUE = 36 locked as a protocol constant in flux_constants.py. Comment added: "Do not change without updating all dependent scripts." This value is immutable.YYYY-MM-DD_HH-MM-SS_PhotographerName_OriginalFilename.JPG. Separator between date-time block and photographer name is underscore. Separator between photographer name and original filename is underscore. Timestamp uses hyphens within date (YYYY-MM-DD) and hyphens within time (HH-MM-SS), with underscore between date and time blocks (not ISO 8601 T).photos/ prefix, thumbnails at thumbs/, personal issues at FLUX_ISSUES/.flux-dantesisofo. CloudFront distribution: E1QJZ6W1R67CZD.flux.dantesisofo.com.Released: 2026-05-14
CAT_001, CAT_002, ...) are separated from personal archive identifiers (FLUX_001, FLUX_002, ...). The two namespaces do not overlap and never will.catalog.json established as the single source of truth for all public catalog entries. All catalog reads and writes go through this file.publish_submission.py created. Implements the full public submission pipeline:catalog.jsonFLUX_CATALOG/ S3 prefix established for all public catalog assets. This prefix is distinct from FLUX_ISSUES/ used for personal archive issues.Released: 2026-05-15
generate_flux_issue.py.approve_worker.py via _maybe_trigger_build(). Logic: when the count of unassigned approved photographs in the queue reaches FRAMES_PER_ISSUE (36), issue_builder_worker.py is spawned as a detached subprocess. The trigger fires at exactly 36. It does not fire at 35./tmp/flux_issue_builder.lock prevents duplicate builder runs. If the lock file exists when the trigger fires, the new build is skipped. The lock is released when the builder process exits normally or abnormally.issue_builder_worker.py confirmed as the canonical auto-generation entry point.Released: 2026-05-19
_next_catalog_id() was computing the next catalog ID by reading max(catalog.json entries) + 1. This was incorrect because catalog.json was not always current with S3. The bug caused new entries to reuse existing CAT IDs, overwriting previous catalog records._next_catalog_id() now scans S3 FLUX_CATALOG/ folder prefixes directly (ListObjectsV2 with Delimiter='/') to determine the highest existing CAT_NNN/ prefix. The computed next ID is max(existing_prefixes) + 1. catalog.json is not consulted for ID generation._save_catalog() was writing catalog.json to local disk only. S3 upload was deferred and sometimes skipped. This created divergence between local and S3 state._save_catalog() now uploads catalog.json to S3 immediately on every write, before returning. S3 is always current._load_catalog() was preferring local disk over S3. If local disk was stale, stale data was used for all subsequent operations._load_catalog() now loads both local and S3 versions. Whichever version has more entries is used. The local disk version is updated to match S3 after load._next_catalog_id() bug. Both entries were recovered from S3 object versioning (S3 versioning was enabled on the bucket). S3 versioning is confirmed as a safety net for the catalog.Released: 2026-05-20
intelligence.md created as layer overview. Intelligence subdocuments created: embeddings.md, keeper-model.md, metadata-enrichment.md, autonomous-sequencing.md, training-data.md.changelog.md, decisions-log.md, versions.md created.open-source.md created.generate_wiki.py updated: LAYER_ORDER list extended to 10 layers./FLUX_ARCHIVE/ — full photographic corpus (~400,000 frames + keepers)
/FLUX_SYSTEM/ — scripts, configuration, code
/FLUX_PUBLIC/ — public-facing assets mirrored to S3
/FLUX_METADATA/ — SQLite database, manifests, CSV exports
/FLUX_EMBEDDINGS/ — vector database files
/FLUX_ISSUES/ — generated PDF issues (personal archive)
/FLUX_LOGS/ — all system and process logs
/FLUX_INBOX/ — incoming photographs for processing
Released: 2026-05-25
VALID_ISSUE_LENGTHS reverted to [36] in flux_constants.py and generate_flux_issue.py.FRAMES_PER_ISSUE = 36 is immutable. The contact sheet grid is 6×6. The PDF is 44 pages. The manifest is 2 columns × 18 rows. None of these change.flux_constants.py: VALID_ISSUE_LENGTHS reverted from [24, 36] to [36]generate_flux_issue.py: local VALID_ISSUE_LENGTHS reverted from {24, 36} to {36}flux_portal/portal_generator.py: stale comment # 36→44, 24→32 corrected to # 36→44flux_portal/project_generator.py: stale comment # 36→47, 24→35 corrected to # 36→47flux_portal/app.py: API docstring corrected to reflect 36-only constraint| Document | Layer | Relationship |
|---|---|---|
| DECISIONS LOG | Layer 9 — Governance | RFC-style record of canonical protocol decisions |
| VERSIONS | Layer 9 — Governance | Version numbering reference and locked-version semantics |
| ROADMAP | Layer 8 — Roadmap | Forward-looking development timeline |
| BOOTSTRAP | Layer 4 — Infrastructure | Phased implementation plan with hardware context |
| PROTOCOL | Layer 2 — Protocol | The core protocol that all versions extend |
FLUX_WIKI_v2.0 — flux.dantesisofo.com/wiki/changelog/