diff options
Diffstat (limited to 'REMAINING_PLAN.md')
| -rw-r--r-- | REMAINING_PLAN.md | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/REMAINING_PLAN.md b/REMAINING_PLAN.md new file mode 100644 index 0000000..74ae353 --- /dev/null +++ b/REMAINING_PLAN.md | |||
| @@ -0,0 +1,97 @@ | |||
| 1 | # TollGate Core — Remaining Execution Plan | ||
| 2 | |||
| 3 | **Branch:** `feature/tollgate-core-v2` | ||
| 4 | **Created:** 2026-05-23 | ||
| 5 | **Goal:** Complete all remaining extraction, integration, CI/CD, and publishing steps. | ||
| 6 | |||
| 7 | --- | ||
| 8 | |||
| 9 | ## Checklist | ||
| 10 | |||
| 11 | ### Phase A: Version bump + metadata | ||
| 12 | - [ ] A1. Bump `idf_component.yml` to v1.2.0, add MIT license, targets, tags | ||
| 13 | - [ ] A2. Create `LICENSE` file (MIT) in `components/tollgate_core/` | ||
| 14 | - [ ] A3. Update `CHANGELOG.md` with v1.2.0 entries | ||
| 15 | - [ ] A4. Update `README.md` to document all 13 modules | ||
| 16 | - [ ] A5. Run `make test-unit` + `idf.py build` | ||
| 17 | - [ ] A6. Commit + push | ||
| 18 | |||
| 19 | ### Phase B: Re-sync component to NerdQAxePlus | ||
| 20 | - [ ] B1. Copy 4 new source pairs + updated files to NerdQAxePlus | ||
| 21 | - [ ] B2. Verify `TOLLGATE=1 BOARD=NERDQAXEPLUS idf.py build` | ||
| 22 | - [ ] B3. Commit + push to NerdQAxePlus develop | ||
| 23 | |||
| 24 | ### Phase C: Full wallet integration on NerdQAxePlus (Phase 9c) | ||
| 25 | - [ ] C1. Copy `nucula_lib/` component and `nucula_src/` submodule to NerdQAxePlus | ||
| 26 | - [ ] C2. Update NerdQAxePlus top-level CMakeLists to REQUIRES `nucula_lib` | ||
| 27 | - [ ] C3. Replace `spend_proofs` stub with `nucula_wallet_receive()` | ||
| 28 | - [ ] C4. Add `nucula_wallet_init(mint_url)` to `tollgate_nerdqaxe_init()` | ||
| 29 | - [ ] C5. Wire `get_hashrate` to actual ASIC stats | ||
| 30 | - [ ] C6. Wire `on_share_accepted` to real share tracking | ||
| 31 | - [ ] C7. Verify build | ||
| 32 | - [ ] C8. Commit + push | ||
| 33 | |||
| 34 | ### Phase D: NerdQAxePlus UI integration (Phase 9d) | ||
| 35 | - [ ] D1. Add POST `/api/tollgate/pay` endpoint accepting Cashu tokens | ||
| 36 | - [ ] D2. Add minimal captive portal HTML page | ||
| 37 | - [ ] D3. Add GET `/api/tollgate/wallet` and POST `/api/tollgate/wallet/send` endpoints | ||
| 38 | - [ ] D4. Update portal screen: wallet balance, session count, payment QR | ||
| 39 | - [ ] D5. Add session status to mining screen | ||
| 40 | - [ ] D6. Verify build, flash, test payment flow | ||
| 41 | - [ ] D7. Commit + push | ||
| 42 | |||
| 43 | ### Phase E: Ansible CI/CD workflow (Phase 10b) | ||
| 44 | - [ ] E1. Create ansible role `ci_runner` with tasks for Docker + ESP-IDF | ||
| 45 | - [ ] E2. Create Python nostr relay listener script | ||
| 46 | - [ ] E3. Create systemd service unit for listener | ||
| 47 | - [ ] E4. Create ansible playbook `20-ci-runner.yml` | ||
| 48 | - [ ] E5. Create ansible playbook for localhost hardware runner | ||
| 49 | - [ ] E6. Test ansible deployment | ||
| 50 | |||
| 51 | ### Phase F: Publish to IDF Component Registry (Phase 10c) | ||
| 52 | - [ ] F1. Create `docs/PUBLISHING.md` with step-by-step upload instructions | ||
| 53 | - [ ] F2. Run `compote registry login` (manual — requires browser OAuth) | ||
| 54 | - [ ] F3. Run `compote component upload --dry-run` to validate | ||
| 55 | - [ ] F4. Run `compote component upload` to publish v1.2.0 | ||
| 56 | - [ ] F5. Verify with clean test project | ||
| 57 | - [ ] F6. Commit + push updated metadata | ||
| 58 | |||
| 59 | ### Phase G: Hardware smoke test | ||
| 60 | - [ ] G1. Flash Board A with updated firmware | ||
| 61 | - [ ] G2. Run `TOLLGATE_IP=10.185.47.1 BOARD=a make test-smoke` | ||
| 62 | - [ ] G3. Commit any fixes | ||
| 63 | |||
| 64 | --- | ||
| 65 | |||
| 66 | ## Execution Order | ||
| 67 | |||
| 68 | ``` | ||
| 69 | A → G → B → C → D → E → F | ||
| 70 | ``` | ||
| 71 | |||
| 72 | Phase A is quick metadata updates. G verifies on hardware. B syncs to NerdQAxePlus. | ||
| 73 | C adds the wallet. D adds the UI. E sets up CI/CD. F publishes. | ||
| 74 | |||
| 75 | --- | ||
| 76 | |||
| 77 | ## Architecture Notes | ||
| 78 | |||
| 79 | ### CI/CD Design | ||
| 80 | - **Runner:** Docker container using `espressif/idf:latest` image | ||
| 81 | - **Trigger:** Python WebSocket client subscribed to `wss://ngit.orangesync.tech` | ||
| 82 | for NIP-34 git state events (kind 30617) | ||
| 83 | - **Pipeline:** clone from GRASP → `idf.py build` → `make test-unit` → report | ||
| 84 | - **Hardware tests:** Run on localhost (dev machine) where boards are connected | ||
| 85 | - **Reporting:** Build status posted as nostr badge event (kind 1985) | ||
| 86 | |||
| 87 | ### Wallet Integration Design | ||
| 88 | - `nucula_lib` provides C API: `nucula_wallet_init()`, `nucula_wallet_receive()`, `nucula_wallet_send()`, `nucula_wallet_balance()` | ||
| 89 | - `spend_proofs` callback in `tollgate_platform_t` maps directly to `nucula_wallet_receive()` | ||
| 90 | - Wallet proofs persisted to NVS automatically by nucula | ||
| 91 | - `libsecp256k1` already compiled in NerdQAxePlus build with Schnorr + Extrakeys modules | ||
| 92 | |||
| 93 | ### Component Registry | ||
| 94 | - License: MIT (required for upload) | ||
| 95 | - Namespace: GitHub username (auto-created on first login) | ||
| 96 | - Version immutability: once uploaded, cannot overwrite — must bump version | ||
| 97 | - `compote` CLI installed at `~/.local/bin/compote` (v3.0.2) | ||