Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/skills/github-surface-triage/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down
20 changes: 0 additions & 20 deletions .github/ISSUE_TEMPLATE/feature_request.md

This file was deleted.

6 changes: 3 additions & 3 deletions docs/AGENT-GITHUB-SURFACES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion docs/AGENT-ISSUE-WORKFLOW.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/<UUID>` 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 <URL-or-ID> 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/<ID>.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`.
Comment thread
AceHack marked this conversation as resolved.

## P2 — Skill-family expansions (Aaron-authorised)

- [ ] **Game-theory skill family/group.** Aaron 2026-04-20:
Expand Down
195 changes: 195 additions & 0 deletions docs/UPSTREAM-RHYTHM.md
Original file line number Diff line number Diff line change
@@ -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:<branch> \
--base main \
--title "<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
Comment thread
AceHack marked this conversation as resolved.
22 changes: 22 additions & 0 deletions docs/hygiene-history/discussions-history.md
Original file line number Diff line number Diff line change
@@ -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.)
22 changes: 22 additions & 0 deletions docs/hygiene-history/wiki-history.md
Original file line number Diff line number Diff line change
@@ -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.)
Loading
Loading