self.improvement/1
One improvement turn on takt: a finding that names a machine-checkable predicate on a scenario or on a repository at a seed is reproduced on the promoted baseline, a candidate fix is delivered and merged under the authority its surface needs, the finding is verified gone on the candidate by another run than the one that delivered it, the scorecard shows no regression against the baseline, and the candidate's binary is promoted. Accepted once promoted; declined when the candidate still reproduces the finding; unreproducible when the baseline never did. Claims about the baseline and about the candidate are about separate artifacts, so a commit to the candidate leaves the baseline's claims standing.
- Id:
self.improvement - Revision: 1
- Source:
protocols/self-improvement/1.yaml
Dependency graph
Which actions may produce which evidence, which claims that evidence establishes, and which outcomes and obligations rest on those claims. Hover or focus a node to trace what it rests on.
Protocol · revision 1
self.improvement/1One improvement turn on takt: a finding that names a machine-checkable predicate on a scenario or on a repository at a seed is reproduced on the promoted baseline, a candidate fix is delivered and merged under the authority its surface needs, the finding is verified gone on the candidate by another run than the one that delivered it, the scorecard shows no regression against the baseline, and the candidate's binary is promoted. Accepted once promoted; declined when the candidate still reproduces the finding; unreproducible when the baseline never did. Claims about the baseline and about the candidate are about separate artifacts, so a commit to the candidate leaves the baseline's claims standing.
- Actions7
- Evidence kinds5
- Claims6
- Outcomes4
- Obligations3
- Precondition, traced on hover
- Needs authority
Hover or focus a node to trace what it rests on and what rests on it. Press Enter to pin it, Escape to clear.
Case inputs
surfacejudgenon_judgewhether the candidate's change, base to head, touches a judge surface: every path outside the allow-list held at the baseline revision is one
Protocol as text
| Name | Description | Rule | Leads to |
|---|---|---|---|
binary.promote | build the merged candidate, embed its revision, install it for runs | all of claim fix.merged claim scorecard.no_regression needs takt.promote effect write | produces promotion_record |
candidate.merge | merge a candidate that touches no judge surface; the planner's grant suffices | all of claim scenario.passes_after input surface in non_judge needs repository.merge effect write | produces merge_observation |
candidate.merge_judge_surface | merge a candidate that touches a judge surface; the owner holds this capability, or a role the owner delegated it to by a revocable record, and a revoked delegation grants nothing (story:judge-guard enforces it) | all of claim scenario.passes_after input surface in judge needs repository.merge.judge_surface effect write | produces merge_observation |
finding.file | file the finding in the planning store with its predicate and its source | effect write | produces finding_record |
scenario.reproduce | run the finding's predicate on its scenario or repository with a takt built from the baseline | claim finding.cited effect read | produces scenario_result |
scenario.verify | run the finding's predicate on its scenario or repository with a takt built from the candidate | claim scenario.reproduced_before effect read | produces scenario_result |
scorecard.compare | run the scenario corpus at the merged candidate and compare it with the baseline | claim fix.merged effect read | produces scorecard_result |
More columns: swipe horizontally, or focus the table and use the arrow keys.
| Name | Description | Rule | Leads to |
|---|---|---|---|
finding_record | the finding as filed: it carries an expected_before predicate that parses and a source path that exists; its result is filed or malformed | — | establishes finding.cited (filed about finding) |
merge_observation | the candidate revision merged into the mainline; its result is merged | — | establishes fix.merged (merged about candidate) |
promotion_record | the installed binary's embedded revision compared with the merged candidate revision; its result is promoted or mismatch | — | establishes promoted (promoted about promotion) |
scenario_result | the finding's predicate run on its scenario, or on its repository at its seed, with a takt built from a revision; its result is reproduced or not_reproduced, or error when the command ended with a status the predicate names neither as the defect's nor as the healthy one, or with the defect's exit but without its output, which makes no claim true | — | establishes scenario.passes_after (not_reproduced about candidate, independent on different_agent_run); establishes scenario.reproduced_before (reproduced about baseline) |
scorecard_result | every scenario of the corpus run at the candidate revision and compared with the baseline's record for the same scenario, tokens read from the runs' events only; its result is no_regression or regression | — | establishes scorecard.no_regression (no_regression about candidate) |
More columns: swipe horizontally, or focus the table and use the arrow keys.
| Name | Description | Rule | Leads to |
|---|---|---|---|
finding.cited | the finding is filed with a predicate that parses and a source that exists | evidence = filed: finding_record | gates scenario.reproduce |
fix.merged | the current candidate revision is merged into the mainline | evidence = merged: merge_observation | gates binary.promote; gates scorecard.compare |
promoted | the installed takt binary was built from the merged candidate revision | evidence = promoted: promotion_record | requires accepted |
scenario.passes_after | the finding's predicate fails on the current candidate revision, observed by another agent run than the one that delivered the candidate | evidence = not_reproduced: scenario_result | requires accepted; requires verification.required; gates candidate.merge; gates candidate.merge_judge_surface |
scenario.reproduced_before | the finding's predicate holds on the baseline revision | evidence = reproduced: scenario_result | requires reproduction.required; gates scenario.verify |
scorecard.no_regression | no scenario of the corpus is worse at the current candidate revision than at the baseline | evidence = no_regression: scorecard_result | requires accepted; requires regression.required; gates binary.promote |
More columns: swipe horizontally, or focus the table and use the arrow keys.
| Name | Description | Rule | Leads to |
|---|---|---|---|
abandoned | the turn closed because it was explicitly abandoned | — | — |
accepted | the turn closed with the finding verified gone, no regression and the candidate promoted | all of claim promoted claim scenario.passes_after claim scorecard.no_regression | — |
declined | the turn closed because the candidate did not move the finding's predicate | evidence = reproduced: scenario_result | — |
unreproducible | the turn closed because the finding's predicate does not hold on the baseline | evidence = not_reproduced: scenario_result | — |
More columns: swipe horizontally, or focus the table and use the arrow keys.
| Name | Description | Rule | Leads to |
|---|---|---|---|
regression.required | the scorecard shows no regression at the candidate | claim scorecard.no_regression | — |
reproduction.required | the finding is reproduced on the baseline before a candidate counts | claim scenario.reproduced_before | — |
verification.required | the finding is verified gone on the candidate by another run | claim scenario.passes_after | — |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: protocols/self-improvement/1.yaml
Actions
What can be done in a case: what it needs first, which authority it requires, the class of effect it has and the evidence it may produce.
| Action | Description | Precondition | Requires capability | Effect | May produce |
|---|---|---|---|---|---|
binary.promote | build the merged candidate, embed its revision, install it for runs | all of (fix.merged is TRUE; scorecard.no_regression is TRUE) | takt.promote | write | promotion_record |
candidate.merge | merge a candidate that touches no judge surface; the planner's grant suffices | all of (scenario.passes_after is TRUE; input surface is one of non_judge) | repository.merge | write | merge_observation |
candidate.merge_judge_surface | merge a candidate that touches a judge surface; the owner holds this capability, or a role the owner delegated it to by a revocable record, and a revoked delegation grants nothing (story:judge-guard enforces it) | all of (scenario.passes_after is TRUE; input surface is one of judge) | repository.merge.judge_surface | write | merge_observation |
finding.file | file the finding in the planning store with its predicate and its source | none | no authority | write | finding_record |
scenario.reproduce | run the finding's predicate on its scenario or repository with a takt built from the baseline | finding.cited is TRUE | no authority | read | scenario_result |
scenario.verify | run the finding's predicate on its scenario or repository with a takt built from the candidate | scenario.reproduced_before is TRUE | no authority | read | scenario_result |
scorecard.compare | run the scenario corpus at the merged candidate and compare it with the baseline | fix.merged is TRUE | no authority | read | scorecard_result |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Evidence kinds
The kinds of evidence this protocol admits.
| Evidence kind | Description | Produced by | Used by claims |
|---|---|---|---|
finding_record | the finding as filed: it carries an expected_before predicate that parses and a source path that exists; its result is filed or malformed | finding.file | finding.cited |
merge_observation | the candidate revision merged into the mainline; its result is merged | candidate.merge, candidate.merge_judge_surface | fix.merged |
promotion_record | the installed binary's embedded revision compared with the merged candidate revision; its result is promoted or mismatch | binary.promote | promoted |
scenario_result | the finding's predicate run on its scenario, or on its repository at its seed, with a takt built from a revision; its result is reproduced or not_reproduced, or error when the command ended with a status the predicate names neither as the defect's nor as the healthy one, or with the defect's exit but without its output, which makes no claim true | scenario.reproduce, scenario.verify | scenario.passes_after, scenario.reproduced_before |
scorecard_result | every scenario of the corpus run at the candidate revision and compared with the baseline's record for the same scenario, tokens read from the runs' events only; its result is no_regression or regression | scorecard.compare | scorecard.no_regression |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Claims
Each claim is TRUE, FALSE or UNKNOWN, established from evidence by its predicate. Missing or stale evidence leaves a claim UNKNOWN, never FALSE.
| Claim | Description | True when |
|---|---|---|
finding.cited | the finding is filed with a predicate that parses and a source that exists | evidence finding_record with result filed about finding |
fix.merged | the current candidate revision is merged into the mainline | evidence merge_observation with result merged about candidate |
promoted | the installed takt binary was built from the merged candidate revision | evidence promotion_record with result promoted about promotion |
scenario.passes_after | the finding's predicate fails on the current candidate revision, observed by another agent run than the one that delivered the candidate | evidence scenario_result with result not_reproduced about candidate, from a producer independent on different_agent_run |
scenario.reproduced_before | the finding's predicate holds on the baseline revision | evidence scenario_result with result reproduced about baseline |
scorecard.no_regression | no scenario of the corpus is worse at the current candidate revision than at the baseline | evidence scorecard_result with result no_regression about candidate |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Obligations
What must be done before a case can be complete, and what discharges it. An obligation stays open until its predicate is TRUE; its predicate being UNKNOWN does not discharge it.
| Obligation | Description | Discharged when |
|---|---|---|
regression.required | the scorecard shows no regression at the candidate | scorecard.no_regression is TRUE |
reproduction.required | the finding is reproduced on the baseline before a candidate counts | scenario.reproduced_before is TRUE |
verification.required | the finding is verified gone on the candidate by another run | scenario.passes_after is TRUE |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Outcomes
The legitimate terminal interpretations of a case, and what each requires.
| Outcome | Description | Requires |
|---|---|---|
abandoned | the turn closed because it was explicitly abandoned | decision explicitly_abandoned |
accepted | the turn closed with the finding verified gone, no regression and the candidate promoted | all of (promoted is TRUE; scenario.passes_after is TRUE; scorecard.no_regression is TRUE) |
declined | the turn closed because the candidate did not move the finding's predicate | evidence scenario_result with result reproduced about candidate |
unreproducible | the turn closed because the finding's predicate does not hold on the baseline | evidence scenario_result with result not_reproduced about baseline |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Artifacts
The things whose revisions evidence is bound to.
| Artifact | Description |
|---|---|
baseline | the promoted takt revision the finding was observed on |
candidate | a takt revision that is meant to make the finding's predicate fail |
finding | a finding filed in the planning store with its expected_before predicate (a command, a named scenario, the expected exit status or output) and the path of the record that produced it |
promotion | the takt binary installed for runs, built from a named revision |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Case inputs
What a case fixes when it opens: each input takes one of the values listed, and is never UNKNOWN.
| Input | Description | Values |
|---|---|---|
surface | whether the candidate's change, base to head, touches a judge surface: every path outside the allow-list held at the baseline revision is one | judge, non_judge |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Independence dimensions
What an evidence match may demand of a record's producer (independent_on). The case lists, for each producer, the dimensions on which it is independent of the case's work; a match that demands a dimension reads only records whose producer the case lists on it. A record that fails the demand neither establishes nor contradicts the match, so a match only such records would decide is UNKNOWN.
| Dimension | Description |
|---|---|
different_agent_run | the producer is another agent run than the one that delivered the candidate |
More columns: swipe horizontally, or focus the table and use the arrow keys.