Files
flying-jib/living_docs/PROGRESS.md
T
2026-07-30 23:43:12 -04:00

147 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Flying Jib — Progress Log
> Append-only chronological log of decisions, blockers, and wins.
> Newest entries at the top.
---
## 2026-07-30 — Phase 4 mesh registry core
### Wins
- `lib/mesh-registry.js` — Autobase + Hyperbee regions/cells; Hyperswarm replication
- `lib/border.js` — pure border/neighbor/migrate advisory helpers
- CLI: `mesh-create`, `mesh-open`, `mesh-admit`, `mesh-enroll`, `mesh-list`
- Mesh `fj1.` invite type
- Tests: mesh registry + border (**17/17**)
- GitHub Actions `integrate.yml` (test + linux standalone smoke)
### Next
- Live border migrate via Squid plugin + tunnel switch
- Writer admission multi-peer e2e
---
## 2026-07-30 — Phase 3 chat/presence + standalone binary
### Wins
- `lib/peer-session.js` — Hyperswarm + Protomux (`flying-jib/presence|chat|control`)
- CLI host/join: stdin chat, `/peers`, `--name` display name
- Peer chat integration test
- **`scripts/bare-standalone.cjs`** peardock-style pack; **standalone binary runs Squid on 127.0.0.1 with PATH without Node**
- Postinstall patches: static Squid plugins, log.js bare-pack fixes, events polyfill vendor
### Notes
- Standalone ~500MB; size optimization later
- Dev path `bare-runtime/bin/bare bin.mjs` remains preferred for iteration
### Next
- Multi-host make:standalone:all in CI
- Phase 4 mesh
- Java multiplayer playtest
---
## 2026-07-30 — Phase 2 core: HyperDHT tunnel + fj1. invites
### Wins
- `lib/world-tunnel.js` — host/client HyperDHT TCP pipes with capability header (FJ1C||cap)
- `lib/invite.js``fj1.` z32 JSON invites (ADR-0009)
- `lib/tunnel-keys.js` — per-world tunnel seed/cap on disk (mode 0600)
- CLI: **`host`** (Squid + share) and **`join`** (client tunnel)
- Tests: invite codec + tunnel integration (**10/10**)
- Bare CLI smoke: host prints invite; guest binds 127.0.0.1; both listen
### Next
- bare-build standalone
- Java Edition multiplayer playtest
- Phase 3 presence/chat
---
## 2026-07-30 — Phase 1: Bare CLI + Flying Squid on loopback
### Wins
- Scaffolded Bare app: `bin.mjs`, `app.js`, `lib/*`, `plugins/fj-bind-guard.js`, pear worker stub, `package.json` imports.
- CLI: `create`, `list`, `start`, `status` with `--storage`.
- **Flying Squid runs under Bare** (`node_modules/bare-runtime/bin/bare`) listening on **127.0.0.1** (verified via `lsof`).
- Also verified under Node for local iteration.
- Unit tests for bind-guard + worlds pass.
- Bare interop tooling: `scripts/patch-engines-for-bare.js`, `scripts/generate-squid-imports.js`, shims for `events` (callable EE) and `readline`.
### Decisions
- Squid in main Bare process (not Node child) per ADR-0013.
- Use `bare-runtime` from node_modules for dev when system `bare` is too old.
### Next
- bare-build standalone package smoke
- Java Edition join playtest
- Phase 2 tunnel
---
## 2026-07-30 — ADR-0013: Bare/Pear-only runtime and single-executable distribution
### Wins
- Accepted **ADR-0013**: production runtime is **Bare only**; no system Node.js; no Node child for Squid.
- Superseded ADR-0004 (Electron + Node Squid child) and primary Electron Forge path in ADR-0011.
- Amended ADR-0002: Flying Squid loads via **`bare-node-runtime`** inside Bare.
- Updated living, developer, user, and agent docs for `hello-pear-bare` + `bare-build --standalone` + Pear OTA.
- Added open question **Q15** (Squid/Bare compatibility spike).
### Decisions
- CI product = single standalone Bare executables + pear stage/seed OTA.
- Electron is not the default shell; Node is build-time tooling only where unavoidable.
### Next
- Phase 1: scaffold hello-pear-bare; Bare Squid spike.
---
## 2026-07-30 — Phase 0 complete: research + architecture + docs scaffold
### Wins
- Inventoried Holepunch mirror at `holepunchto_repos` (~680 packages); selected stack versions for hyperswarm, hyperdht, corestore, autobase, protomux, pear-runtime, etc.
- Assessed Flying Squid (`createMCServer`, plugins, Anvil, versions through 1.21.4) as embeddable local authority — not global multi-peer sim.
- Studied peardock (control plane + invites) and holesail (TCP tunnel pattern); decided **Apache-2.0 HyperDHT tunnel** instead of AGPL Holesail dependency.
- Locked architecture: **Local Authority + Capability Tunnel + Federated Regions**.
- Product name: **Flying Jib**.
- Scaffolded full `living_docs/`, `developer_docs/`, `user_docs/`, `agent/` including ADRs 00000012 (later extended by 0013).
### Decisions
- No master/central servers ever; discovery only via Hyperswarm/HyperDHT.
- Squid always binds `127.0.0.1` (explicit; minecraft-protocol default is all interfaces).
- Process model initially hybrid; **revised same day to Bare/Pear-only (ADR-0013)**.
- Private worlds: HyperDHT byte pipe; invites `fj1.`.
- Mesh: Autobase region registry; border = session migration, not global block CRDT.
- License: Apache-2.0.
### Blockers
- None for Phase 0 docs.
### Next
- Phase 1: Bare app shell + Squid on bare-node-runtime.
---
## 2026-07-30 — Investigation kickoff
- Empty repo `flying-jib` initialized as documentation-first project.
- Primary references: Prismarine flying-squid, full Holepunch ecosystem, local peardock/holesail experience.