Commit Graph

6 Commits

Author SHA1 Message Date
Bo 46ed7fee5a docs(3.0): sweep remaining daemon/schedule/hook prose + MIGRATION-3.0 (ag-qbw) (#520)
## What

Wave 2 of the AgentOps 3.0 honest-docs sweep (post-#518 audit, bead
ag-qbw). Makes the `docs/` prose match the shipped code: the daemon,
scheduler, factory, and all hooks were **DELETED** (not deprecated).
AgentOps is the in-session loop + context compiler; out-of-session
orchestration is delegated to a substrate (Gas City reference City /
Olympus). Mirrors the already-correct `docs/3.0.md`.

This makes `docs/3.0.md:150` ("the standalone
daemon/scheduler/overnight-runner surfaces are gone from ... live doc
prose") true for the enumerated wave-2 surfaces.

## Deleted (whole docs about deleted commands)

- `docs/scheduling.md` — entire `ao schedule` + `ao daemon` guide
-
`docs/contracts/{agentopsd-control-plane,agentopsd-schedule,routing-policy}.md`
- `docs/contracts/jobspec-openapi-v0.yaml`
- `docs/templates/dark-factory-schedule.yaml.example`
- `docs/design/olympus-v4-specs/*.md` — v4-port reference for the dead
Olympus → agentopsd extraction

## Reframed (prose → in-session + Gas City)

- Daemon/schedule/overnight: `agentops-3-youtube-starter-series.md`,
`agentops-3-pmf-evidence-loop.md`, `wiki-for-agents.md`,
`activation-profiles.md` (+ `profiles/README.md` profile rename),
`CI-CD.md` (overnight lane)
- Hooks → hookless + CI-as-authoritative-gate (hooks removed #511):
`knowledge-flywheel.md`, `troubleshooting.md`, `reference.md`,
`CI-CD.md`, `release-e2e-checklist.md`, `seed-definition.md`

## Catalog + cross-link cleanup (no broken links)

- `documentation-index.md` — removed deleted-doc rows + the v4 section
- `contracts/index.md` — removed deleted-contract cards
- `rfcs/0002-jobspec-openapi-v0.md` marked superseded; `SCHEMAS.md`,
`templates/README.md` cross-links fixed

## Created

- `docs/MIGRATION-3.0.md` (from the approved draft) + catalog row +
mkdocs nav entry

## Gates (green for this PR's surfaces)

- Link check: **2723 links, 0 broken**
- Contracts structural floor: **PASS (45 contracts)**
- Contract compatibility (orphans): **PASS**
- markdownlint (all changed/new files): **clean**
- `heal.sh --strict`: **All clean**
- mkdocs-strict: my new doc + nav entry build cleanly. The strict build
is **red on main for pre-existing reasons outside this scope** —
`docs/_hooks/gen_cli_reference.py` FATALs on missing `cli/docs/HOOKS.md`
(hooks removed #511, generator not updated; release-mechanics domain)
and `docs/3.0.md:172` links `../PRODUCT.md`/`../GOALS.md` (root files
outside the docs tree). Both confirmed present on `origin/main`; filed
for wave 3.

## Scope notes

- Did **not** touch `CHANGELOG.md`, `cli/`, or version files (parallel
worker owns release mechanics).
- The audit grep still matches ~40 more out-of-scope `docs/` files
(contracts/*, code-map, comparisons, narrative pages, runbooks). Filed
as **wave 3 (ag-p7j)**.

Closes-scenario: ag-qbw#doc-sweep-2
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-05-24 18:27:24 -04:00
Boden Fuller 93cc632ee3 feat(daemon): add JobSpec v0 conformance spine 2026-04-30 13:49:00 -04:00
Boden Fuller c26cda5ff1 feat(overnight): external_watchlist_emitted fitness counter + RFC/contract updates (RFC 0001 Proposal 2 Wave 4)
Surface lane-specific throughput on IngestResult and ingestSummary so the
morning digest can show external-watchlist yield without parsing every
sidecar. Update RFC 0001 Decision Record (Proposal 2 first slice landed)
and dream-run-contract.md (name both registered generators).

Changes:
- cli/internal/overnight/ingest.go: add IngestResult.ExternalWatchlistEmitted
  field; recordFindingGeneratorResult increments it from sidecar.NewCandidateCount
  when the sidecar's Generator name matches externalWatchlistGeneratorName.
  Mirrors the pattern used for mine-findings (MineFindingsNew).
- cli/internal/overnight/loop.go: ingestSummary surfaces the counter under
  "external_watchlist_emitted".
- cli/internal/overnight/loop_test.go: extend TestIngestSummary to cover the
  new field — populates IngestResult with ExternalWatchlistEmitted=3 and
  asserts the summary key is present, value matches, and total key count
  rises 11 -> 12.
- docs/rfcs/0001-finding-generator-parallelism.md: bump status to "Proposal 1
  + Proposal 2 first slice implemented"; rewrite Decision Ask #3 from
  deferred to landed with file:line citations for the generator,
  registration, dedup_key fix, PROGRAM.md scope, and fitness counter.
  Network fetch / dynamic dedup / goal_weight remain explicitly deferred.
- docs/contracts/dream-run-contract.md: name both registered generators
  (mine-findings + external-watchlist) in the INGEST stage description.

Verification:
- cd cli && go test ./internal/overnight/... ./internal/rpi/... -> all PASS
- bash scripts/check-contract-compatibility.sh -> 0 failures

Closes the implementation of RFC 0001 Proposal 2 Wave 4. Subsequent
expansion (HTTP watchlist, dynamic dedup ranking) is a separate slice.
2026-04-26 19:55:39 -04:00
Boden Fuller 0dc6b7f32c feat(rpi): promote status / requires / dedup_key to first-class next-work fields for RFC 0001 Proposal 2
Proposal 2 (external watchlist generator lane) needs the queue selector to
hold candidates that should never auto-execute. RFC 0001 Decision Ask #2
asked whether status / requires / dedup_key should be first-class schema
fields before external generators land. Approved: yes for these three;
goal_weight stays deferred until a selector ranking consumer exists.

Changes:
- cli/internal/rpi/types.go: add Status, Requires, DedupKey to NextWorkItem
  with omitempty so existing producers keep round-tripping unchanged.
- cli/internal/rpi/helpers.go: add IsQueueItemHeldForReview; route
  IsQueueItemSelectable through it. Items with status=proposed, any
  non-empty requires entry, or an unrecognized status are held. status=ready
  and status="" remain selectable for backward compatibility. Unknown
  statuses fail safe (held), so a future producer can't accidentally bypass
  the gate by writing a typo.
- cli/internal/rpi/types_test.go: new round-trip + omitempty tests for the
  three fields, plus selector contract coverage (status=proposed alone,
  requires=human-review alone, both together, unknown gates).
- docs/contracts/next-work.schema.md: bump schema_version 1.3 -> 1.4,
  document the three fields and their lifecycle invariant (selectable iff
  claim_status=available AND status in {ready, ""} AND requires empty).
- docs/rfcs/0001-finding-generator-parallelism.md: update Decision Record —
  Decision Ask #2 resolved (status/requires/dedup_key first-class,
  goal_weight deferred); Decision Ask #3 path is now unblocked for the
  external watchlist generator.

Verification: cd cli && go test ./internal/rpi/... -> all PASS.
bash scripts/check-contract-compatibility.sh -> 0 failures.
2026-04-26 19:35:53 -04:00
Boden Fuller 28a70bb5ab docs(rfc): mark RFC 0001 accepted, document Proposal 1 implementation, surface dedup_key in next-work schema
RFC 0001 finding-generator parallelism: Proposal 1 landed in 1bd2f082 (sidecar
writer) + 08e3a38e (single-writer aggregator wired as REDUCE stage 7). Update
the RFC frontmatter from draft -> accepted and add a Decision Record citing
the implementation files, contract updates, and shipped fitness signals.

Decision Ask #2 partially resolved: dedup_key is now first-class in the
generator-aggregator path, so document it as an optional item field in
next-work.schema.md. status / requires / goal_weight remain deferred until
Proposal 2 (external watchlist) has a concrete consumer. Decision Ask #3
deferred entirely until Proposal 2.
2026-04-26 19:18:47 -04:00
Bo 2235f35acc RFC: finding-generator parallelism
Merge RFC 0001 and proposed human-held next-work candidates.
2026-04-26 16:01:52 -04:00