secubox-deb/docs
CyberMind 26b747dec4
feat(droplet): static-publisher CLI dropletctl — port from OpenWrt (closes #196) (#199)
* docs(spec): dropletctl design — port from OpenWrt, static-only v1.1.0 (ref #196)

Brainstormed scope:
- in:  publish/remove/rename/list, HTML+ZIP+tarball, idempotent overwrite,
       full delegation to metablogizerctl site publish, bats unit tests
       with PATH-shimmed stubs, debian rules + changelog + Depends bump
- out: streamlit, hexo, gitea git-versioning, atomic rollback (v1.2.0+)

Captures the 5-section design just walked through:
  1. Architecture (thin orchestrator → metablogizerctl)
  2. Components & interfaces (file layout, CLI surface, output contract)
  3. Data flow + error handling (10-step happy path, 6 exit codes)
  4. Testing (10 bats cases, fixtures, PATH-shimmed delegate stubs)
  5. Packaging + deploy (debian/rules + control + changelog)

Per project convention saved under docs/superpowers/specs/. Awaiting user
review before invoking superpowers:writing-plans.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(plan): dropletctl implementation plan — 11 tasks, TDD, 13 bats cases (ref #196)

Bite-sized TDD tasks per superpowers:writing-plans convention:

  Task 1  scaffold bats + fixtures + delegate stubs + CLI skeleton
  Task 2  publish arg validation (3 error cases)
  Task 3  name sanitization + single HTML happy path + metablogizerctl delegate
  Task 4  ZIP extraction with single-nested-dir unwrap
  Task 5  tarball extraction + plain-directory input
  Task 6  pin idempotent re-publish behavior
  Task 7  remove subcommand + TOML section delete
  Task 8  rename subcommand
  Task 9  list subcommand
  Task 10 debian packaging (rules + control + changelog 1.0.1 -> 1.1.0)
  Task 11 lint + final 13/13 bats sweep

Spec coverage: every spec requirement maps to a task. Spec deviation noted:
spec said Depends >=2.0.0 but live metablogizer is 1.1.1; plan uses >=1.1
so apt doesn't refuse. Hardware deploy on gk2 explicitly deferred to a
post-merge manual step (script included).

Self-reviewed: zero placeholders, no 'similar to Task N' weasel words,
function names consistent (sanitize_name / stage_content /
unwrap_single_nested / upsert_toml_site / remove_toml_site /
default_domain / cmd_publish/remove/rename/list). Caught + fixed a
spec coverage gap (plain-directory input was omitted) in Task 5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(droplet): scaffold dropletctl CLI + bats harness (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): publish arg validation (3 error cases) (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): name sanitization + HTML staging + metablogizerctl delegation (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): ZIP extraction with single-nested-dir unwrap (ref #196)

* feat(droplet): tarball + plain-directory input (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(droplet): pin idempotent re-publish behavior (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): remove subcommand + TOML section delete (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): rename subcommand (ref #196)

* fix(droplet): rename — collision guard + same-name guard + delegate-asymmetry comments (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(droplet): list subcommand (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* build(droplet): bump to 1.1.0 + add rsync/unzip/python3/metablogizer runtime deps (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(droplet): rename stores bare base domain + reject invalid domain in publish (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(droplet): strengthen rename-domain test to exercise legacy-FQDN path (ref #196)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: CyberMind-FR <gandalf@Gk2.net>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 06:20:02 +02:00
..
architecture
assets feat(ci): Unified sync-all workflow + eyemote visual banner 2026-05-10 09:28:00 +02:00
design
errata docs(wiki): Add financing model pages + errata BPI-R4 2026-05-03 18:46:42 +02:00
eye-remote
hardware
reference feat(led): Add 3-tier LED HealthBump system with kernel timer triggers 2026-05-08 08:29:08 +02:00
references/gst docs(session106): Add GitHub Issues workflow + GST references 2026-05-06 14:52:44 +02:00
reports
screenshots docs: Add Eye Remote Multigadget skill and wiki 2026-05-10 09:12:42 +02:00
superpowers feat(droplet): static-publisher CLI dropletctl — port from OpenWrt (closes #196) (#199) 2026-05-19 06:20:02 +02:00
wiki feat(ci): Unified sync-all workflow + eyemote visual banner 2026-05-10 09:28:00 +02:00
AI-BUILD-PROMPT.md docs: Add Eye Remote Multigadget skill and wiki 2026-05-10 09:12:42 +02:00
CACHE-PATTERN.md feat(scripts): add check-dashboard-cache.py lint + CI (closes #147) (#148) 2026-05-18 08:21:20 +02:00
FAQ-BUSYBOX-RESCUE.md feat(kernel): Add complete nftables support + busybox rescue docs 2026-05-08 18:27:30 +02:00
LED-HEALTHBUMP.md feat(led): HealthBump v2.1.0 with activity detection and K2000 party 2026-05-08 11:15:09 +02:00
LIVE-USB.md
MODULES.md
OPENWRT-CRT-THEME.md
OPENWRT-DEBIAN-COMPARISON.md
OPENWRT-MASTERLINK.md
OPENWRT-MESH-DAEMON.md
PROMPT-BUSYBOX-TECHTIP.md feat(kernel): Add complete nftables support + busybox rescue docs 2026-05-08 18:27:30 +02:00
SCREENSHOTS-VM.md
SECUBOX-DEV-METHODOLOGY.md
TOOLS.md
UI-GUIDE.md