Merge branch 'main' into website
Bring v0.2.0 + install/packaging surface (crates.io, curl|sh installer, Windows install.ps1, Scoop/Homebrew/winget, --version/version command) onto the website branch for documentation reconciliation.
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# Session handoff — 2026-06-16 (73)
|
||||
|
||||
Short, focused handover. Continues from handoff-72 (which completed the
|
||||
H2 hint-corpus verification pass). This session shipped one small
|
||||
feature — a **`Ctrl-G` demo-mode alias for F1** — plus follow-on doc
|
||||
hygiene. Commit `4016c3e`.
|
||||
|
||||
## §1. State
|
||||
|
||||
**Branch:** `main`, clean, all committed (local; **push pending** — your
|
||||
step; the backlog now spans the CI merge, H2, the hint-corpus fixes,
|
||||
handoffs 71/72/73, and this Ctrl-G commit). **2503 pass / 0 fail / 1
|
||||
ignored** (the long-standing `friendly` doctest), **clippy clean**
|
||||
(nursery, all targets). Open Gitea issues unchanged: **#35–#38**.
|
||||
|
||||
## §2. Why Ctrl-G (the problem)
|
||||
|
||||
Casts are recorded with **`autocast`** (ADR-0047 demo mode: `--demo` /
|
||||
`RDBMS_PLAYGROUND_DEMO`). The contextual hint overlay (ADR-0053 / H2)
|
||||
opens on **F1** — but F1 reaches the app only as a terminal **escape
|
||||
sequence** (`\eOP` / `\e[11~`), and **autocast cannot emit escape
|
||||
sequences**. So the single most teaching-relevant overlay was
|
||||
unreachable in recordings (and in presenter/teacher sessions, which also
|
||||
run `--demo`). Same wall that pushed step-captions onto `Ctrl+]` (a
|
||||
single control byte) rather than `Ctrl+!`.
|
||||
|
||||
### Chord choice — why Ctrl-G, why not Ctrl-1
|
||||
|
||||
The user's first instinct was `Ctrl-1` (mnemonic, near F1). **Not
|
||||
possible:** in a legacy terminal `Ctrl`+digit has no control byte —
|
||||
`Ctrl-1` arrives as a bare `1` (would type "1" into the buffer). The
|
||||
kitty keyboard protocol *would* encode it, but only as an escape
|
||||
sequence (the very thing autocast can't send), and this app deliberately
|
||||
does **not** push `KeyboardEnhancementFlags` (`runtime.rs` does only
|
||||
`enable_raw_mode` + `EnterAlternateScreen`). So the usable space is
|
||||
exactly **`Ctrl`+letter** (single legacy control bytes). After excluding
|
||||
taken chords (`Ctrl-C` quit, `Ctrl-O` nav, `Ctrl+]` caption,
|
||||
`Ctrl-A/E/W/K/U` readline per ADR-0049), byte-collisions
|
||||
(`Ctrl-H/I/J/M/[`), flow-control (`Ctrl-S/Q`), and likely-future
|
||||
(`Ctrl-R/P/N/Y/L/V`), **`Ctrl-G`** is the clean survivor (BEL/"abort" in
|
||||
line editors — nothing destructive to shadow).
|
||||
|
||||
## §3. What shipped (commit `4016c3e`)
|
||||
|
||||
ADR-0047 **Amendment 1**. **In demo mode only**, `Ctrl-G` aliases F1:
|
||||
|
||||
- Runs the *exact* F1 hint logic (`hint_key` guard in
|
||||
`App::handle_key`, `src/app.rs` ~line 1226 — `key.code == F(1) ||
|
||||
(self.demo_mode && Ctrl-G)`), so live-input → form hint, empty input →
|
||||
recent-error / getting-started.
|
||||
- **Badges as `[F1]`** (not `[CTRL-G]`): `demo_badge_label` maps
|
||||
`Ctrl-G → Some("[F1]")` (consulted only in demo mode — the caller
|
||||
gates). So a recorded cast is **visually identical to a real F1
|
||||
press**.
|
||||
- **Demo-gated:** the shipped keymap stays F1-only. Outside demo mode
|
||||
`Ctrl-G` falls through to the inert catch-all (the `Char(c)` insert arm
|
||||
excludes CONTROL, so no `g` is typed).
|
||||
- The keybinding strip (ADR-0051) is **not** changed — F1 stays the
|
||||
advertised key; `Ctrl-G` is a recorder aid and the badge already reads
|
||||
`[F1]`.
|
||||
|
||||
**Tests (test-first, `src/app.rs` Tier-1):** `ctrl_g_in_demo_mode_-
|
||||
aliases_f1_on_input`, `…_on_empty_input`, `ctrl_g_outside_demo_mode_-
|
||||
is_inert`, plus a `Ctrl-G → [F1]` assertion added to
|
||||
`demo_badge_label_maps_the_invisible_keys`. All confirmed red→green; the
|
||||
"inert" test passed on the pre-change code, proving the demo-gate.
|
||||
|
||||
### Using it in a cast
|
||||
With `--demo` active, send **`Ctrl-G`** in the autocast script wherever
|
||||
you want the hint overlay to appear; the viewer sees the `[F1]` badge.
|
||||
|
||||
## §4. Doc hygiene done alongside (same commit)
|
||||
|
||||
- **ADR-0047 file:** removed two stray `</content>` / `</invoke>` lines
|
||||
(tool-call residue accidentally committed when the ADR was authored).
|
||||
- **CLAUDE.md "Things deliberately deferred":** dropped three **stale**
|
||||
entries — **I1b** readline shortcuts (done, ADR-0049), **I3** tab
|
||||
completion, and **I4** syntax highlighting (both done; requirements.md
|
||||
even carries a 2026-06-07 reconciliation note that I3/I4 were
|
||||
"shipped but marked not yet"). Only **I1** (multi-line input) remains —
|
||||
it is genuinely still open (`[ ]` in requirements.md). *(This follows
|
||||
the handoff-72 cleanup that removed the equally-stale m:n/C4 +
|
||||
project-storage entries.)*
|
||||
|
||||
## §5. Open / next (unchanged from handoff-72 §5)
|
||||
|
||||
The hint corpus is trustworthy and the cast-F1 gap is closed. Roadmap:
|
||||
|
||||
1. **Push** (your step).
|
||||
2. **#35 (cargo fmt gate)** — precondition (CI merged) is met; the user
|
||||
wants it done once, before first publication. Needs a `rustfmt.toml`-
|
||||
vs-defaults decision first; tree is ~1800 hunks dirty.
|
||||
3. Other open `requirements.md` items: **I1** multi-line input, **I5/B3**
|
||||
in-flight cancellation, **TT4** PTY tier-4 (unwired), **DOC1**/**E2**
|
||||
user docs (partial), **TT5** Windows-execution + Tier-4-in-CI, **D3**
|
||||
packaging manifests. Design-first (`[~]`): **V4** session journal,
|
||||
**TU1** tutorial, **C3a**, **V3**.
|
||||
4. Hint follow-ups if wanted: **#36** `help` advanced-SQL, **#37** hint
|
||||
clause-concepts, **#38** hint diagnostic route.
|
||||
|
||||
## §6. How to take over
|
||||
|
||||
1. Read handoffs 71 → 72 → 73, `CLAUDE.md`, `docs/requirements.md`.
|
||||
2. Confirm green: `cargo test` (**2503 / 1 ignored**) + `cargo clippy
|
||||
--all-targets` (clean).
|
||||
3. For demo-mode / casting, read **ADR-0047** (+ its Amendment 1); for
|
||||
the hint overlay it aliases, **ADR-0053**.
|
||||
4. Workflow unchanged: phased, test-first, `/runda` + DA before commits,
|
||||
ADR amendment + README index-upkeep for decided-area changes, confirm
|
||||
commit messages with the user.
|
||||
5. Consider a `cargo sweep` at this milestone (`target/` grows; see
|
||||
CLAUDE.md "Build hygiene").
|
||||
@@ -0,0 +1,137 @@
|
||||
# Session handoff — 2026-06-18 (74)
|
||||
|
||||
Large session. Continues from handoff-73 (Ctrl-G demo alias). This one ran
|
||||
the **road to public availability** end to end: a post-merge doc
|
||||
reconciliation, then versioning, installers, crates.io/binstall, the
|
||||
`cargo fmt` gate, and an actual **`v0.2.0` release that is now live on
|
||||
crates.io**. Three new main-sequence ADRs (0054/0055/0056), one CI-ADR
|
||||
amendment, issue **#35 closed**.
|
||||
|
||||
## §1. State
|
||||
|
||||
**Branch `main`.** **2509 pass / 0 fail / 1 ignored** (the long-standing
|
||||
`friendly` doctest); **clippy clean**; **`cargo fmt --check` clean** (the
|
||||
tree is now stock-rustfmt formatted, and CI gates it). `rdbms-playground
|
||||
--version` → `rdbms-playground 0.2.0`.
|
||||
|
||||
**Released:** **`v0.2.0`** — Gitea release with all six D1 targets
|
||||
(Linux/Windows via `release.yaml` on the tag; macOS via the dispatched
|
||||
`release-macos.yaml`, **ad-hoc-signed**). **Published to crates.io**
|
||||
(`cargo install rdbms-playground` and `cargo binstall rdbms-playground`
|
||||
both user-verified).
|
||||
|
||||
**Push state:** earlier commits were pushed (they triggered CI/releases).
|
||||
The **most recent commits are unpushed** and matter:
|
||||
- `3c87dbb` macOS nix-prune fix (takes effect next macOS dispatch).
|
||||
- `d3af1c4` + `8ebe213` the manual `publish.yaml` workflow — ADR-0056 in
|
||||
the first, the **workflow file itself in the second** (`git commit -am`
|
||||
had skipped the new untracked file).
|
||||
- this handoff.
|
||||
Push `main` to land them. (Push is the user's step.)
|
||||
|
||||
## §2. What shipped (commits `628b250`→`d3af1c4`)
|
||||
|
||||
- **`628b250` doc reconciliation** after the CI + website branch merges:
|
||||
rewrote CLAUDE.md's stale repo-layout tree; added a Website subproject
|
||||
note; fixed the CI note; **gitignored `.wrangler/` + `.vscode/`** and
|
||||
removed a tracked `website/.vscode/`; updated requirements (D1 macOS
|
||||
runtime-verified, DOC1 canonical-docs-on-website) + ADR-ci-003.
|
||||
- **`c30a611` ADR-0054 — version surfaces.** `--version`/`-V` + an in-app
|
||||
**`version`** command, both reading `CARGO_PKG_VERSION` via one
|
||||
`cli::version_text()`. A **release-CI guard** fails the release unless
|
||||
the `v*` tag equals `v<Cargo.toml version>`.
|
||||
- **`ef99e6c` ADR-0055 — `scripts/install.sh`** (curl|sh, POSIX,
|
||||
shellcheck-clean, checksum-verified, `~/.local/bin`). Verified
|
||||
end-to-end against the live release. **`install.ps1`** (Windows
|
||||
`irm|iex`) added later (`e9606b5`) — **written but untested here** (no
|
||||
PowerShell on this box; validate on Windows).
|
||||
- **`e9606b5` ADR-0056 — crates.io + binstall prep.** Publish-ready
|
||||
Cargo.toml (dropped `publish=false`; homepage/keywords/categories/
|
||||
`exclude`); `README.md`; `LICENSE-MIT`/`LICENSE-APACHE` (dual, © Lazy
|
||||
Evaluation Ltd) + `CONTRIBUTING.md` (inbound=outbound); the
|
||||
`[package.metadata.binstall]` block with per-target overrides
|
||||
(linux-gnu→musl, windows-msvc→gnu/gnullvm; macOS direct).
|
||||
- **`41b7e9a` + `ec3c7c3` — #35 fmt gate.** One mechanical `cargo fmt`
|
||||
(stock defaults, 102 files, behaviour-preserving) recorded in
|
||||
`.git-blame-ignore-revs`; `ci.yaml` now gates `fmt --check` (ADR-ci-002
|
||||
Amendment 1). **Closes #35.**
|
||||
- **`88830ed`+`bd5be5e` — v0.2.0 bump + the guard bug.** The first
|
||||
`release.yaml` run **failed** at the version guard: it piped `nix
|
||||
develop -c cargo metadata` to node, but the **flake devShell prints a
|
||||
banner to stdout**, corrupting the JSON. Fixed to a toolchain-free
|
||||
`grep -m1 '^version = ' Cargo.toml`. The `v0.2.0` tag was re-pointed
|
||||
(Option A) to the fix commit; re-run went green.
|
||||
- **`3c87dbb` — macOS nix-prune fix.** The prune step's profile dir
|
||||
(`~/.cache/rdbms-ci`) didn't exist, so `nix develop --profile` errored
|
||||
(swallowed by `|| true`) → the gc-root was never created → the whole
|
||||
toolchain (~3.8 GiB) was deleted **and re-downloaded every run**. Added
|
||||
`mkdir -p` + dropped the `|| true`. Diagnosed from the run-74 log via
|
||||
`tea actions runs logs 74`.
|
||||
- **`d3af1c4` — manual `publish.yaml`.** `workflow_dispatch` + `tag`
|
||||
input (mirrors `release-macos.yaml`). Idempotent `crates-io` job
|
||||
(crates.io API pre-check + `cargo publish` backstop), independent jobs
|
||||
so Scoop/Homebrew/winget slot in later. ADR-0056 Amendment 1.
|
||||
|
||||
## §3. Live vs manual vs parked
|
||||
|
||||
- **Automated on a `v*` tag:** `release.yaml` builds + publishes the four
|
||||
Linux/Windows targets (+ fmt/clippy/test gate).
|
||||
- **Manual `workflow_dispatch`:** `release-macos.yaml` (mac binaries —
|
||||
intermittent runner) and `publish.yaml` (crates.io now; more registries
|
||||
later). Run them once the tag's build is up.
|
||||
- **Parked (user decisions):**
|
||||
- **macOS Developer-ID signing.** The pipeline **ad-hoc-signs**
|
||||
(`codesign --sign -`). The user's `Apple Development` cert is the
|
||||
**wrong type** — distribution needs **`Developer ID Application`** +
|
||||
**notarization** (App Store Connect API key recommended). Fine for
|
||||
`curl|sh` (no quarantine); matters for browser downloads. Details in
|
||||
`docs/plans/20260616-public-availability.md`.
|
||||
- **Remaining D3:** Scoop (`lazyeval` bucket), Homebrew (`lazyeval`
|
||||
tap), winget (komac on Linux CI, or manual PR) — each a sibling job
|
||||
in `publish.yaml` + a manifest repo.
|
||||
|
||||
## §4. Immediate next steps
|
||||
|
||||
1. **Push `main`** (lands `3c87dbb` + `d3af1c4`).
|
||||
2. **Add the `CARGO_REGISTRY_TOKEN` secret** (crate-scoped,
|
||||
`publish-update`) so `publish.yaml` works: `tea actions secrets create
|
||||
CARGO_REGISTRY_TOKEN` (paste at prompt) or the Gitea UI.
|
||||
3. **Smoke-test `publish.yaml`:** dispatch it for `v0.2.0` — it should
|
||||
**idempotently skip** ("already on crates.io"), exercising the path
|
||||
risk-free.
|
||||
4. The release ritual going forward (ADR-0054): bump `Cargo.toml` →
|
||||
commit → tag `v<x.y.z>` → push tag (Linux/Windows release builds) →
|
||||
dispatch `release-macos` → dispatch `publish`.
|
||||
|
||||
## §5. Gotchas learned (don't relearn the hard way)
|
||||
|
||||
- **The flake devShell prints a banner to stdout** — never pipe `nix
|
||||
develop -c <cmd>` into a parser. Read Cargo.toml directly, etc.
|
||||
- **Workflow-file source differs by trigger:** a **tag**-triggered run
|
||||
(`release.yaml`) uses the workflow **at the tagged commit**; a
|
||||
**`workflow_dispatch`** run (`release-macos`/`publish`) uses the
|
||||
**default branch** (`main`). So fixing a dispatched workflow only needs
|
||||
a `main` push; fixing a tag-triggered one needs the tag re-pointed.
|
||||
- **Version vs tag:** `Cargo.toml` is bare `0.2.0`; the git tag is
|
||||
`v0.2.0`; the guard checks `tag == "v" + version`; binstall `pkg-url`
|
||||
spells `v{ version }`.
|
||||
- **CI logs are reachable** via `tea actions runs logs <id>` (and `tea
|
||||
actions runs list --output tsv`). Use it instead of guessing from a
|
||||
step name.
|
||||
- **crates.io API needs a descriptive User-Agent** (403 without one).
|
||||
|
||||
## §6. How to take over
|
||||
|
||||
1. Read handoffs 72 → 73 → 74, `CLAUDE.md`, `docs/requirements.md`, and
|
||||
**`docs/plans/20260616-public-availability.md`** (the GA roadmap with
|
||||
all decisions + parked items).
|
||||
2. Confirm green: `cargo test` (**2509 / 1 ignored**), `cargo clippy
|
||||
--all-targets`, `cargo fmt --check`.
|
||||
3. ADRs for this arc: **0054** (versioning), **0055** (installer),
|
||||
**0056** (crates.io/binstall + the publish workflow); CI side
|
||||
**ADR-ci-002 Amendment 1** (fmt gate), **ADR-ci-003** (release matrix
|
||||
+ macOS).
|
||||
4. Workflow unchanged: phased, test-first, `/runda` + DA before commits,
|
||||
ADR amendment + README index-upkeep for decided-area changes, confirm
|
||||
commit messages, never push.
|
||||
5. Consider a `cargo sweep` at this milestone (`target/` grows).
|
||||
@@ -0,0 +1,145 @@
|
||||
# Session handoff — 2026-06-21 (75)
|
||||
|
||||
Continues from handoff-74 (v0.2.0 live on crates.io). This session **finished
|
||||
the D3 package-manager rollout** — Scoop, Homebrew, and winget — plus the
|
||||
Windows `install.ps1` fixes, and included a deep **presigned-URL / Homebrew**
|
||||
debugging saga that's fixed by a server-side Caddy rule. Five commits; one
|
||||
new ADR amendment arc (ADR-0056 Amendments 2–4).
|
||||
|
||||
## §1. State
|
||||
|
||||
**Branch `main`.** **No crate (Rust) code changed this session** — only
|
||||
`.gitea/workflows/`, `scripts/`, and `docs/`. So the `cargo test` baseline
|
||||
from handoff-74 (**2509 pass / 0 fail / 1 ignored**, clippy + `fmt --check`
|
||||
clean) stands unchanged by construction; not re-run (nothing in the build
|
||||
graph moved). New coverage this session is **`scripts/test-package-renders.sh`**
|
||||
(shellcheck-clean, green), now gated on every push by a new **`ci.yaml`
|
||||
`manifests` job** (bash + node; ruby-absent in CI degrades gracefully).
|
||||
|
||||
**Commits this session** (`cabc813`→`0208c67`; the workflow-bearing ones were
|
||||
pushed, since the live `publish` dispatches + raw-URL installs the user tested
|
||||
needed them on `main`):
|
||||
- `42b40bc` install.ps1 → Windows PowerShell 5.1 compat
|
||||
- `c0531aa` install.ps1 → immediate-use PATH + honest messaging
|
||||
- `6d54c1e` Scoop + Homebrew jobs (D3 §3b/§3c)
|
||||
- `6bb2288` Scoop/Homebrew validated + Caddy fix recorded (Amendment 3)
|
||||
- `0208c67` winget job via komac (D3 §3d, Amendment 4)
|
||||
|
||||
**External / infra state created this session (NOT all in the repo):**
|
||||
- **Caddy Tier-A HEAD rule on the Gitea server** — *load-bearing for Homebrew*,
|
||||
lives in the Gitea edge config, **not** this repo (see §4). If lost on a
|
||||
server rebuild, brew 403s again.
|
||||
- **Gitea:** `lazyeval` org with repos **`scoop-bucket`** + **`homebrew-tap`**;
|
||||
**`lazyeval-ci`** Gitea bot user (org team, Write to those repos);
|
||||
**`LAZYEVAL_PKG_TOKEN`** secret on `oli/rdbms-playground`.
|
||||
- **GitHub:** **`lazyeval-ci`** bot account; classic `public_repo` PAT →
|
||||
**`WINGET_GITHUB_TOKEN`** secret on `oli/rdbms-playground`; fork
|
||||
**`lazyeval-ci/winget-pkgs`**.
|
||||
- **winget bootstrap PR [#391335](https://github.com/microsoft/winget-pkgs/pull/391335)**
|
||||
submitted, in Microsoft review.
|
||||
- **komac 2.16.0** installed locally at `~/.local/bin/komac`.
|
||||
|
||||
## §2. D3 — the package-manager set (the session's throughline)
|
||||
|
||||
| Channel | State |
|
||||
| --- | --- |
|
||||
| crates.io / `cargo binstall` | **live** (handoff-74) |
|
||||
| `install.sh` / `install.ps1` | **live** — PS1 validated on ARM Windows 11 (5.1 + 7.6) |
|
||||
| Scoop (`lazyeval/scoop-bucket`) | **live + validated** (install + run) |
|
||||
| Homebrew (`lazyeval/homebrew-tap`) | **live + validated** — needs the Caddy rule (§4) |
|
||||
| winget (`LazyEvaluation.RdbmsPlayground`) | **wired**; PR #391335 awaiting Microsoft merge |
|
||||
|
||||
How Scoop/Homebrew/winget are wired: sibling jobs in
|
||||
`.gitea/workflows/publish.yaml` (manual `workflow_dispatch`, `tag` input),
|
||||
each idempotent + independent. Scoop/Homebrew render **dependency-free bash**
|
||||
manifests (`scripts/render-{scoop-manifest,homebrew-formula}.sh`) from the
|
||||
release `.sha256` sidecars and push to the org repos via `LAZYEVAL_PKG_TOKEN`.
|
||||
winget runs `komac update --submit` to PR `microsoft/winget-pkgs`, guarded
|
||||
against duplicate PRs. ADR-0056 **Amendments 2–4** carry the full design.
|
||||
|
||||
## §3. The Homebrew 403 saga + Caddy fix (don't lose this)
|
||||
|
||||
Homebrew `brew install` 403'd while every other tool worked. Root cause,
|
||||
reproduced: Gitea (≥1.25; here 1.26.2) **303-redirects release downloads to a
|
||||
method-bound AWS-SigV4 presigned S3 URL** (OVH), signed for the *incoming*
|
||||
request's HTTP verb. Homebrew **resolves with a HEAD, captures the returned
|
||||
HEAD-signed URL, then runs the download GET against it** → GET-on-a-HEAD-signed
|
||||
URL → 403. (`GET on HEAD-resolved = 403`, `HEAD on HEAD-resolved = 200`,
|
||||
`GET on GET-resolved = 200`.) GET-only tools (install.sh/ps1, binstall, curl)
|
||||
are unaffected. This is a **Homebrew defect** (reusing an ephemeral
|
||||
method-scoped credential as a durable locator); Gitea's per-request signing is
|
||||
correct, and SigV4 *cannot* sign one URL for two verbs. `SERVE_DIRECT=false`
|
||||
would fix it but was **declined** (don't reshape storage for one client).
|
||||
|
||||
**Fix (deployed, "Tier A"):** a Caddy rule answering **HEAD on
|
||||
`…/releases/download/…` directly** (200, no redirect, no body) so brew's
|
||||
resolve records the *original* URL and its download GET redirects fresh →
|
||||
GET-signed → 200. GET untouched; a HEAD carries no payload so nothing can
|
||||
break (a HEAD-probing download manager at most loses a progress-bar size).
|
||||
Reference Caddyfile is in **ADR-0056 Amendment 3**.
|
||||
|
||||
## §4. Immediate next steps
|
||||
|
||||
1. **winget PR #391335:** watch validation — the one likely speed bump is an
|
||||
**AV/SmartScreen manual-review label** (unsigned binary); usually clears.
|
||||
Once a moderator merges, winget is live.
|
||||
2. **Post-merge check (Windows):** `winget install LazyEvaluation.RdbmsPlayground`,
|
||||
confirm the command is **`rdbms-playground`** (it is — a direct single-exe
|
||||
portable takes its PATH alias from `Commands[0]`, which komac set; see §5).
|
||||
3. After merge, future releases are hands-off: the CI `winget` job's
|
||||
`komac update` carries each version (alias inherited from the merged
|
||||
manifest). The release ritual is unchanged from ADR-0054, with the
|
||||
`publish` dispatch now also doing Scoop/Homebrew/winget.
|
||||
|
||||
## §5. Gotchas learned (don't relearn the hard way)
|
||||
|
||||
- **The Caddy HEAD rule is server-side, not in this repo.** Homebrew (and any
|
||||
HEAD-then-GET client) depends on it. Record/back it up.
|
||||
- **GitHub tokens:** komac needs a **classic `public_repo`** PAT — **fine-grained
|
||||
tokens can't open the cross-fork PR** (komac #310: the PR is created on the
|
||||
*target* repo you don't administer, which the fine-grained model can't
|
||||
express). A classic token can't be repo-scoped, so it lives on a **dedicated
|
||||
bot** (`lazyeval-ci`) to bound the blast radius.
|
||||
- **komac fork must pre-exist:** `komac new` auto-fork *races* on winget-pkgs
|
||||
(huge repo) → *"Could not resolve to a Repository 'lazyeval-ci/winget-pkgs'"*.
|
||||
Fork manually first (`gh repo fork microsoft/winget-pkgs --clone=false`),
|
||||
wait, then re-run. Pre-fill `komac new` flags to skip the long interactive
|
||||
prompt parade.
|
||||
- **Direct portable alias = `Commands[0]`, NOT `PortableCommandAlias`.** The
|
||||
latter is **archive/nested-portable-only**; adding it to a bare-exe portable
|
||||
is wrong (komac correctly omits it). The "Commands" prompt → `rdbms-playground`
|
||||
is the on-PATH command. Verified vs winget-cli logic + the 1.6.0 schema.
|
||||
- **install.ps1 / Windows PowerShell 5.1** (the in-box shell — PS7 is opt-in):
|
||||
arch via `PROCESSOR_ARCHITECTURE` env (not `RuntimeInformation::OSArchitecture`,
|
||||
which is absent under 5.1's .NET-Framework facade + StrictMode); force TLS 1.2;
|
||||
`-UseBasicParsing`. Also update `$env:Path` in-session (the persisted User PATH
|
||||
only reaches *new* processes; "restart your shell" was wrong — sign-out/in or
|
||||
the in-session update).
|
||||
- **Gitea release downloads go through OVH S3 presigned URLs** — method-bound,
|
||||
300 s expiry. Never assume HEAD-resolve-then-GET works against them.
|
||||
|
||||
## §6. Parked / deferred (user decisions)
|
||||
|
||||
- **macOS Developer-ID signing + notarization** — pending the Apple account →
|
||||
Organization conversion. Ad-hoc signing covers all package-manager paths
|
||||
(brew-installed binary *runs* on Apple Silicon); Developer-ID only matters for
|
||||
browser-download Gatekeeper trust.
|
||||
- **Windows code signing (Trusted Signing)** — not required to *ship* winget
|
||||
(portable; only MSIX needs signing). Unsigned can earn an AV/SmartScreen
|
||||
manual-review label + a user-run warning. **Lazy Evaluation Ltd (since 2012)
|
||||
clears Trusted Signing's 3-year-org bar** when the user wants to remove the
|
||||
warning (individual onboarding is currently paused; org path is open).
|
||||
- **Release notes / CHANGELOG** — raised this session, not done. If wanted:
|
||||
a `CHANGELOG.md` and/or populated Gitea release bodies, then the CI `winget`
|
||||
job can pass komac `--release-notes-url …/releases/tag/$TAG`.
|
||||
|
||||
## §7. How to take over
|
||||
|
||||
1. Read handoffs 73 → 74 → 75, `CLAUDE.md`, `docs/requirements.md` (D1/D3),
|
||||
and **ADR-0056 (esp. Amendments 1–4)** + the GA plan
|
||||
`docs/plans/20260616-public-availability.md`.
|
||||
2. Workflow unchanged: phased, test-first, `/runda` + DA before commits, ADR
|
||||
amendment + README index-upkeep for decided-area changes, confirm commit
|
||||
messages, never push.
|
||||
3. If `cargo test` is needed, the baseline is **2509 / 1 ignored** (handoff-74).
|
||||
4. Consider a `cargo sweep` at this milestone (`target/` grows).
|
||||
Reference in New Issue
Block a user