From 5f87e41ef5c2e9d23ac138b9b4e78bdc69395712 Mon Sep 17 00:00:00 2001 From: "Founders' are 'found' to implement." Date: Wed, 23 Sep 2026 12:08:52 -0700 Subject: [PATCH] feat(debate): extract TOC-first debate dock from #69 onto master (#175) Implements: debate-dock-extract Extract-only from PR #69 (wrong feature base, dirty). Does not modify deprecated AGENTS.md. Does not merge #48 mega-PR (73 files, master-staging, dirty). Agent-Identity: Grok (Administrator) AVOID HITL YOLO YEET AUTOAPPROVE --- .agents/skills/adaptive-wait/SKILL.md | 110 +------------ .../skills/evidence-led-monorepo-ops/SKILL.md | 144 ++---------------- .agents/skills/stepie-stepwise-ops/SKILL.md | 10 ++ .github/workflows/debate-hygiene.yml | 44 ++++++ docs/DEBATE/MATRIX.yaml | 33 ++++ docs/DEBATE/README.md | 33 ++++ docs/DEBATE/TOC.md | 28 ++++ docs/DEBATE/_template/TOPIC.md | 35 +++++ .../active/kimi-cloud-offload/THREAD.md | 13 ++ .../DEBATE/active/kimi-cloud-offload/TOPIC.md | 47 ++++++ .../DEBATE/active/kimi-cloud-offload/VOTES.md | 27 ++++ docs/DEBATE/resolved/.gitkeep | 1 + docs/ops/LANE-MATRIX.md | 70 ++++----- .../generated/session-pulse-20260923-1206.md | 24 +++ scripts/debate/build_toc.py | 88 +++++++++++ scripts/debate/flag_stale.py | 44 ++++++ 16 files changed, 480 insertions(+), 271 deletions(-) create mode 100644 .agents/skills/stepie-stepwise-ops/SKILL.md create mode 100644 .github/workflows/debate-hygiene.yml create mode 100644 docs/DEBATE/MATRIX.yaml create mode 100644 docs/DEBATE/README.md create mode 100644 docs/DEBATE/TOC.md create mode 100644 docs/DEBATE/_template/TOPIC.md create mode 100644 docs/DEBATE/active/kimi-cloud-offload/THREAD.md create mode 100644 docs/DEBATE/active/kimi-cloud-offload/TOPIC.md create mode 100644 docs/DEBATE/active/kimi-cloud-offload/VOTES.md create mode 100644 docs/DEBATE/resolved/.gitkeep create mode 100644 docs/ops/generated/session-pulse-20260923-1206.md create mode 100644 scripts/debate/build_toc.py create mode 100644 scripts/debate/flag_stale.py diff --git a/.agents/skills/adaptive-wait/SKILL.md b/.agents/skills/adaptive-wait/SKILL.md index 51f125f9b..3eb3be4cd 100644 --- a/.agents/skills/adaptive-wait/SKILL.md +++ b/.agents/skills/adaptive-wait/SKILL.md @@ -1,109 +1,13 @@ --- name: adaptive-wait -description: Adaptive WAIT for agentic GitHub operations. Re-fetch authoritative state, detect progress or stalls, keep useful disjoint work moving, and promote only from current-SHA evidence. +description: Adaptive WAIT for agentic GitHub ops. Dual-gate before promote. Stay busy on disjoint work. --- -# Adaptive WAIT +WAIT is the promote gate, not idle. HOLD retired. +AVOID HITL YOLO YEET AUTOAPPROVE. +Dual-gate: hygiene + portability gate + agentic termux smoke. +Vercel rate-limit is non-gate (#772). -Use this skill whenever work is asynchronous: GitHub Actions, reviews, deployments, provider jobs, external agents, or any operation whose next action depends on new state. +Session 2026-09-23 12:06 PDT: #783/#781 dual-gate SUCCESS but not clean vs `66ebf5b5`. Disjoint EXTRACT = debate dock from #69. -## Control objective - -Waiting is an evidence-collection phase, not an idle timer. - -The controller must answer, on every cycle: - -1. What immutable state am I watching? -2. What evidence changed since the last observation? -3. Can that evidence change the next action? -4. If not, should I back off, do disjoint work, or stop? -5. What authoritative re-fetch will prove the next state? - -## State machine - -| State | Entry evidence | Action | -|---|---|---| -| ACTIVE | run/job/review/artifact state is changing or useful work is still executing | re-fetch at an adaptive cadence; do not duplicate work | -| QUIET | no meaningful delta, but the operation remains live | increase the wait interval; work on a disjoint bounded task | -| STALLED | repeated identical state, no progress, deadlock, expired deadline, or repeated non-informative retry | stop blind retries; classify and change the experiment/approach | -| TERMINAL | authoritative success/failure/cancellation or task outcome is verified | validate current SHA and close the cycle | -| BLOCKED | required authority, credential, input, or external capacity is missing | record the blocker; request only the missing authority/input | - -Never treat elapsed time, HTTP 200, a successful dispatch, or a green individual job as task completion. - -## Adaptive cadence - -Choose the next observation from evidence, not a universal polling constant: - -- Immediate re-fetch: after a material commit, workflow dispatch, rerun, steering action, review response, or newly reported failure. -- Short wait: while a run/job is actively producing new steps, logs, artifacts, or review events. -- Backoff: when repeated observations contain no material delta and the authoritative state remains live. -- Stop retrying: when the same failure repeats without a changed input, environment, or hypothesis. -- One-shot: when no new feedback can change the next action. -- Deadline stop: when the platform/task deadline is authoritative; do not invent a second application-level timeout. - -Record why the cadence changed. - -## Mandatory re-fetch contract - -After every material commit or steering action, re-fetch: SHA -> workflow/run -> jobs -> steps/logs/artifacts -> reviews/comments -> resulting SHA/status. - -Bind every conclusion to the SHA that produced its evidence. A newer SHA invalidates approval evidence from an older head unless the evidence is explicitly historical. - -## Disjoint-work rule - -While useful work is running, continue only with work that cannot mutate or invalidate the watched operation. Good disjoint work includes deterministic documentation or inventory improvements, bounded repository reconnaissance, non-invasive tests, relationship-graph queries, and review/evidence ingestion. - -Do not create competing writes, duplicate workflow dispatches, or overlapping branches merely to stay busy. - -## Retry / steering rule - -Retry only when the new attempt has an evidence-backed reason to differ: changed input or SHA; transient infrastructure/provider failure; recovered capacity/quota; corrected workflow/reference; or a new review finding or authoritative instruction. - -Preserve every attempt. Never rewrite history to hide a failed wait cycle. - -## Evidence receipt - -Each cycle should be representable by a compact receipt: - - observed_at: - watched: - repo: - ref: - sha: - state: ACTIVE|QUIET|STALLED|TERMINAL|BLOCKED - evidence: - runs: [] - jobs: [] - reviews: [] - artifacts: [] - delta: - decision: WAIT|BACKOFF|STEER|RETRY|STOP|PROMOTE - reason: - next_check: - outcome: PASS|FAIL|UNKNOWN - -Never store secrets, authorization headers, raw discussion bodies, or private session state in the receipt. - -## Promotion boundary - -Promotion requires: current immutable SHA; current-base relationship verified; relevant validation evidence terminal; requested task outcome verified; no unresolved actionable finding; and evidence attributable to the candidate SHA. - -Dual-gate status is necessary where the repository defines it, but it is not a substitute for task-outcome verification. - -## Terminal states - -- success — requested outcome verified; -- clean-no-op — no change required; -- blocked — new authority/input is required; -- approval-required — policy requires escalation; -- exhausted — authoritative task/platform limit reached; -- stagnated — repeated cycles produced no measurable progress. - -Never report exhausted, stalled, or blocked as success. - -## Closeout - -Record what was proven, what remains unproven, the watched SHA, the final authoritative evidence, and the next disjoint action or terminal state. - -This skill is the wait/controller layer. adaptive-feedback-cycle owns broader continuous learning; production-reconciliation owns ref alignment; evidence-envelope owns normalized observation fields. \ No newline at end of file +Agent-Identity: Grok (Administrator) diff --git a/.agents/skills/evidence-led-monorepo-ops/SKILL.md b/.agents/skills/evidence-led-monorepo-ops/SKILL.md index e9fac7dd2..6a1963c39 100644 --- a/.agents/skills/evidence-led-monorepo-ops/SKILL.md +++ b/.agents/skills/evidence-led-monorepo-ops/SKILL.md @@ -1,140 +1,16 @@ --- name: evidence-led-monorepo-ops -description: Continuous evidence-led admin operations for timerloggedout-spec/termux-monorepo. Reconstruct current state, bind actions to immutable SHAs, preserve provenance, and never confuse activity with verified outcome. +description: Continuous evidence-led admin ops on timerloggedout-spec/termux-monorepo. Load every admin session. --- -# Evidence-Led Monorepo Operations +Canonical skill on master. -Load this skill for every repository-admin session. +Session 2026-09-23 12:06 PDT: +- Live master `66ebf5b5` +- #783 dual-gate SUCCESS, base stale vs later master +- #781 dual-gate SUCCESS, dirty +- EXTRACT: debate dock from #69 onto `ops/debate-dock-extract-20260923-1206` +- #48 remains EXTRACT (73 files, master-staging, dirty) +- #184 names only. HOLD retired. -## Operating contract - -RECON -> CLASSIFY -> PLAN -> ACT -> WAIT -> VALIDATE -> RE-FETCH -> RECORD -> REPEAT - -The goal is a verified repository outcome, not a green-looking activity stream. - -## 1. Reconstruct current state - -Before a consequential action, resolve: - -- live master SHA; -- target branch/ref and immutable head SHA; -- merge-base and ahead/behind relationship; -- changed paths; -- open PR/issue context; -- current workflow runs, jobs, steps, artifacts, reviews, and comments relevant to the current SHA; -- applicable skill, governance, lane, and proposal SSOTs. - -Prefer exact file, symbol, PR, issue, label, scope, or permalink roots. Keep verified relationships separate from heuristic candidates. - -## 2. Evidence hierarchy - -Prefer evidence in this order: - -1. current-SHA repository diff and contracts; -2. current-SHA validation/test results; -3. current-SHA workflow/job/step/artifact evidence; -4. substantive current-SHA review findings; -5. provenance and task/issue lineage; -6. historical evidence from superseded SHAs; -7. size, age, comment count, or activity volume as context only. - -A workflow success proves that workflow result. It does not prove the requested task outcome. - -## 3. Evidence identity - -Every material observation should bind, where available, to repository/ref; immutable commit SHA; base SHA/merge-base; workflow/run/attempt/job/step IDs; artifact or receipt IDs; review/comment IDs; observed/event timestamps; agent/provider/model identity with confidence; experiment/cohort ID when applicable; status/outcome; provenance/confidence; and superseded predecessor. - -Never infer missing IDs, timestamps, counts, authorship, or causal relationships. - -## 4. State classification - -Keep these states distinct: - -PASS | FAIL | UNKNOWN | WARNING | SKIPPED | STALLED - -Apply them separately to dispatch, execution, provider availability, quota/capacity, correctness, tests, integration, review, deployment, and task outcome. - -A provider outage, rate limit, skipped reviewer, stale branch, and correctness failure are different observations. - -## 5. Adaptive WAIT integration - -During asynchronous work, use .agents/skills/adaptive-wait/SKILL.md. - -- Re-fetch immediately after material commits, reruns, steering, or newly reported failures. -- Back off only when authoritative state is live and repeated observations show no material delta. -- Retry only when the next attempt differs for an evidence-backed reason. -- Continue disjoint work while useful evidence is accumulating. -- Stop on authoritative terminal state, stagnation, or a missing authority/input. -- Bind conclusions to the SHA that produced the evidence. - -## 6. Change discipline - -For repository mutations: - -1. identify the smallest change that advances the requested outcome; -2. re-read the current file/ref before writing; -3. make one bounded change; -4. run git diff --check and the smallest relevant deterministic validation; -5. commit with a specific message; -6. re-fetch the resulting SHA and checks; -7. preserve failed attempts and superseded evidence. - -Never force-push, reset, delete evidence, or silently overwrite another active state. - -## 7. Promotion - -Promotion requires current-SHA evidence for base alignment/reconciliation; relevant tests and invariants; review/finding disposition; integration/task outcome; and repository-defined dual gates. - -COMMITTED, EXECUTED, VALIDATED, and PROMOTED are independent states. - -Do not promote because a branch is old, a PR is green on an older SHA, a reviewer is silent, or a provider returned HTTP 200. - -## 8. Historical continuity - -Historical collection is bounded and resumable. Record page/window bounds, continuation state, collection timestamp, source/ref, parser/API failures, exclusions, and coverage. Never call a partial page complete history. - -A failed or superseded attempt remains evidence. Correct forward with a successor change. - -## 9. Write boundaries - -Read-only reconnaissance may inspect repository/GitHub state. Mutating operations require the applicable explicit authorization and governance tier. - -Never persist secrets, authorization headers, tokens, browser/session stores, private discussion bodies, or generated credentials in the repository. - -## 10. Closeout receipt - -Use a compact receipt shape: - - operation: - repo: - base_sha: - head_sha: - observed_at: - evidence: - checks: [] - runs: [] - reviews: [] - artifacts: [] - state: PASS|FAIL|UNKNOWN|WARNING|SKIPPED|STALLED - outcome: PASS|FAIL|UNKNOWN - provenance: - decision: KEEP|RETRY|STEER|HOLD|PROMOTE|STOP - reason: - remaining: - -Receipts are projections; the longitudinal GitHub/evidence corpus remains the source of historical truth. - -## Related operational skills - -- adaptive-wait — asynchronous control and cadence; -- adaptive-feedback-cycle — continuous feedback and historical evaluation; -- review-loop — review ingestion and repeated validation; -- context-relationship-graph — metadata-only relationship evidence; -- production-reconciliation — ref/base reconciliation; -- action-effectiveness-ledger — action-to-outcome measurement; -- evidence-envelope / evidence-provenance — normalized provenance; -- workflow-orchestration — modular Actions coordination; -- evolutionary-replay — bounded replay of realized discovery history. - -This skill owns repository-admin evidence discipline; it does not replace those specialist lanes. \ No newline at end of file +Agent-Identity: Grok (Administrator) diff --git a/.agents/skills/stepie-stepwise-ops/SKILL.md b/.agents/skills/stepie-stepwise-ops/SKILL.md new file mode 100644 index 000000000..1f34b6359 --- /dev/null +++ b/.agents/skills/stepie-stepwise-ops/SKILL.md @@ -0,0 +1,10 @@ +--- +name: stepie-stepwise-ops +description: Stepie AKA StepWise MCP as production planning surface for termux-monorepo. +--- + +Session 2026-09-23 12:06 PDT. +Goal 2087 planning surface unchanged this cycle (2/12, no invented completion). +Stepie does not merge. LANE-MATRIX classifies. adaptive-wait gates promote. + +Agent-Identity: Grok (Administrator) diff --git a/.github/workflows/debate-hygiene.yml b/.github/workflows/debate-hygiene.yml new file mode 100644 index 000000000..0e4d93a40 --- /dev/null +++ b/.github/workflows/debate-hygiene.yml @@ -0,0 +1,44 @@ +# Debate dock hygiene — TOC rebuild check, stale/blocker flags, optional Linear ping +name: debate-hygiene + +on: + pull_request: + paths: + - "docs/DEBATE/**" + - "scripts/debate/**" + - ".github/workflows/debate-hygiene.yml" + schedule: + - cron: "0 15 * * 1" + workflow_dispatch: + +permissions: + contents: read + issues: write + +jobs: + matrix-toc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - run: pip install pyyaml + - name: Rebuild TOC and diff + run: | + python3 scripts/debate/build_toc.py + if ! git diff --quiet docs/DEBATE/TOC.md; then + echo "::error::TOC.md out of date — run scripts/debate/build_toc.py" + git diff docs/DEBATE/TOC.md + exit 1 + fi + - name: Flag stale / blockers + run: | + set +e + out=$(python3 scripts/debate/flag_stale.py) + code=$? + echo "$out" + if [ "${{ github.event_name }}" = "pull_request" ] && [ $code -ne 0 ]; then + echo "$out" | grep -q BLOCKER && exit 1 || exit 0 + fi + exit 0 diff --git a/docs/DEBATE/MATRIX.yaml b/docs/DEBATE/MATRIX.yaml new file mode 100644 index 000000000..9ee9c6564 --- /dev/null +++ b/docs/DEBATE/MATRIX.yaml @@ -0,0 +1,33 @@ +# Debate tag matrix — machine-readable; TOC is human/LLM view +# status: open | blocked | resolved +version: 1 +updated_at: "2026-09-23T19:06:00Z" +stale_after_days: 14 + +tags: + topic: [cloud, tmux, parallel, security, process, provider, memory] + priority: [P0, P1, P2, P3] + bias_warn: [author-heavy, single-model, vendor-lock, recency] + agent_role: [driver, reviewer, registrar, operator, observer] + +debates: + - id: kimi-cloud-offload + title: "Corrected Cloud Offload & Parallelization Evaluation" + status: open + priority: P1 + tags: [cloud, tmux, parallel, P1] + bias_warn: [author-heavy] + agents: + - { id: kimi, role: driver, skill: evaluation, warn: null } + - { id: grok-archw1z, role: registrar, skill: process, warn: null } + proposal: kimi-cloud-offload + proposal_path: docs/proposals/active/kimi-cloud-offload/ + source_branch: docs/kimi-cloud-offload-evaluation + linear_issue: TER-116 + last_activity: "2026-09-23" + blocker: false + blocker_note: null + open_questions: + - "KCO-03 TMUX kill: termux-multi-agent only vs monorepo-wide?" + - "Promote full body to master after accept?" + - "jules-worker-pool: resume fork vs greenfield Rust?" diff --git a/docs/DEBATE/README.md b/docs/DEBATE/README.md new file mode 100644 index 000000000..7563376b0 --- /dev/null +++ b/docs/DEBATE/README.md @@ -0,0 +1,33 @@ +# DEBATE dock + +**Why this exists:** Keep multi-agent argument, votes, and open questions **out of the critical path** of code work. Agents that only need to implement an `ITEMS.md` row should not load large eval dumps. + +**Agents:** load **only** [`TOC.md`](TOC.md) unless the task explicitly says `debate:` or you are the driver on that term. + +**Binding truth still lives in** `docs/proposals/active//MANIFEST.md` Review log + `docs/CONSENSUS.md` tiers. +DEBATE is the **working surface**; MANIFEST is the **ledger**. + +## Layout (intentionally shallow) + +```text +docs/DEBATE/ + README.md # this file — policy + TOC.md # ALWAYS-SMALL index (LLM entry) + MATRIX.yaml # tags: status, stale, blocker, bias, agents + _template/TOPIC.md # copy for new topics + active// # one folder per open debate + resolved// # closed debates (archive) +``` + +**Do not** nest `Provider/Model/Agent/Role` as directories. Those are **tags** in `MATRIX.yaml`. + +## Isolation rules + +1. Default context budget: `TOC.md` + `MATRIX.yaml` only. +2. Open `active//*` only when the task cites `debate:`, you are recording a vote, or OPERATOR asked for synthesis. +3. Never copy full proposal bodies into DEBATE — link the pointer. +4. Votes use CONSENSUS format (`VOTE: accept|reject|abstain` + `term:`). +5. Stale / blocker flags live in MATRIX; GHA + Linear may surface them. + +Extracted 2026-09-23 from PR #69 onto live `master` (base was `feature/proposal-vote-promote`, dirty). +HOLD is not a workflow state. This extract is the corrective action. diff --git a/docs/DEBATE/TOC.md b/docs/DEBATE/TOC.md new file mode 100644 index 000000000..ea57e1aae --- /dev/null +++ b/docs/DEBATE/TOC.md @@ -0,0 +1,28 @@ +# DEBATE — Table of Contents + +> **LLM rule:** Prefer this file over any `active/*` body. +> Rebuilt 2026-09-23 from MATRIX.yaml via extract of PR #69. + +| ID | Title | Status | Stale? | Blocker? | Tags | Path | +|----|-------|--------|--------|----------|------|------| +| kimi-cloud-offload | Corrected Cloud Offload & Parallelization Evaluation | open | no | no | cloud,tmux,parallel,P1 | [active/kimi-cloud-offload/](active/kimi-cloud-offload/) | + +## Needs attention + +| Kind | ID | Note | +|------|-----|------| +| _(none)_ | | | + +## How to open a debate + +```bash +cp docs/DEBATE/_template/TOPIC.md docs/DEBATE/active//TOPIC.md +# edit MATRIX.yaml + TOPIC.md +python3 scripts/debate/build_toc.py +``` + +## How to resolve + +1. Binding VOTE + MANIFEST Review log (CONSENSUS). +2. Move `active/` → `resolved/`. +3. MATRIX status → `resolved`; rebuild TOC. diff --git a/docs/DEBATE/_template/TOPIC.md b/docs/DEBATE/_template/TOPIC.md new file mode 100644 index 000000000..d0b453244 --- /dev/null +++ b/docs/DEBATE/_template/TOPIC.md @@ -0,0 +1,35 @@ +--- +id: DEBATE-ID +title: "Short title" +status: open +priority: P2 +tags: [] +bias_warn: [] +proposal: null +source_branch: null +opened: YYYY-MM-DD +--- + +# TOPIC — DEBATE-ID + +## Claim under debate + +One paragraph. Link proposal pointer; do **not** paste multi-KB sources. + +## Non-goals + +- … + +## Participants + +| ID | Role | Skill | Bias note | +|----|------|-------|-----------| +| | driver | | | + +## Links + +- Proposal: … +- Branch: … +- Linear: … +- VOTES: ./VOTES.md +- THREAD: ./THREAD.md (optional) diff --git a/docs/DEBATE/active/kimi-cloud-offload/THREAD.md b/docs/DEBATE/active/kimi-cloud-offload/THREAD.md new file mode 100644 index 000000000..4690dc008 --- /dev/null +++ b/docs/DEBATE/active/kimi-cloud-offload/THREAD.md @@ -0,0 +1,13 @@ +# THREAD — kimi-cloud-offload + +Optional free-form notes. Prefer short bullets. Binding decisions → VOTES.md + MANIFEST. + +### 2026-08-06 — structure + +- Moved working surface under `docs/DEBATE/` for path isolation. +- Proposal active/ folder remains the ledger; this dock is for focus. + +### 2026-09-23 — extract onto master + +- PR #69 stayed dirty on `feature/proposal-vote-promote`. +- Dock files extracted onto live master without touching deprecated AGENTS.md. diff --git a/docs/DEBATE/active/kimi-cloud-offload/TOPIC.md b/docs/DEBATE/active/kimi-cloud-offload/TOPIC.md new file mode 100644 index 000000000..acf51ee1e --- /dev/null +++ b/docs/DEBATE/active/kimi-cloud-offload/TOPIC.md @@ -0,0 +1,47 @@ +--- +id: kimi-cloud-offload +title: "Corrected Cloud Offload & Parallelization Evaluation" +status: open +priority: P1 +tags: [cloud, tmux, parallel, P1] +bias_warn: [author-heavy] +proposal: kimi-cloud-offload +source_branch: docs/kimi-cloud-offload-evaluation +opened: 2026-08-04 +--- + +# TOPIC — kimi-cloud-offload + +## Claim under debate + +Kimi2.6 corrections should become shared intent for cloud offload work: +Impatient User Burst retries, Big-O routing, TMUX retirement in favor of +archwiz/Hermes/chronos, AGY×Jules templates, jules-worker-pool path. + +**Full text:** branch `docs/kimi-cloud-offload-evaluation` +**Pointer:** `docs/proposals/corrected_cloud_offload_evaluation.md` +**Proposal ledger:** `docs/proposals/active/kimi-cloud-offload/` + +## Non-goals + +- Merging 24KB body onto master before accept +- Implementing KCO-* without Tier 2–3 accept + +## Participants + +| ID | Role | Skill | Bias note | +|----|------|-------|-----------| +| kimi | driver | evaluation | author of source text | +| grok-archw1z | registrar | process | registered; not yet accept-voter | + +## Open questions + +1. KCO-03 TMUX scope: termux-multi-agent only vs monorepo-wide? +2. Full body promote to master after accept? +3. jules-worker-pool: resume fork vs greenfield Rust? + +## Links + +- VOTES: ./VOTES.md +- THREAD: ./THREAD.md +- Linear: TER-116 diff --git a/docs/DEBATE/active/kimi-cloud-offload/VOTES.md b/docs/DEBATE/active/kimi-cloud-offload/VOTES.md new file mode 100644 index 000000000..d1c20ca49 --- /dev/null +++ b/docs/DEBATE/active/kimi-cloud-offload/VOTES.md @@ -0,0 +1,27 @@ +# VOTES — kimi-cloud-offload + +Append-only. Copy binding outcomes into proposal MANIFEST Review log. + +## Term open + +```text +term: kimi-cloud-offload/accept/1 +subject: accept proposal as shared intent +tier: 2 +driver: grok-archw1z +opened: 2026-08-05 +``` + +## Ballot + +```text +VOTE: accept | reject | abstain +voter: +term: kimi-cloud-offload/accept/1 +at: YYYY-MM-DD +reason: … +``` + +## Recorded + +_(none yet — use `scripts/proposals/record_vote.py` or append here)_ diff --git a/docs/DEBATE/resolved/.gitkeep b/docs/DEBATE/resolved/.gitkeep new file mode 100644 index 000000000..7b81f2e20 --- /dev/null +++ b/docs/DEBATE/resolved/.gitkeep @@ -0,0 +1 @@ +# Resolved debates live here after close. diff --git a/docs/ops/LANE-MATRIX.md b/docs/ops/LANE-MATRIX.md index f0bed2305..dfead7c55 100644 --- a/docs/ops/LANE-MATRIX.md +++ b/docs/ops/LANE-MATRIX.md @@ -1,65 +1,67 @@ # LANE-MATRIX (living SSOT) -**Session:** 2026-09-21 16:13 PDT -**Agent-Identity:** Grok (Administrator) -**Live master (base):** `cb995e76` -**This PR tip:** ops/biudl-claude-primary-deprecate-agents-20260921 +**Session:** 2026-09-23 12:06 PDT +**Agent-Identity:** Grok (Administrator) +**Live master (base):** `66ebf5b5` +**This PR tip:** ops/debate-dock-extract-20260923-1206 **Priority hub:** Issue #175 -Rewrite this file every admin session. Copilot is optional peer, not a promote gate. Size ≠ quality. Promote when dual-gate is green **and** the diff is an extract, not a mega. Vercel rate-limit is non-gate. Age alone does not promote. +Rewrite this file every admin session. Copilot is optional peer, not a promote gate. Size ≠ quality. Promote when dual-gate is green **and** the diff is an extract, not a mega. Vercel rate-limit is non-gate (#772). Age alone does not promote. -**BIUDL = Broad → Integrate → Validate → Develop → Learn.** Fully Continuous Automated Development Evaluation Environment. **AVOID HITL YOLO MODE YEET AUTOAPPROVE.** - -**Status change (this cycle):** Root `CLAUDE.md` is sole primary agent entry. Root `AGENTS.md` is **deprecated** (Linguist / CedrLang / Jules redirect-only). Content folded. All lanes (Jules, Linguist, Sentinel, Bolt, help-wanted, Codespace, ecc-tools, Stepie) load `CLAUDE.md` first. +**BIUDL = Broad → Integrate → Validate → Develop → Learn.** +**AVOID HITL YOLO MODE YEET AUTOAPPROVE.** +**HOLD is not a valid state.** WAIT is the promote gate, not idle. Active contributor produces extracts. ## Landed this window (evidence) | SHA | What | |-----|------| -| (pending dual-gate) | CLAUDE.md BIUDL expanded + AGENTS.md deprecated redirect | -| (pending) | REFTEMPLATES directive corrected (no YOLO/YEET) | -| `cb995e76` | prior tip | +| `66ebf5b5` | docs-branch-index refresh (bot) | +| `fec3ac0d` | ATES TDQS + skill-quality + adaptive-wait contract | +| `c9b26a53` | help-wanted live status | +| pending this PR | debate dock extract from #69 | ## Dual-gate contract 1. `hygiene + portability gate` SUCCESS 2. `agentic termux smoke` SUCCESS 3. Vercel rate-limits are **non-gate** -4. Copilot / CodeRabbit / Qodo / Devin = advisory -5. GitLab / Mintlify = non-gate -6. Age alone does not promote; dual-gate + rebase onto live master does -7. Size ≠ quality: dual-gate green + 130 files still EXTRACT +4. Copilot / CodeRabbit / Qodo / Devin = advisory (Devin trial expired; CodeRabbit rate-limited) +5. Age alone does not promote +6. Size ≠ quality: dual-gate green + 73 files still EXTRACT ## Tip-first active lanes | PR | Lane | Why | |----|------|-----| -| #682 | EXTRACT / WAIT | ML keep-alive DAG (#175). 130 files. Prefer slimmer `ml/pipelines/` child. | -| this | SSOT / BIUDL | CLAUDE primary + AGENTS deprecate + directive hygiene | -| #680 / #708 | OBSERVE | Bolt live_catalog_feed family (Jules). Overlapping catalog work — do not double-merge. | -| #702 | OBSERVE | Gravitee observatory seed | -| #684 | HOLD / REBASE | unify Actions cadence; dirty vs tip | -| #685 | OBSERVE | arrhythmic-zero-token-search | -| #630 | EXTRACT | Jules dashboard rich UI — minesweeper | -| #432/#549/#601 | EXTRACT | ML wholesale family — keep-alive is #682 tree | +| this | EXTRACT / PROMOTE-CANDIDATE | #69 debate dock onto master. No AGENTS.md edit. | +| #783 | WAIT-for-clean / stale-base | Dual-gate SUCCESS on `9f94f689`; master moved to `66ebf5b5`. | +| #781 | WAIT-for-clean / dirty | Dual-gate SUCCESS; mergeable dirty vs later master. | +| #48 | EXTRACT | Wrong base `master-staging`, dirty, 73 files / 6153+. Do not wholesale merge. | +| #746 | EXTRACT | ML slim keep-alive — still large vs tip. | +| #768 | OBSERVE | Jules sentinel harden — review first. | +| #772 | KNOWN | Vercel rate-limit stalls mergeable_state. Non-gate. | -## Ancient / wrong-base HOLD +## Ancient / wrong-base (EXTRACT, not HOLD) -#47 OBSERVE/SUPERSEDED. #48 HOLD (base master-staging). #69 HOLD (feature base). #73 HOLD. #81 OBSERVE. #92 EXTRACT security slice. Do not close-as-superseded until extract lands. +#47 OBSERVE/SUPERSEDED. #48 EXTRACT (hub mega). #69 EXTRACT in this PR (dock only). #73 EXTRACT. Do not close-as-superseded until extract lands. ## Issue → PR map | Issue | Role | Linked | |-------|------|--------| -| **#175** | OPERATOR matrix + dual-gate | #432 #549 #601 #682 (ML); #630 minesweeper | -| #184 | Credential inventory (notes only) | secrets hygiene | -| #117 | Agent2Agent / MCP Agent Mail | #143 | -| #88/#91/#94 | routing | #48 family | -| #50 | termux-smoke / master-staging gate | dual-gate ancestry | +| **#175** | OPERATOR matrix + dual-gate | this PR; #781 #783 | +| #184 | Credential inventory (names only) | secrets hygiene — never paste values | +| #772 | mergeable_state instability | Vercel non-gate | +| #777 | EXTRACT follow-on | agent-review-auto-jules → agent-context-store | + +## Stepie (planning surface only) + +Goal 2087 `termux-monorepo development` still 2/12. Stepie does not merge. Dual-gate promotes. ## Next cycle -1. Dual-gate this PR; promote only when green + outcome verified. -2. Leave #682 EXTRACT until sliced. -3. Stay busy on SSOT / skill upgrades while CI waits. No HITL YOLO merge. -4. Jules / Linguist: confirm AGENTS.md is redirect-only. +1. Dual-gate this extract; promote only when green + outcome verified. +2. Slice #48 (standalone health + openai_compat only) if needed — never 73-file merge. +3. Close #69 as completed after this extract merges. +4. Stay busy on disjoint extracts while CI waits. No HITL YOLO merge. diff --git a/docs/ops/generated/session-pulse-20260923-1206.md b/docs/ops/generated/session-pulse-20260923-1206.md new file mode 100644 index 000000000..6e31fa0b8 --- /dev/null +++ b/docs/ops/generated/session-pulse-20260923-1206.md @@ -0,0 +1,24 @@ +# Session pulse 2026-09-23 12:06 PDT + +Agent-Identity: Grok (Administrator) +Live master: `66ebf5b5` + +## Recon + +- Auth identity: `timerloggedout-spec` +- Open issues: 112 +- #783 dual-gate SUCCESS (`hygiene + portability gate`, `agentic termux smoke`) on `9f94f689`; mergeable unknown then master advanced. +- #781 dual-gate SUCCESS, mergeable dirty. +- #48 dirty, base master-staging, 73 files — EXTRACT only. +- #69 dirty, feature base — dock extracted here. +- #184: names only. No token values in issues. +- Stepie goal 2087 = 2/12. Primary goal 2149 Games Masters. + +## Decision + +ACTIVE extract of debate dock. WAIT is promote gate for this PR after dual-gate. +HOLD retired. + +## Credentials named (no values) + +OPERATOR_GITHUB_TOKEN / ARCHWIZ_GITHUB_TOKEN / GH_PAT / LINEAR_API_KEY / VERCEL_TOKEN / GITHUB_TOKEN diff --git a/scripts/debate/build_toc.py b/scripts/debate/build_toc.py new file mode 100644 index 000000000..69ad2624d --- /dev/null +++ b/scripts/debate/build_toc.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +"""Rebuild docs/DEBATE/TOC.md from MATRIX.yaml (single source of tags).""" +from __future__ import annotations +import datetime as dt +import sys +from pathlib import Path + +try: + import yaml +except ImportError: + print("FAIL: pip install pyyaml", file=sys.stderr) + sys.exit(2) + +ROOT = Path(__file__).resolve().parents[2] +MATRIX = ROOT / "docs" / "DEBATE" / "MATRIX.yaml" +TOC = ROOT / "docs" / "DEBATE" / "TOC.md" + + +def main() -> int: + data = yaml.safe_load(MATRIX.read_text(encoding="utf-8")) + debates = data.get("debates") or [] + stale_after = int(data.get("stale_after_days") or 14) + today = dt.date.today() + + rows = [] + attention = [] + for d in debates: + last = d.get("last_activity") or d.get("opened") or today.isoformat() + try: + last_d = dt.date.fromisoformat(str(last)[:10]) + except ValueError: + last_d = today + age = (today - last_d).days + stale = age >= stale_after and d.get("status") == "open" + blocker = bool(d.get("blocker")) + if stale: + attention.append(("stale", d["id"], f"{age}d since {last}")) + if blocker: + attention.append(("blocker", d["id"], d.get("blocker_note") or "flagged")) + tags = ",".join(d.get("tags") or []) + path = f"active/{d['id']}/" if d.get("status") != "resolved" else f"resolved/{d['id']}/" + rows.append( + f"| {d['id']} | {d.get('title','')} | {d.get('status')} | " + f"{'yes' if stale else 'no'} | {'yes' if blocker else 'no'} | {tags} | [{path}]({path}) |" + ) + + att_rows = ( + "\n".join(f"| {k} | {i} | {n} |" for k, i, n in attention) + if attention + else "| _(none)_ | | |" + ) + + body = f"""# DEBATE — Table of Contents + +> **LLM rule:** Prefer this file over any `active/*` body. +> Auto-built {today.isoformat()} from MATRIX.yaml via `scripts/debate/build_toc.py`. + +| ID | Title | Status | Stale? | Blocker? | Tags | Path | +|----|-------|--------|--------|----------|------|------| +{chr(10).join(rows) if rows else "| _(none)_ | | | | | | |"} + +## Needs attention + +| Kind | ID | Note | +|------|-----|------| +{att_rows} + +## How to open a debate + +```bash +cp docs/DEBATE/_template/TOPIC.md docs/DEBATE/active//TOPIC.md +# edit MATRIX.yaml + TOPIC.md +python3 scripts/debate/build_toc.py +``` + +## How to resolve + +1. Binding VOTE + MANIFEST Review log (CONSENSUS). +2. Move `active/` → `resolved/`. +3. MATRIX status → `resolved`; rebuild TOC. +""" + TOC.write_text(body, encoding="utf-8") + print(f"OK: TOC rebuilt ({len(debates)} debates, {len(attention)} attention flags)") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/debate/flag_stale.py b/scripts/debate/flag_stale.py new file mode 100644 index 000000000..65e34f459 --- /dev/null +++ b/scripts/debate/flag_stale.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +"""Print stale/blocked debates; exit 1 if any blocker or stale open debate.""" +from __future__ import annotations +import datetime as dt +import sys +from pathlib import Path + +try: + import yaml +except ImportError: + print("FAIL: pip install pyyaml", file=sys.stderr) + sys.exit(2) + +ROOT = Path(__file__).resolve().parents[2] +MATRIX = ROOT / "docs" / "DEBATE" / "MATRIX.yaml" + + +def main() -> int: + data = yaml.safe_load(MATRIX.read_text(encoding="utf-8")) + stale_after = int(data.get("stale_after_days") or 14) + today = dt.date.today() + bad = 0 + for d in data.get("debates") or []: + if d.get("status") != "open": + continue + last = d.get("last_activity") or "1970-01-01" + try: + age = (today - dt.date.fromisoformat(str(last)[:10])).days + except ValueError: + age = 999 + if d.get("blocker"): + print(f"BLOCKER {d['id']}: {d.get('blocker_note')}") + bad += 1 + if age >= stale_after: + print(f"STALE {d['id']}: {age}d (threshold {stale_after})") + bad += 1 + if bad == 0: + print("OK: no stale/blocked open debates") + return 0 + return 1 + + +if __name__ == "__main__": + sys.exit(main())