Skip to content

Measure Gate A on chg-loop tickets apart from human intake (US-47.11) - #1009

Merged
mkreyman merged 2 commits into
masterfrom
feature/us-47.11
Oct 19, 2026
Merged

mkreyman merged 2 commits into
masterfrom
feature/us-47.11

Conversation

@mkreyman

Copy link
Copy Markdown
Owner

US-47.11, part of #986 (items 2 and 4).

Gate A: chg-loop tickets measured apart from human intake

  • Measurement.Ticket gains chg_loop?, true exactly when the labels include chg-loop; the title plays no part.
  • Report.gate_a_strata/1 builds every stratum once, and both the main report and the sensitivity run use it. It now returns:
    • intake and all, unchanged;
    • chg_loop, the chg-loop tickets;
    • human, every other ticket.
      chg_loop and human partition all.
  • The summary prints all four strata.
  • Escalation rows carry a chg_loop flag.
  • Gate A itself is not touched.
  • New artifact pair docs/measurements/gate_a_2026-10-19.{json,md}, made by mix loopctl.gates.measure_a from home_care_billing's 536 issues. It is redacted the same way as the 2026-09-14 pair, which stays as it was.
    • chg_loop is empty: chg has filed no chg-loop issue yet on home_care_billing, claude-config or chg.
    • human 20.7% escalated, intake 61.0%.

Gate B: self-modification

  • A repository absent from DELIVERY_GATES_CONFIG escalates every change with {:unknown_repo, repo}. A new test pins this for both repos, at the merge gate and at the triage screen.
  • claude-config and chg are absent today, so Take chg-loop issues as delivery-loop intake: enroll claude-config and chg, measure Gate A on machine intake #986 item 4 already holds.
  • docs/agent-delivery-loop.md states the rule: when either repo gets an entry, its human_paths must carry its self-modification code.
  • The pasteable glob lists are in KB article 4a86157b, not in this public doc, because both repos are private. Every glob was checked against git ls-files.

Item 1 (operational, done outside this PR)

claude-config and chg are enrolled as intake sources, each with its own work project and target epic, and an Issues-only webhook. Both pings returned 200.

  • The work projects have no repo_url, deliberately: the existing KB scopes already carry it, and a second project on the same URL makes resolve_project ambiguous.
  • required_checks is empty on both. That matches the loopctl source.

Tests

  • Ticket flag: chg-loop label, no label or a lookalike, title-only.
  • Strata counts on a mixed set.
  • The partition.
  • intake and all unchanged.
  • An empty chg_loop has a nil rate.
  • Sensitivity run and summary.
  • Escalation-row flag.
  • Gate B unknown-repo escalation.
  • Mutation-checked: splitting on intake? fails 4 tests, hard-coding the flag fails 5, and letting chg through Gate B fails the pin.

Defaults Mark may want to overrule

  1. Gate B globs for the private repos are in the KB, not in the public doc. To publish them instead, copy article 4a86157b into the doc.
  2. required_checks is empty on both new intake sources, so story verification records no_required_checks there. To opt in, set it with intake_source_update, using job names from a PUSH run.

Gate A's replay report gains two strata that partition all: chg_loop
(tickets labelled chg-loop, which chg files with evidence) and human
(every other ticket). intake and all are unchanged; the gate is not
relaxed. A new dated artifact pair records the split on home_care_billing
(chg_loop is empty: chg has filed nothing yet).

docs/agent-delivery-loop.md states that a repository absent from
DELIVERY_GATES_CONFIG escalates every change, that claude-config and chg
are absent today, and the human_paths floor each must carry once it gets
an entry. The globs live in the operator KB because both repositories are
private. A test pins the unknown-repo escalation for both.

Part of #986 (items 2 and 4).
@mkreyman

Copy link
Copy Markdown
Owner Author

Review round 1 (code) counted at 262a261e2c1f via Skill lean-review. The review-round counter's merge gate reads this marker on any machine.

- The summary test anchors each stratum line to its start, so a missing
  main-strata line can no longer pass on the indented sensitivity line.
- The unknown-repo pin asserts the configured repo screens clear at
  triage too, so the escalation is shown to come from the missing entry.
- One intake_replays/1 feeds both the intake stratum and
  intake_is_feature_share.
- Ticket and GateAReplay moduledocs say four strata; the Gate B doc
  names claude-config's git hooks.
@mkreyman
mkreyman enabled auto-merge (squash) October 19, 2026 13:02
@mkreyman
mkreyman merged commit 0f53986 into master Oct 19, 2026
17 checks passed
@mkreyman
mkreyman deleted the feature/us-47.11 branch October 19, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant