Skip to content

Take chg-loop issues as delivery-loop intake: enroll claude-config and chg, measure Gate A on machine intake #986

Closed

Description

@mkreyman

Mark, 2026-10-16, wants chg (mkreyman/chg) to drive a constant improvement loop across the fleet: collect what's not working and file it as work, automatically. The design is in mkreyman/chg#22 (S14). chg is the sensor and intake writer. loopctl's agent delivery loop is the executor: chg builds none of its own.

loopctl's side:

  1. Enroll claude-config and chg as intake sources (intake_source_enroll, plus the Issues webhook), next to home_care_billing.
  2. Triage of chg-loop issues. They are machine-written and carry evidence: a fingerprint, occurrences, a stated root cause or "unknown, investigate", and acceptance criteria written as checks.
    • Measure Gate A on them separately from human intake. The expectation, from KB a08b94b2, is that evidence-carrying issues escalate far less than the 69% human baseline.
    • Do not relax the gate for them; report the split.
  3. Closure is chg's. chg closes an issue only when the fingerprint stays silent for M days after the merge, and reopens it if the problem recurs. A story reaching done because the issue closed is therefore a verified fix, not just a merge. Make sure a reopened issue re-enters intake rather than being ignored as already done.
  4. Gate B for self-modification. chg's own landing, revert and gate code, and claude-config's safety hooks (deny lists, grant hooks, foreign-repo guard, review counter), must escalate rather than auto-merge. Add those paths to the respective repos' Gate B trigger lists.

Activity

  1. mkreyman commented on Oct 19, 2026

    @mkreyman
    OwnerAuthor

    All four items are done and live (Fly v752).

    1. Enrolment. mkreyman/claude-config and mkreyman/chg are now intake sources.
      • Each has its own work project (claude-config-delivery, chg-delivery) and target epic, with an Issues-only webhook; both pings returned 200.
      • The work projects have no repo_url, on purpose: the existing KB scopes already carry it, and two projects on one URL make resolve_project ambiguous.
      • required_checks is empty on both.
      • Correction to this issue: home_care_billing is not enrolled on this tenant. Only infra and loopctl were, and infra's source has no GitHub webhook.
    2. Gate A split (Measure Gate A on chg-loop tickets apart from human intake (US-47.11) #1009). The replay report now has chg_loop and human strata beside intake and all, and the gate itself is unchanged.
      • The first artifact is docs/measurements/gate_a_2026-10-19. Its chg_loop stratum is empty because chg has filed no chg-loop issue yet.
    3. Reopen re-enters intake (A reopened issue re-enters intake as a new generation (US-47.10) #1010). Each reopen of a finished issue gets its own intake record (a generation), with its own story and closure.
      • "Finished" means the issue has a closure row, or its story has reached merged, deployed, verified or done.
      • A closure left from an earlier generation is abandoned as superseded_by_generation, so it cannot close the recurrence.
      • The closer removes the earlier generation's resolution label before adding its own.
    4. Gate B self-modification. Neither repo has an entry in DELIVERY_GATES_CONFIG, so every change to them escalates with {:unknown_repo, repo}. A test pins this.
      • The human_paths floor each repo must carry once it gets an entry is stated in docs/agent-delivery-loop.md.
      • The globs themselves are in KB article 4a86157b, because both repos are private.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions