Conversation
The plan-map synth reduces the per-subtask results into the run's combined answer, but it never saw the integration outcome. The integrate step's outputs reached only the done terminal, appliedCount, conflicts and reason were bound nowhere, and a unit withheld for a Failed or Waived acceptance is dropped before integration, so it appears in no output at all. A conflicted or partial candidate was narrated as a whole deliverable. git.integrate_run now owns the narrative. Every pass (clean, conflicted, empty, skipped, resumed) emits summary, one account of what actually landed that is bounded at 2,000 characters, and withheld, the units the head gate kept off the candidate. A conflicted set says nothing landed: the integrator publishes no branch on any non-Clean status, so its applied count is a trial count. The resumed pass's review keys are now declared in the OutputSchema, which the validator requires in order to bind them. A repo-bound graph's synth prompt carries the account under "Integration outcome:" and its system prompt says to state what landed and to name anything conflicted or withheld as not delivered. A repo-less graph keeps both prompt halves byte-for-byte.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
appliedCount,conflictsandreasonwere bound nowhere), and a unit withheld for a Failed/Waived acceptance is dropped before integration (RunIntegrationContributions), so it appears in no output.git.integrate_runnow emits, on every pass (clean, conflicted, empty, skipped, resumed),summary(one account of what landed, at most 2,000 chars) andwithheld([{label, reason}]). The resumed pass'sreviewApproved/reviewComment/reviewedByare now declared in its OutputSchema too, becauseDefinitionValidatorrejects a reference to an undeclared output.\n\nIntegration outcome:\n{{nodes.integrate.outputs.summary}}, and its system prompt gains an instruction to state what landed and to name anything conflicted or withheld as NOT delivered. A repo-less graph keeps both halves byte-for-byte; the existing pins (PlanMapSynthDefinitionBuilderTestsuser-prompt and system-prompt pins) are untouched and green. On a clean run the summary is one factual sentence, not the failure furniture the "no failure furniture" pin forbids (that pin is on a repo-less graph). It sits outside the 120kpromptBudgetChars; the 2,000-char bound is under 2% of that budget, so it stays negligible.<...>is a per-run id):Integration: 2 contribution(s) landed on codespace/integration/<runId>.Integration conflicted: no integrated branch was published, so none of this run's work landed on one (1 of 2 contribution(s) applied cleanly, but integration is all-or-nothing). Conflicted and withheld from the integrated branch: agent#map#0 → codespace/agent/<id>.Integration skipped: the run produced no integrable work for this repository.(or... the produced work recorded no base revision to integrate from.)Withheld before integration: agent#map#1 — acceptance Failed.appended when a unit was withheld.IntegrationResultnullsIntegratedBranchon every non-Clean status and the integrator resets its clone on abort (IntegrationResult.cs:16-29,:104). Nothing landed andAppliedCountis a trial count, so the summary says that.SynthIntegrationInstruction, appended only when the graph has an integrate node. Adding it toSynthSystemPromptwould have changed every repo-less prompt.withheldnames a unit only when none of its attempts landed, once per unit at its latest verdict. The withhold filter runs before the per-unit retry reduction, so a flunked first attempt of a unit whose retry passed would otherwise be reported as withheld.label — acceptance Failed, not the brief's(acceptance Failed): label — reason, which would repeat the state.agent#map#0, notmap#1).GitIntegrateNode.NotApplied, read by bothconflicts[]and the summary; behavior is unchanged andGitIntegrateNodeTestsstill pins it. The authoredgit.integratenode is otherwise untouched, and so isDoneInputs.Test plan
Red first, each for the stated reason (a stub renderer and the unchanged node/builder), then green. Counts are before → after:
PlanMapSynthDefinitionBuilderTestsPlanMapDynamicDefinitionBuilderTestsRunIntegrationContributionsTestsRunIntegrationSummaryTests(new)GitIntegrateRunNodeManifestTests(new)GitIntegrateNodeTestsGitIntegrateRunNodeFlowTestsPlanMapIntegrateWholeLoopE2ETestsIntegration outcome:prompt appendA_repo_bound_reduce_is_shown_what_actually_landed_and_told_to_name_what_did_not, dynamic..._like_its_sibling; E2E all threewithheldpopulationWithheldcases, 3 node cases; E2EA_flunked_item_still_leaves_its_siblings_work_on_one_reviewable_candidateonlyA_unit_whose_retry_landed_is_not_reported_withheld_for_its_abandoned_attemptA_supervisor_turns_withheld_agent_is_named_even_though_a_peer_sharing_its_cell_landedA_wide_conflict_cannot_bloat_the_summary_past_its_boundGitIntegrateNodeTests.Conflicts_sorts_the_real_failure_before_a_skipped_survivor...,A_conflict_is_named_before_a_bystander_the_set_merely_never_attemptedWhen_every_unit_was_withheld_the_skip_names_them_and_git_is_never_touchedA_cut_never_splits_a_surrogate_pairEvery_attempt_of_a_withheld_unit_is_reported_once_under_its_latest_verdictEvery_attempt_of_a_withheld_unit_is_reported_once_under_its_latest_verdictCodeSpace.UnitTestsproject on the pushed tip is 11,660 tests, 11,658 passed, 1 skipped (pre-existing). The 1 failure isModelCredentialBrokerTests.A_rebind_with_a_socket_reopens_it_at_the_recorded_path_after_the_worker_that_minted_it_is_gone(staleFileLeftBehind: True), a Unix-socket test this diff does not touch; its class passed 108/108 in isolation three times in a row.git.integrate_runor a plan-map graph, all green:GitIntegrateRunNodeRealGitFlowTests,CompletionTerminalAuthorityFlowTests,SupervisorDependencyStagingFlowTests,TaskLaunchBenchmarkCellRunnerFlowTests,TaskLaunchFlowTests,TaskLaunchContractFlowTests,MapPromptBudgetFlowTests,EffortRouterFlowTests,CompletionComposerFlowTests,CompletionEnforcedCohortFlowTests,BoundsHardClampFlowTests,PlannerCassetteDriftTests, and the learning and premature-stop flow classes.PlanMapSynthFanoutFlowTests,PlanMapDynamicFanoutFlowTests,StandardPlanConfirmFanoutFlowTests,ReviseLoopFanoutE2ETests,RubricReviseFanoutE2ETests,RunPhaseProjectorFlowTests(RealModelPlannerWholeLoopE2ETestsskips without its model env). Run before the final rebase onto1a9055a91, which touches none of these paths; the eight target classes above were re-run after it.