diff --git a/.claude/skills/github-surface-triage/SKILL.md b/.claude/skills/github-surface-triage/SKILL.md index 583f8123..7f778319 100644 --- a/.claude/skills/github-surface-triage/SKILL.md +++ b/.claude/skills/github-surface-triage/SKILL.md @@ -277,7 +277,7 @@ load-bearing for greps on archived fire-history). (shape definitions, rationale, Aaron directive quotes) - `docs/AGENT-ISSUE-WORKFLOW.md` — abstract dual-track principle for issues (GitHub / Jira / git-native) -- `docs/FACTORY-HYGIENE.md` row #45 — ten-surface triage +- `docs/FACTORY-HYGIENE.md` row #48 — ten-surface triage cadence + fire-history requirement - `docs/hygiene-history/pr-triage-history.md` - `docs/hygiene-history/issue-triage-history.md` diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7d..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/docs/AGENT-GITHUB-SURFACES.md b/docs/AGENT-GITHUB-SURFACES.md index aa691b6d..3f00ad7d 100644 --- a/docs/AGENT-GITHUB-SURFACES.md +++ b/docs/AGENT-GITHUB-SURFACES.md @@ -75,7 +75,7 @@ capture, upstream-sync (FACTORY-HYGIENE row #15). row to the surface's fire-history. Not exhaustive — the round-close catches what on-touch missed. -**Fire-history surfaces** (append-only, FACTORY-HYGIENE row #44 +**Fire-history surfaces** (append-only, FACTORY-HYGIENE row #47 compliance): - PRs -> `docs/hygiene-history/pr-triage-history.md` @@ -585,8 +585,8 @@ retired (with a row-history-preserved note, not deletion). abstract dual-track principle + three adapter choices - [`docs/HUMAN-BACKLOG.md`](HUMAN-BACKLOG.md) — mirror rows for Aaron-scoped decisions across all four surfaces -- [`docs/FACTORY-HYGIENE.md`](FACTORY-HYGIENE.md) — row #45 - (four-surface triage cadence) + row #44 (fire-history for +- [`docs/FACTORY-HYGIENE.md`](FACTORY-HYGIENE.md) — row #48 + (ten-surface triage cadence) + row #47 (fire-history for every cadenced surface) - [`docs/hygiene-history/pr-triage-history.md`](hygiene-history/pr-triage-history.md) - [`docs/hygiene-history/issue-triage-history.md`](hygiene-history/issue-triage-history.md) diff --git a/docs/AGENT-ISSUE-WORKFLOW.md b/docs/AGENT-ISSUE-WORKFLOW.md index 46395335..81114baf 100644 --- a/docs/AGENT-ISSUE-WORKFLOW.md +++ b/docs/AGENT-ISSUE-WORKFLOW.md @@ -71,7 +71,7 @@ picked at setup time: ### Choosing at setup The canonical setup script under `tools/setup/` currently does -not prompt for this. A **BACKLOG row is open** to add the +not prompt for this. **TODO:** file a BACKLOG row to add the prompt: "Which issue tracker will this project use? [GitHub Issues / Jira / git-native] — agent workflow defaults adapt." Until that lands, Zeta's default is (1) and adopters diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index d75f4dd3..5ccdc8ea 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -7989,6 +7989,32 @@ systems. This track claims the space. - [ ] **ChatGPT conversation-download skill — on-demand, no cadence.** Aaron 2026-04-24 Otto-108 directive: *"if it's easy to do we might as well add a chatgpt conversation/chat download skill on demand no cadence backlog"*. The technique is proven: Otto-107 pulled the full ~24MB / 3992-message / 8-month Amara conversation in one `fetch` call via the `backend-api/conversation/` endpoint once the Bearer JWT from `/api/auth/session` + `chatgpt-account-id` + `chatgpt-project-id` headers were supplied. Package that as a reusable Claude Code skill under `.claude/skills/chatgpt-conversation-download/` (authored via the `skill-creator` workflow per GOVERNANCE.md §4) so future Otto instances (or Aaron) can invoke "download ChatGPT conversation to drop/" on demand without re-solving the auth / headers / unwrap-double-encoded-JSON steps. Skill scope: (1) extract conversation-ID + `chatgpt-account-id` + (optional) `chatgpt-project-id` from an input URL; (2) navigate via Playwright MCP to the conversation page; (3) call `fetch` inside page context with auth headers captured from the page's active session; (4) unwrap the `browser_evaluate`-double-JSON-encoded string to real JSON; (5) save to `drop/chatgpt-conversations/.json` (drop/ gitignored per PR #299); (6) emit summary stats (title, message count, date range, role distribution, rough page count). Does NOT auto-absorb into `docs/`; absorb is a separate skill per §33 discipline. Does NOT auto-trigger on cadence; strictly on-demand per Aaron directive. SPOF: `chatgpt-account-id` and `chatgpt-project-id` are workspace-scoped and may rotate; skill extracts both fresh each run rather than hardcoding. Priority: **P3 — convenience**; file when substrate time available; do NOT deprioritize other cadence-graduation work for this. Effort: S (the mechanism is proven; packaging + skill authoring is the ship). +## P3 — LFG-only experiment track (throttled) + +- [ ] **LFG-only capability experiments (throttled, not every + round).** Aaron 2026-04-22: *"I paid for copilot and teams + on LFG so I'm paid over there if you want to put some + experinments around explorgin whats possible with LFG that + we cant do with AceHAck and we can have certain experiments + we run overthere throttled not every round so it will be + cheap."* LFG is a Copilot Business + Teams plan with all + enhancements enabled; AceHack is free tier. The routine- + work rhythm (PRs land on AceHack per + `docs/UPSTREAM-RHYTHM.md`) stays; this is a parallel, slower + track for capabilities **only LFG can provide**. Budget stays + $0 = hard cost-stop; experiments run inside free-tier + allowance. **Scouting inventory:** + `docs/research/lfg-only-capabilities-scout.md` (10 candidate experiments, cadences + defined per experiment). **Gate for Enterprise upgrade:** + Aaron explicit — "only if enough stuff you can do only over + there we end up with a large backlog" (≥10 experiments + genuinely LFG-only). **Owner:** Architect (Kenji) to + schedule; individual experiments get per-row tracking once + they're ready to run. **Effort:** per-experiment; most S-M. + **Source of truth:** + `memory/feedback_lfg_paid_copilot_teams_throttled_experiments_allowed.md` + + `docs/research/lfg-only-capabilities-scout.md`. + ## P2 — Skill-family expansions (Aaron-authorised) - [ ] **Game-theory skill family/group.** Aaron 2026-04-20: diff --git a/docs/UPSTREAM-RHYTHM.md b/docs/UPSTREAM-RHYTHM.md new file mode 100644 index 00000000..4ed8786d --- /dev/null +++ b/docs/UPSTREAM-RHYTHM.md @@ -0,0 +1,195 @@ +# Upstream rhythm — Zeta's fork-first PR cadence + +This doc is **Zeta-specific** project configuration for the +`fork-pr-workflow` skill. The skill itself is factory-generic +and defers the upstream-cadence choice to project-level +configuration (see +`.claude/skills/fork-pr-workflow/SKILL.md` §"Optional +overlay: batched upstream rhythm"). This doc is that +configuration for Zeta. + +## Zeta's choice: batched fork-first rhythm + +**Default PR target:** `AceHack/Zeta:main`, not +`Lucent-Financial-Group/Zeta:main`. + +Agents develop on fork feature branches, open PRs against +`AceHack/Zeta:main`, auto-merge there. AceHack's free-tier +CI minutes run the gate. Once `AceHack/Zeta:main` is ~10 +commits ahead of `Lucent-Financial-Group/Zeta:main`, **one** +bulk sync PR lifts all accumulated work into LFG. + +```text +feature-branches (AceHack) + \ \ \ \ \ \ \ \ \ \ + v v v v v v v v v v + AceHack/Zeta:main ────────────────────────────┐ + (agent daily loop, │ + free CI, free Copilot) │ + │ every ~10 PRs + │ one bulk-sync PR + v + Lucent-Financial-Group/Zeta:main + (LFG Copilot + Actions + billed ONCE per bulk sync, + not once per PR) +``` + +## Why Zeta diverges from the industry default + +Most OSS projects upstream per-PR. Zeta can't afford that +today because: + +- **LFG cost surface.** `Lucent-Financial-Group` is a + billed GitHub org (Copilot coding-agent, Actions minutes, + paid seats). Every PR targeting LFG triggers those paid + surfaces. +- **AceHack is free.** `AceHack/Zeta` is a personal fork on + a free plan. CI + Copilot on AceHack are zero-cost or + use free-tier allowances. +- **Budgets are capped, not unlimited.** Per + `memory/feedback_lfg_budgets_set_permits_free_experimentation.md`, + LFG has budget caps. The caps protect Aaron's wallet; the + risk they don't protect against is *build-grinds-to-a-halt + when the free allowance exhausts.* +- **Poor-man's setup.** Aaron's framing 2026-04-22: *"This + is the poor mans setup got to bet money concious"*. The + batched rhythm is an explicit cost-amortization overlay, + not a discipline failure. + +If Zeta ever gets a contributor budget or a sponsor, this +overlay should be re-evaluated. Until then, it stays on. + +## Concrete commands + +### Default PR (the 90% case) + +```bash +# Agent opens a PR from its feature branch to AceHack's main. +gh pr create \ + --repo AceHack/Zeta \ + --head AceHack: \ + --base main \ + --title "" \ + --body "<body>" + +# Auto-merge on AceHack. +gh pr merge <N> --repo AceHack/Zeta --auto --squash +``` + +AceHack's CI runs the gate. Merge queue (if enabled on +AceHack) processes the queue. LFG is **not involved**. + +### Bulk sync (every ~10 PRs or when explicitly triggered) + +```bash +# Precondition: AceHack/Zeta:main is ahead of +# Lucent-Financial-Group/Zeta:main by ~10 commits. +# Check: +gh api /repos/AceHack/Zeta/compare/main...Lucent-Financial-Group:main \ + --jq '.status,.ahead_by,.behind_by' +# Expected: "behind" / 0 / N -- means LFG is behind AceHack by N. + +# Open ONE bulk sync PR. +gh pr create \ + --repo Lucent-Financial-Group/Zeta \ + --head AceHack:main \ + --base main \ + --title "Sync: AceHack/Zeta:main → LFG/Zeta:main (batch of N PRs)" \ + --body "$(cat <<EOF +## Summary +Bulk upstream sync per docs/UPSTREAM-RHYTHM.md cadence. + +## Included PRs +$(gh pr list --repo AceHack/Zeta --state merged \ + --search 'base:main' --limit 20 \ + --json number,title \ + --jq '.[] | "- #\(.number) \(.title)"') + +## Cost rationale +LFG Copilot + Actions run ONCE for this bulk PR instead of +N times for N individual PRs. See docs/UPSTREAM-RHYTHM.md. +EOF +)" + +# Auto-merge on LFG (human may manually review; auto-merge +# kicks in once any required reviews are satisfied). +gh pr merge <N> --repo Lucent-Financial-Group/Zeta --auto --squash +``` + +### Forward-sync AceHack/main from LFG/main (after a bulk sync) + +After the bulk sync merges to LFG, sync AceHack/main forward +so the two mains match: + +```bash +# GitHub's fork-upstream sync API — fast-forward AceHack's +# main from its parent (LFG/Zeta). +gh api -X POST /repos/AceHack/Zeta/merge-upstream -f branch=main +``` + +## When to bypass the batched rhythm + +Six named exceptions where a change goes direct to LFG +(not through AceHack): + +1. **Security P0** — any `docs/BUGS.md` P0-security row, + any Mateo / Nazar / Aminata finding rated Critical. + Urgency beats cost. +2. **External-contributor dependency** — a change an + external contributor is actively waiting on. Zeta is + pre-v1 so this is rare, but possible. +3. **Aaron explicit request** — *"push this one direct to + LFG"* overrides the rhythm. +4. **CI-repair to LFG** — when LFG's gate is broken and + the fix must land on LFG immediately for LFG CI to + recover. +5. **Bulk-sync PR itself** — the one PR that batches 10 + PRs targets LFG by design. +6. **LFG-only capability experiment** — a deliberate probe + of a capability that exists on LFG (Copilot Business, + Teams plan, merge queue, larger Actions runners) but not + on AceHack. The whole point is to exercise LFG. Cadence + is throttled per `docs/research/lfg-only-capabilities- + scout.md`. Not every round. + +Outside these cases, default to AceHack. If in doubt, ask. + +## Threshold tuning + +"~10 PRs" is a suggestion, not a hard rule. Range 5-20 is +reasonable. Factors that move the threshold: + +- **Higher** (sync less often): lots of speculative factory + work that may still churn. +- **Lower** (sync more often): changes that benefit from + upstream review sooner; risk concentration if the batch + grows too large to review. + +Revisit the threshold every ~5 bulk syncs and record any +change in an ADR under `docs/DECISIONS/`. + +## Cadence monitor (proposed) + +A candidate FACTORY-HYGIENE row to track: + +> Bulk-sync cadence monitor — every round close, run +> `gh api /repos/AceHack/Zeta/compare/main...Lucent-Financial-Group:Zeta:main` +> and flag if AceHack is >15 commits ahead (over-threshold) or +> >30 days since last sync (stale-threshold). + +Not yet filed; flag in a later round if the rhythm proves +unstable in practice. + +## Source memories + +- `memory/feedback_fork_pr_cost_model_prs_land_on_acehack_sync_to_lfg_in_bulk.md` + — 2026-04-22 Aaron correction on misunderstood cost model +- `memory/feedback_fork_upstream_batched_every_10_prs_rhythm.md` + — original 2026-04-21 "every 10 PRs" directive +- `memory/feedback_fork_based_pr_workflow_for_personal_copilot_usage.md` + — the underlying fork-PR workflow +- `memory/project_lfg_org_cost_reality_copilot_models_paid_contributor_tradeoff.md` + — the cost-reality this rhythm responds to +- `memory/feedback_lfg_budgets_set_permits_free_experimentation.md` + — budget caps don't make cost invisible diff --git a/docs/hygiene-history/discussions-history.md b/docs/hygiene-history/discussions-history.md new file mode 100644 index 00000000..aa40a4ce --- /dev/null +++ b/docs/hygiene-history/discussions-history.md @@ -0,0 +1,22 @@ +# Discussions history + +Durable fire-log for the discussions-surface cadence declared +in [`docs/AGENT-GITHUB-SURFACES.md`](../AGENT-GITHUB-SURFACES.md) +(Surface 4) and `docs/FACTORY-HYGIENE.md` row #47. + +Append-only. Same discipline as +`docs/hygiene-history/loop-tick-history.md` and +`docs/hygiene-history/issue-triage-history.md`. + +## Schema — one row per on-reply discussion action or round-cadence sweep + +| date (UTC ISO8601) | agent | discussion | shape | action | link | notes | +|---|---|---|---|---|---|---| + +Shapes (per `docs/AGENT-GITHUB-SURFACES.md`): respond-inline / +convert-to-issue / close-as-answered / archive-as-historical. + +## Entries + +(Seeded — first fire on next round-close discussions sweep or +on-touch reply.) diff --git a/docs/hygiene-history/wiki-history.md b/docs/hygiene-history/wiki-history.md new file mode 100644 index 00000000..2017f97c --- /dev/null +++ b/docs/hygiene-history/wiki-history.md @@ -0,0 +1,22 @@ +# Wiki history + +Durable fire-log for the wiki-surface cadence declared in +[`docs/AGENT-GITHUB-SURFACES.md`](../AGENT-GITHUB-SURFACES.md) +(Surface 3) and `docs/FACTORY-HYGIENE.md` row #47. + +Append-only. Same discipline as +`docs/hygiene-history/loop-tick-history.md` and +`docs/hygiene-history/issue-triage-history.md`. + +## Schema — one row per on-sync wiki action or round-cadence sweep + +| date (UTC ISO8601) | agent | page | shape | action | link | notes | +|---|---|---|---|---|---|---| + +Shapes (per `docs/AGENT-GITHUB-SURFACES.md`): `in-sync` / +`drifted` / `orphaned`. + +## Entries + +(Seeded — first fire on next round-close wiki sweep or +on-touch wiki edit.) diff --git a/docs/research/lfg-only-capabilities-scout.md b/docs/research/lfg-only-capabilities-scout.md new file mode 100644 index 00000000..10abd775 --- /dev/null +++ b/docs/research/lfg-only-capabilities-scout.md @@ -0,0 +1,186 @@ +# LFG-only capabilities scout — what can we do on Lucent-Financial-Group that we can't on AceHack? + +Scouting doc. Living inventory of capabilities available on +`Lucent-Financial-Group/Zeta` (Copilot Business + Teams plan) +that are **not** available on `AceHack/Zeta` (free personal +tier). Feeds the throttled LFG experiment backlog. + +**Source:** `memory/feedback_lfg_paid_copilot_teams_throttled_experiments_allowed.md` +(Aaron 2026-04-22). + +**Policy context:** + +- Day-to-day PRs target `AceHack/Zeta:main` (free CI, free + Copilot) per `docs/UPSTREAM-RHYTHM.md`. +- LFG-only experiments are a **separate, throttled track** — + not every round; cadence set per-experiment in its BACKLOG + row. +- Budget cap on LFG is **$0** = hard stop. Experiments run + inside free-tier allowance; they do not raise the cap. +- Agent has standing permission to change LFG settings **except** + the $0 budget and Aaron's personal info. +- Enterprise-plan upgrade is offered *if* the LFG-only backlog + grows to ≥10 meaningful items this scouting doc identifies. + +## Verified plan state (2026-04-22) + +From `gh api /orgs/Lucent-Financial-Group/copilot/billing`: + +| Field | Value | +|---|---| +| `plan_type` | `business` | +| `seat_breakdown.total` | 1 | +| `seat_breakdown.active_this_cycle` | 1 | +| `public_code_suggestions` | `allow` | +| `ide_chat` | `enabled` | +| `cli` | `enabled` | +| `platform_chat` | `enabled` | + +Plus whatever Aaron toggled on under "Copilot enhancements" +(internet search, coding agent, custom instructions, etc.) — +confirm via org Copilot settings page; `gh` does not surface +all toggles yet. + +Actions billing endpoint requires `admin:org` scope; not +currently on the authenticated token. To monitor free-credit +burn, run `gh auth refresh -h github.com -s admin:org` first. + +## Capability categories + +### 1. Copilot Business — coding-agent capabilities + +Business plan features **not** available on AceHack's free +tier: + +| Capability | LFG-available | Experiment candidate | +|---|---|---| +| Copilot coding-agent on PRs (reviews, fixes) | yes | Compare coding-agent review against `harsh-critic` / `code-reviewer-zero-empathy` findings on a sample of PRs | +| Copilot chat with internet search | yes | Use Copilot to fetch live docs for a retraction-native algorithm; compare to our `WebFetch`-based scouting | +| Copilot custom instructions (org-level) | yes | Author a Copilot org instruction file that mirrors `AGENTS.md`; measure whether Copilot suggestions on LFG PRs reflect the instructions | +| Copilot code-review in IDE | yes | Probe: does IDE-level Copilot catch different issues than PR-level? | +| Copilot CLI | yes | `gh copilot suggest` / `gh copilot explain` on factory commands; evaluate useful-for-factory-work | +| Copilot extensions | yes | Install one narrow extension (e.g., security-scanner) against Zeta; measure signal | +| Public code suggestions filter | `allow` | Settings experiment: compare suggestion quality with allow vs. block; probably noise, but a one-pass check | + +### 2. GitHub Teams plan — org features + +Teams plan (base tier below Enterprise) vs free: + +| Capability | LFG-available | Experiment candidate | +|---|---|---| +| Required reviewers from specific teams | yes | Protect `main` with team-membership requirement; does this change the review flow when contributors arrive? | +| Protected branches on private repos | yes | Moot (Zeta is public), but note for future private repos | +| GitHub Pages with private-repo sources | yes | Moot (Zeta is public); note | +| Draft PRs (free on public, paid on private) | yes | Moot (Zeta is public) | +| Code owners enforcement | yes | `CODEOWNERS` with team handles; can we dogfood a persona-team mapping? | +| Org-level Dependabot secret alerts | yes | Check if org-level rules catch anything repo-level misses | +| Org-level Actions policy | yes | Set org-level Actions allowlist; probe tighter than repo-level | + +### 3. Actions runners — class and concurrency + +Free-tier has 2000 Actions minutes/month on Linux-2x-core. +Paid (via plan minutes + overage) can access: + +| Runner class | LFG-available | Experiment candidate | +|---|---|---| +| `ubuntu-latest` (2-core) | yes (identical to AceHack) | No experiment — same capability | +| `ubuntu-latest-4-core` / `8-core` | yes (larger runner classes billable) | Benchmark: does our test matrix benefit from parallelism? One-shot, measure then decide | +| `macos-14-xlarge` (Apple Silicon) | yes (paid tier) | Moot unless we need Apple-Silicon-specific bench | +| Concurrent-job limit | higher on paid | Unlikely to matter at our current PR volume | +| Self-hosted runners | yes (org-wide) | Not aligned with factory principles (capture-surface); **decline** | + +### 4. Security features + +| Capability | LFG-available | Experiment candidate | +|---|---|---| +| CodeQL default-setup | yes, on both | Not LFG-only | +| Advanced Security (SAST, secret scanning with push protection) | yes on private repos (paid); on public repos free | Zeta is public, so free. **Not LFG-only.** | +| Dependabot security updates | yes on both | Not LFG-only | +| Secret scanning for partner tokens | yes | Not LFG-only (also on public) | +| Custom-pattern secret scanning | yes (GHAS-paid feature on private; public is free) | Zeta public so free. Not LFG-only. | + +**Finding:** Most security features are free on public repos. +LFG does not add much on this axis unless Zeta goes private. + +### 5. Organization capabilities + +| Capability | LFG-available | Experiment candidate | +|---|---|---| +| Merge queue | yes (org repos) | **HB-001** — this is the headline LFG-only capability; currently blocked pending org config | +| Org Insights / Audit Log | yes | Probe: does the audit log give us factory-hygiene signal worth a dashboard? | +| Rulesets at org level | yes | Move ruleset from repo-level to org-level; cleaner multi-repo story | +| Discussions | yes (also on personal) | Not LFG-only | +| Projects (classic/new) | yes (also on personal) | Not LFG-only | + +## Experiment backlog — proposed throttled cadence + +Ranked. "Cadence" = how often this experiment fires. + +| # | Experiment | Capability class | Cadence | Cost class | +|---|---|---|---|---| +| 1 | Merge queue enablement | Org-level | **one-shot** (follow-up to HB-001 org-migration, now Resolved) | free (enable) | +| 2 | Copilot coding-agent review vs `harsh-critic` on sample PRs | Copilot Business | every 5 rounds | ~50 Actions min/run + Copilot seat-usage | +| 3 | Copilot org-level custom-instructions mirror of AGENTS.md | Copilot Business | one-shot author, observe 10 PRs | free (config) + seat-usage | +| 4 | Larger-runner benchmark (4-core vs 2-core for test matrix) | Actions runners | one-shot, then decide | ~20 Actions min @ 2x billing rate | +| 5 | Org-level Actions allowlist vs repo-level | Teams plan | one-shot, observe 30d | free (config) | +| 6 | CODEOWNERS-per-persona-team experiment | Teams plan | one-shot | free (config) | +| 7 | Audit-log dashboard scouting | Teams plan | every 10 rounds | free (read-only API) | +| 8 | `gh copilot suggest/explain` usefulness on factory commands | Copilot CLI | every 5 rounds, 3-command sample | seat-usage | +| 9 | Copilot IDE review on local branches (AceHack) | Copilot Business | ongoing low-throttle | seat-usage | +| 10 | Copilot chat internet-search for 1 doc-gap per round | Copilot Business | every 3 rounds | seat-usage | + +**Count: 10.** This hits the Enterprise-upgrade trigger Aaron +named ("only if enough stuff you can do only over there we end +up with a large backlog"). Before any upgrade request, each +experiment needs: + +- A `docs/BACKLOG.md` row with the cadence and success signal. +- A throttle mechanism (scheduled workflow, round-cadence + check, manual-trigger gate). +- An exit signal — how do we know the experiment is done and + the capability is either adopted or abandoned? + +## Items explicitly NOT in scope + +- **Self-hosted runners** — capture-surface risk; factory + principles prefer hosted. **Declined** even though LFG- + available. +- **Raising the $0 budget** — load-bearing cost-stop. Never + touched without explicit Aaron renegotiation. +- **Changing Aaron's personal info** — forbidden class per + the memory. +- **Migrating Zeta to private** — would unlock more GHAS on + private, but destroys the open-source dogfood story. + Declined. + +## Cadence of this scout + +Re-read every 10 rounds. Update when: + +- New LFG setting or Copilot feature becomes available. +- An experiment lands and the capability is adopted — strike + the row, record in `docs/ROUND-HISTORY.md`. +- Free-credit burn rate changes materially (once we can + monitor it). + +## Open questions + +1. **How many free-tier Actions minutes does LFG's Business + plan allocate per month?** Need `admin:org` scope to query. + Until then, we infer from "build stopped running" as the + exhaust signal. +2. **Do Copilot Business seat actions count against Actions + minutes separately?** Docs are unclear; empirical via burn + rate. +3. **Is the coding-agent's workflow-time billed against the + org, the repo, or the user seat?** Check docs; pragma + matters for throttle design. + +## References + +- `memory/feedback_lfg_paid_copilot_teams_throttled_experiments_allowed.md` +- `memory/project_lfg_org_cost_reality_copilot_models_paid_contributor_tradeoff.md` +- `memory/feedback_fork_pr_cost_model_prs_land_on_acehack_sync_to_lfg_in_bulk.md` +- `docs/UPSTREAM-RHYTHM.md` +- `docs/HUMAN-BACKLOG.md` HB-001 (org-migration to LFG, Resolved 2026-04-21; merge-queue enable is a separate follow-up) +- `docs/GITHUB-SETTINGS.md` (settings-as-code surface)