feat: judgment posture, verified write windows, observer merge (0.0.44) - #43
Merged
Conversation
judgment is the default and lets the main session choose width and locus per package; strict restores the previous mandatory floors for long unattended runs. /fusion:config set-posture persists it and FUSION_POSTURE overrides it for one session.
the guard reset only on dispatch, so passing a verification bought nothing while dispatching a throwaway package bought a whole new window. the recognizer covers the common test, lint, typecheck and check runners and takes a project specific addition through FUSION_VERIFICATION_PATTERN; the reset touches write accounting only, so wave width and narrow wave telemetry stay honest. the inline relief is now measured per window and no longer requires a session with zero dispatches, and the deny states what is unverified instead of commanding a dispatch.
the prompt hook injected a fleet reminder into every turn regardless of the goal, which produced 651 fleet-decline justification lines against 40 actual convenings across 80 sessions with 71 percent of waves at width one. it now fires only once the guard has observed repeated width one waves, and narrow width no longer owes a justification.
reports what the gates claim to prevent: fleet declines against fleet shaped waves, verification resets, unverified accumulations and the posture mix, so the next miscalibration surfaces as a number.
the gate is sized by coherence rather than one file and twenty lines: one change a single same turn verification command covers, reopening each time that verification passes. accumulation triggers narrow to unverified accumulation, a failed verification and a repeated symptom, and gate strength now follows classification confidence.
the observer never emitted a line, so its own monitor slot only ever spoke to say it had stopped. it runs as a library inside fusion's monitor process now, isolated at the call site so it cannot skip a codex announcement or kill the interval. polling, per job workspace keying, the state file and the unavailable ttl are unchanged.
the unquoted value carried claude-fallback: <reason>, which a yaml plain scalar cannot hold, so the whole frontmatter was dropped at load and the agent ran without its model pin, turn budget or disallowedTools restriction.
the recognizer matched any segment, so npm test 2>&1 | tail -20 reset the write window even when the suite was red, because the exit status reaching the guard is tail's. only the final segment's status is the command's status, so only the final segment counts now. the success check also rejects truthy is_error and isError rather than the boolean literal alone.
…eout the harness ran on the 5s product default, so a contended ubuntu runner surfaced job record lock timeouts instead of the behavior under test. cancelWithLockRetry was already working around the same contention. tests that exercise the timeout itself set their own value.
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
fusion's gates were enforcing two different kinds of rule at the same strength. whether a dispatched package was collected, verified and settled is mechanically checkable, so it stays hard. how wide the work should be and where the writing should happen depend on semantics a counter cannot see, and they were being coerced anyway. this release demotes that second half to advice and adds the telemetry to catch the next miscalibration.
the evidence, measured over the last 80 sessions rather than asserted:
fleet-decline:justification lines against 40 actual/fusion:ultraconvenings, a 16 to 1 override rate on a rule labelled a defaultWritefor a 60 line throwaway repro with "Dispatch an Agent or Task before another main-loop write", so the orchestrator dispatched Codex to author a file it deleted six minutes later. the inline relief only existed for zero dispatch sessions, which left a session with seventeen dispatches less latitude than one with nonewhat changed:
FUSION_VERIFICATION_PATTERN. the reset touches write accounting only, so wave width and narrow wave telemetry stay honestfusion:claude-workerinstead of thefusion:fast-workerseat retired in 0.0.43/fusion:config set-posture <judgment|strict>, withFUSION_POSTUREoverriding for one session.strictpreserves the previous behavior byte for byte for long unattended runs/fusion:statsgains a coercion ledger reporting fleet declines against fleet shaped waves, verification resets, unverified accumulations and the posture mixtwo defects found along the way:
fusion:claude-workeragent frontmatter has not parsed since 0.0.43. its unquoted description carriedclaude-fallback: <reason>, which a yaml plain scalar cannot hold, so the whole block was dropped at load and the agent ran without its model pin, turn budget ordisallowedTools: Agentrestrictionbreaking changes
judgment, so the fleet reminder no longer fires on every prompt and a passing verification reopens the write window./fusion:config set-posture strictrestores the previous behaviorengine-jobs, described as codex job completions and peer engine token observationsGROK_JOBS_OBSERVER_INTERVAL_MSis retired with the observer daemon; the grok observation now followsCODEX_JOBS_MONITOR_INTERVAL_MS.GROK_JOBS_OBSERVER_UNAVAILABLE_TTL_MSis unchangedtest plan
already verified
npm test-> 1056 tests, 1055 pass, 0 fail, 1 pre-existing skipclaude plugin validateonplugins/codex,plugins/grok,plugins/fusionand the marketplace root -> all four pass, including the claude-worker frontmatter that failed before this branchnode plugins/fusion/scripts/generate-rules-manifest.mjs-> manifest regenerated, 35 hashespsdependent codex monitor tests were rerun outside the peer sandbox -> 51/51 greenreviewer should verify
/fusion:smokebefore real delegated work/fusion:config showreports posturejudgmentwith sourcedefault;set-posture strictthenset-posture judgmentround trips andshow --jsoncarries both value and source/fusion:statsshows the verification reset in the coercion ledgerengine-jobsentry rather than two grok entries, and a terminal grok job still lands intoken-usage.jsonlandmodel-audit.jsonlnotes