KeiSeiKit-1.0/_primitives/templates/sleep-incubation-prompt.md
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

207 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nightly incubation — Phase A (KeiSeiKit v0.12.0 "sleep on it")
<!--
Prepended to the v0.11 nightly trigger prompt. The remote agent reads this
block FIRST and processes the queue before running the existing REM
consolidation (Phase B). Phase A and Phase B commit separately so the
morning pull shows two distinct diffs.
-->
## Phase A — Incubation ("sleep on it")
1. **Discover pending tasks.** List `sync-repo/sleep-queue/*.md` files
ordered by the `submitted_at` frontmatter field ascending (FIFO).
2. **Filter by day.** If today is NOT Sunday UTC, skip any file with
`priority: weekly`. On Sunday UTC, include weekly tasks alongside
`quick`, `standard`, `deep`, and `marathon` tasks in the same FIFO
order.
3. **Select tasks for this run (priority-aware).**
Priority resolution for the run:
1. Count `marathon: true` tasks in queue. If ≥ 1 with a this-night
priority, select the OLDEST by `submitted_at` as the sole task
for tonight. **Phase B REM consolidation is SKIPPED this run.**
All other pending tasks are deferred to the next night.
2. Else: pool this-night tasks (`priority ∈ {quick, standard, deep}`)
in FIFO order and **greedy-pack up to 480 minutes total** across
at most 5 tasks. Skip any task whose `time_budget_minutes` would
overflow the remaining budget; it stays pending for the next run.
3. Weekly batch: only processed on Sunday UTC, counted toward the
480-minute greedy-pack budget alongside `standard`/`deep` tasks.
4. **Budget time per task.** Read `time_budget_minutes` from the task's
frontmatter. Default 60 if absent or unparseable. Behavior:
- If `marathon: true`: this task gets the entire night (max 480 min);
other queue items skip this cycle; Phase B is skipped.
- If `checkpoint_every_minutes > 0`: every N minutes, write partial
result to `sleep-results/<uuid>.partial.md` AND commit + push, so
if the run is cut short the user still has the partial.
- If the budget is exhausted and the task is not done: write the
partial with `[TIME-BOXED — <N>min budget exhausted]` at the top
of the body, set `status: timed_out` in the queue-file frontmatter,
and move it to `sleep-queue-failed/<uuid>.md`.
- If `time_budget_minutes: null` (no-timeout): run until done or
until the hard cloud-session cap is hit (still honor checkpointing
so no work is lost).
5. **Dispatch by type.** Read the `type` frontmatter and run the
corresponding tool chain:
- `deep` — ≥ 3 WebSearch queries + ≥ 2 WebFetch page reads +
synthesis section. If the web is unreachable, mark result
`[OFFLINE — web tools unavailable]` and fail the task (step 7).
- `pipeline` — emit 57 phases, each with a one-line
verify-criterion, followed by a tradeoffs matrix. Use the repo's
past reports (`sync-repo/reports/*.md`) as context if relevant.
- `pattern` — grep `sync-repo/reports/*.md` and `sync-repo/backlog.md`
for recurring tokens related to the task text; extract 35 trends;
propose one concrete action.
- `compare` — produce a markdown table with the options the user
listed as columns, weighted criteria as rows, and a weighted-score
recommendation in the final row.
- `custom` — follow the task text verbatim without any fixed
dispatch. Write whatever the task asks for in the chosen format.
6. **Write the result** to
`sync-repo/sleep-results/<uuid>.md` in the chosen `format`:
- `md``# Title` + sections + sources.
- `adr``Context / Decision / Consequences`.
- `checklist``- [ ] item` bullets only (plus a one-line preamble).
- `table` — markdown table + short recommendation paragraph.
Every result MUST end with a `## Sources` section listing the
concrete URLs, files, or tool calls the agent used.
7. **Mark the task done.** Move the queue file:
`sync-repo/sleep-queue/<uuid>-*.md``sync-repo/sleep-queue-done/<uuid>.md`
Also update the `status:` frontmatter line from `pending` to `done`.
8. **On catastrophic failure** (tool error not fixable in the 15-min
budget, missing dependency, corrupted frontmatter): move the file to
`sync-repo/sleep-queue-failed/<uuid>.md`, update `status:` to
`failed`, and append a `## Failure reason` block to the body. Continue
with the next task.
9. **Commit once after Phase A completes** (single commit regardless of
how many tasks were processed). Commit message:
`REM: incubation <YYYY-MM-DD> (<N> task(s))`
10. **Then run Phase B** (see `sleep-trigger-prompt.md`). Phase B gets
its own commit: `REM: consolidation <YYYY-MM-DD>`.
### Phase A time cap
Total wall-clock cap for Phase A is **dynamic**:
- **Marathon run:** up to 480 minutes for the single selected task.
Phase B is SKIPPED this cycle.
- **Regular run:** greedy-pack up to 480 minutes total across at most
5 tasks, driven by each task's `time_budget_minutes`.
If the cap is hit mid-task, commit partial progress (honoring the
task's `checkpoint_every_minutes` cadence) and move the in-flight
task to `sleep-queue-failed/` with reason `phase-a-time-cap`. The
partial result (if any) stays in `sleep-results/<uuid>.partial.md`.
### Checkpointing (intermediate commits)
If a task's `checkpoint_every_minutes` is > 0, the agent commits
partial progress at that cadence:
```
git add sleep-results/<uuid>.partial.md
git commit -m "sleep: checkpoint <uuid> at <N>min"
git push
```
A final "task done" commit rolls the partial into `<uuid>.md` and
deletes the `.partial.md` file. If the run is cut short, the last
partial persists in the repo and the user can read it on morning pull.
---
## Example queue file (input)
```
---
uuid: 8d4f3c1e-7b2a-4f1d-9c8e-0a1b2c3d4e5f
submitted_at: 2026-04-22T14:03:17Z
type: compare
priority: standard
format: table
time_budget_minutes: 60
checkpoint_every_minutes: 20
marathon: false
status: pending
---
Compare SvelteKit, Astro, and Next.js App Router for the kit's landing
page. Criteria: bundle size, SSR ergonomics, build time, ecosystem
depth, hosting footprint.
```
## Example result file (output)
```
# Compare: SvelteKit / Astro / Next.js App Router
| Criterion (weight) | SvelteKit | Astro | Next.js App Router |
|------------------------|-----------|--------|--------------------|
| Bundle size (0.3) | 9/10 | 10/10 | 6/10 |
| SSR ergonomics (0.2) | 8/10 | 7/10 | 9/10 |
| Build time (0.2) | 8/10 | 9/10 | 6/10 |
| Ecosystem depth (0.2) | 7/10 | 6/10 | 10/10 |
| Hosting footprint (0.1)| 8/10 | 9/10 | 5/10 |
| **Weighted score** | **8.1** | **8.2**| **7.3** |
**Recommendation:** Astro narrowly wins for a content-first kit landing
page. Pick SvelteKit if the landing grows into an app; Next.js App
Router only if you already ship a Next.js product suite.
## Sources
- https://svelte.dev/docs/kit
- https://docs.astro.build/en/concepts/why-astro/
- https://nextjs.org/docs/app
- (tool: WebSearch) "SvelteKit vs Astro 2026 bundle size benchmark"
```
---
## Exit reasons (per-task status)
Every task ends in exactly one of:
- `done` — full result in `sleep-results/<uuid>.md`, queue file moved
to `sleep-queue-done/`.
- `time_budget_exhausted` — partial in `sleep-results/<uuid>.partial.md`
with `[TIME-BOXED — <N>min budget exhausted]` marker, queue file
moved to `sleep-queue-failed/` with `status: timed_out`.
- `checkpoint_saved` — intermediate state; the task is still pending
but the latest `.partial.md` is committed and pushed. This is NOT a
terminal status; it upgrades to `done` or `time_budget_exhausted`.
- `failed` — tool error, missing dependency, or other non-recoverable
failure. Queue file moved to `sleep-queue-failed/` with a
`## Failure reason` block.
## Invariants (MUST NOT violate)
- **Never modify or delete `traces/*.jsonl`.** Phase A only touches
`sleep-queue/`, `sleep-queue-done/`, `sleep-queue-failed/`, and
`sleep-results/`. Phase B touches `reports/` and `backlog.md`. Neither
touches `traces/`.
- **Checkpoint commits are mandatory** when `checkpoint_every_minutes
> 0`. Skipping them loses user work on cloud-session eviction.
- **Never delete files outside the queue trees.** Move within the
sync-repo is the only mutation Phase A performs; `rm` is banned
outside `sleep-queue*/` (and even there, only after a successful
move to done/failed).
- **Never paraphrase author-flagged terms into the result body.**
If the prompt clearly references author-flagged material, mark the
task failed with reason `patent-term-detected` and skip it entirely
— no partial result, no paraphrasing the matched token.
- **No shell command writes outside `sync-repo/`.** Results land in the
repo, nothing else.
- **No session feedback loop (RULE 0.15).** Results are for the user to
read the next morning. Nothing Phase A writes is auto-consumed by
another Claude Code session.
---
## Failure handling (same as Phase B)
- Clone fails or repo is dirty → exit 1, let the next run retry.
- `sleep-queue/` missing → create it empty + commit, then exit clean
(first run on an older sync-repo).
- Any single task fails → move to `sleep-queue-failed/`, continue.
- Phase A overall fails (total time cap, unhandled tool error) → commit
whatever partial state exists, THEN run Phase B normally. Phase B
must not depend on Phase A succeeding.