Repository navigation
ISS-12135: fix(vibe): encode the open vibe lessons ledger - #317
Merged
Merged
Conversation
- Add pr-facts.mjs: overlap by shared and imported files, assertion and contract changes, new refusals, ticket asks, server-only lanes and run evidence, with a check that refuses an incomplete or miscited body - Build and refresh pull request bodies from those facts and block creation while required runs are pending - Run the same overlap at requirements time, including named dependencies - Add node tests, contract tests and two shared eval cases
- Add child-evidence.mjs: a claimed child moves to In Review only when the adversarial reviewer's map evidences every criterion and work item on the final diff, a tracked file, a merged commit or a final-commit report - Require real activity for "active elsewhere" and a human ruling outside the session's own ticket and plan for any supersession - Quote PRD flag, rollout and boundary clauses as criteria, never narrow PRD targets, and never treat session-written text as provenance - Add node tests, a contract test module and two shared eval cases
Add diff-rules.mjs, run by the writer before DONE and by handoff step 3, to block out-of-order or unprecedented migrations, uncaptured artifact field writes, errors returned inside a transaction after a write, Desktop sync lanes without the shared give-up, backoff and a synchronizing-susan pass, unscoped artifact link deletes, dropped ticketed comments, unrecorded shared service changes, story assertion changes without a release, and new story entries beside a current one. It also lists the parity tests and e2e specs the graph does not map. Document the script rules and the judgment rules in review-gates.md and wire them into the backend worker, adversarial and guardrails reviewers, verify worker and Storybook decomposer. Testing: node tests for diff-rules, vibe contract tests, two shared eval cases, ruff, pyright, plugin manifest tests.
Move a Codex writer stopped by its usage limit to Claude through a ledger harness switch, resolve review threads only after independent verification, read open pull request threads on every later look, stop only processes the session started, keep state out of temp folders, and use no computer use in Codex.
- Fold the child evidence gate into live-ticket-check.mjs behind --child-evidence, so it runs in the ticket worker's step 8 check with no new script or dispatch - The ticket worker builds the map; drop the adversarial reviewer pass - Remove guardrails check 16 and the duplicated child, supersession and external dependency prose the gate replaces; compress the provenance rules
- Drop the provenance eval and the separate contract module; pin the gate and provenance rules in the existing lesson contract test - Compress the gate tests and remove the requirements sentence the gate now enforces
This was referenced Oct 20, 2026
- Report the facts from handoff-inventory.mjs and gate the body and run evidence as pull-request phase options, through an imported module with no CLI of its own - Delete the prose the gate replaces and the separate lanes step - Re-evaluate PostHog before marking a flag key pending - Keep one eval case and pin the wiring in the existing handoff contract test
Move the review gates into handoff-inventory.mjs, which the writer and handoff already run, as `diffRules` with a `diffRulesClear` blocking entry, so no worker runs another command. Replace prose the gates now enforce: the frozen story closure procedure, the stale story ID searches, the sort-order test rule and a duplicated backend paragraph. Add gates for a change in a frozen story's import closure and for lost story IDs, drop the migration order rule the repo's own gate now covers, and batch base reads and importer searches so a typical diff costs a few seconds. Fold the judgment rules into their owners as one line each, drop review-gates.md, a contract module and an eval, and cover new ledger lessons on flag-off captures, narrow selection and targets, disclosure propagation, flag-on story states, sibling story removals and ancestor baselines.
# Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json
Capture now checks only tracked parity and unknown outputs, so source input readiness runs once, after the committed merge, and a failing producer names its cause. Review threads are resolved only by a script that verifies each fix in the same run. Restated main-sync prose is reduced to pointers so the instructions do not grow.
- Define the existing affected tests once in guardrails as the code_tests_for set for the touched files plus the inventory's required tests - Drop the verify worker's full-suite mode and the broad affected and lane runs; backend handoffs use the same checks mode
…n-lessons # Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json
- A writer's own test that expects behavior no ticket, PRD or request names is a wrong test, not a reason to build it - Guardrails rule provenance covers every new user-reachable capability - Remove two quality-loop sentences that repeat guardrails test rules
…d-evidence # Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json # plugins/vibe/README.md # plugins/vibe/agents/vibe-guardrails-reviewer.md # plugins/vibe/skills/handoff/scripts/live-ticket-check.mjs
# Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json # plugins/vibe/README.md # plugins/vibe/agents/vibe-environment-worker.md
# Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json # plugins/vibe/README.md # plugins/vibe/agents/vibe-verify-worker.md # plugins/vibe/skills/handoff/SKILL.md # plugins/vibe/skills/vibe/references/closedloop-graph.md # plugins/vibe/tools/python/test_handoff_skill_contract.py # plugins/vibe/tools/python/test_vibe_design_pass_contract.py
…/vibe-review-gates # Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json # plugins/vibe/README.md # plugins/vibe/agents/vibe-verify-worker.md # plugins/vibe/skills/handoff/SKILL.md # plugins/vibe/skills/handoff/scripts/handoff-inventory.mjs
… into fix/vibe-review-gates # Conflicts: # CHANGELOG.md # plugins/vibe/.claude-plugin/plugin.json # plugins/vibe/.codex-plugin/plugin.json # plugins/vibe/README.md
…ng to fleet-orchestrator
…into fix/vibe-review-gates # Conflicts: # CHANGELOG.md # plugins/vibe/README.md # plugins/vibe/evals/codex/test_run.py # plugins/vibe/skills/handoff/SKILL.md # plugins/vibe/tools/python/test_handoff_skill_contract.py
…olvable Desktop bundles - Flag-off parity renders the exact shipped story or route against main's render of the same one - Play counts come only from real-browser runs; Desktop launches need the main bundle's workspace imports to resolve - Fleet orchestrators never write rows reserved for human attestation
# Conflicts: # CHANGELOG.md
This was referenced Oct 20, 2026
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.
Purpose
One release (vibe 1.0.66) for the open vibe lessons ledger, combining what was #313, #314, #317 and the unopened orchestration change, per the operator's rule that lessons go into one PR (each PR costs a full CI run). Every gate runs inside a step vibe already has, and the prose rules a gate enforces are deleted.
Lessons carried
Review gates (handoff-inventory
diffRules): symphony-alpha #8958 withDb.tx partial commit, migration lock strategy and timestamp, raw writes bypassing activity capture (#8958, #8960), Desktop outbox lanes without synchronizing-susan and the shared give-up (#8960, #8965), ArtifactLink deletes beyond the replaced edge (#8960), flag-off output on shared paths (#8960, #8963, #8962 phone width, #8963 widths), dropped ticketed why-comments (#8948, #8962), Storybook placement and frozen v1.0 closure (#8947, #8962, #8963), story outcome flips as releases (#8959), lost story IDs, GridTableV2 parity and endpoint e2e specs as required runs (#8962, #8967), migration order after every main sync (#8965). One-line owner rules for #8956 to #8967 review findings (cache/precondition, id case, scope gates, composite ports, identity keys, focus from promises, void handlers, comparators, query shape, cursor bounds, throw-to-Result callers, skew tests, persisted snapshot shapes, in-row clipping, contrast, disclosure propagation, narrow selection and target size, sibling story removals, flag-on states per claimed surface).PR body facts (inventory
prFacts,blocking.prBody/blocking.prEvidence): overlap from open PR file and import intersections (#8947, #8956, #8962, #8963, #8965), flipped and deleted assertions and changed contracts with file:line (#8947, #8948, #8953, #8956, #8957, #8959), new refusals under Breaking changes (#8963), ticket "say in the PR" asks (#8956), cited rulings resolve to approved artifacts (#8962), stacked bases state no CI ran (#8967), server-only sessions skip UI ceremony (#8948), pending device and play runs block creation, PostHog re-read before "(flag-pending)" (#8987), Roadmap dependencies and open PRs resolved before designing a write path (#8958, #8963).Claimed children and provenance (
live-ticket-check.mjs --child-evidence): children reach In Review only with per-item evidence from the ticket worker's map, never the writer's audit (#8947, #8953, #8958, #8959, #8960, #8963, #8967, PRD-729); "active elsewhere" needs real activity (#8959); PRD flag and boundary clauses are criteria (#8957, #8959, #8962, #8965); no PRD target narrowing (#8953); operator clauses met per surface and live fallbacks (#8962); the session's own text is never a source, criteria never strengthened, precedent after ticket scope, human threads and sibling requirements (#8956, #8957, #8959, orchestrator ruling); every new user-reachable capability, refusal rule, visual element and numeric limit needs a human source (#8953 status write built to pass its own e2e, #8963, #8967).Orchestration, resume and PR follow-up: readiness ceremony cut (the pre-capture
main-sync-inputsturn and its extra bootstrapped checkout are removed; a failing producer reports command, exit code, error and log; restated main-sync prose replaced by pointers), Codex-to-ClaudeharnessSwitchmigration, review threads resolved only throughreview-threads.mjs resolvewith an independent verified verdict (#8987, ISS-9488), human threads re-read on every later look, process and state rules (no unscoped kill, no temp-dir records, no Codex computer use, visual checks after push), dependencies never idle a session (PRD-728, #8960).Operator rulings 2026-10-20: tests after any change, fix or main merge are exactly the
code_tests_forset plus the inventory's required tests; fleet-orchestrator gains criteria fixed at plan time with a two-way criteria-to-diff QA trace, a specialist role table with fallbacks, and one batched lessons PR per repo.Cost
agents/*.mdandskills/**/*.md, evals excluded): 16,195 lines / 156,483 words on main, 16,214 / 156,919 here (+19 lines, +436 words). About 14 of those lines are the requested fleet-orchestrator role table and QA rules; the four lesson sets were each flat or negative before combining.diff-rules.mjs,pr-facts.mjs,review-threads.mjs, the children gate) and their tests.Commands run (combined head)
uv run pytest plugins/vibe: 361 passednode --testhandoff, fleet-orchestrator and precedent-check suites: 113 passeduv run ruff check .clean;uv run pyrightclean;tools/vibe-workerstypecheck clean andnpm run buildreproduces the committed dist bundlestools/vibe-workersvitest was not run locally (CPU-bound laptop); CI confirms it.Version
vibe 1.0.66 in both manifests, the only bump in this PR, on top of main's 1.0.65.