Repository navigation
feat(company-monitoring): classify and admit material impacts - #6470
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
koala73
added a commit
that referenced
this pull request
Aug 12, 2026
#6480) `convex/companyMonitoring/admission-snapshot.ts` shipped in #6470 and took the production Convex deploy down on main: InvalidConfig: companyMonitoring/admission-snapshot.js is not a valid path to a Convex module. Path component admission-snapshot.js can only contain alphanumeric characters, underscores, or periods. `evaluate_push` validates before pushing anything, so this one filename rejects the WHOLE deploy — every unrelated convex/ change merged after it stays out of production, the same blast radius as #6232. The convex npm package does not check the rule locally; the only "no" comes from the server, post-merge, where nothing gates. So the rename is paired with the pre-merge guard that reproduces the rule offline, in the existing gate-required hygiene test rather than a new workflow. Claude-Session: https://claude.ai/code/session_019eQ94CDZi5VAfJBh5xzCpE
koala73
added a commit
that referenced
this pull request
Aug 12, 2026
…cause (#6479) (#6481) On 2026-08-12 the monitor emailed "All jobs have failed" while the alarm it existed to raise — Convex Deploy red on main after #6470 — went unnamed. Its whole message was a transient TLS error from api.github.com. Three defects, one symptom: 1. No retry. Every read went through one spawnSync('gh', …) that threw on any non-zero exit, so a transport blip was indistinguishable from a verdict. 2. No walk. That throw aborted the loop, so the workflows behind the failed read were never judged — a genuinely red deploy stayed invisible. 3. No vocabulary. "Could not read the record" and "the deploy failed" both exited 1 with the same wording. Reads now retry only when GitHub did not answer (no `(HTTP nnn)` in stderr) or answered 408/429/5xx. A 404 or 422 is an answer, so it fails immediately rather than burning the job's 10-minute budget. Timeouts stay terminal for the same budget reason as the sibling watchdog in #6478. An unreadable workflow is now UNKNOWN/READ_FAILED, reported apart from ALARM. UNKNOWN still exits non-zero — the module's direction-of-failure rule is that an unreadable record never resolves to healthy — but it no longer claims a deploy failed that the monitor never saw. Verified: the classifier accepts the verbatim TLS stderr from run 31560494370 and rejects the verbatim 404 the live gh binary emits; the monitor runs clean against the real repo (3/3 healthy, exit 0). Claude-Session: https://claude.ai/code/session_019eQ94CDZi5VAfJBh5xzCpE
This branch was successfully deployed
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
Company Monitoring can now turn normalized evidence candidates into deterministic publish, hold, reject, or expiry decisions. The model proposes structured facts only. Versioned policy owns the confidence floors, source authority, retry schedule, and final decision.
This is the admission slice after normalized evidence. Downstream impact publication remains a separate slice and is not part of this PR.
This PR does not close the target issue. The frozen admission scorer gate is not available, and its tracking issue remains open. Also, the current exact-content candidate contract cannot place two independently worded reports in one persisted candidate. That production path needs a separately approved event-level grouping contract before two-origin corroboration can clear end to end.
Design decisions
Type of change
Affected areas
/api/*)Validation
npm run test:datavitest run --config vitest.config.mts --maxWorkers=1— full Convex suitenpm run typechecknpm run typecheck:apitsc --noEmit -p convex/tsconfig.jsonThe checks cover all nine required fixtures, confidence boundaries, malformed and contradictory output, authority and syndication rules, held admission and expiry, replay conflicts, stale revisions, expired leases, purge safety, bounded provider responses, and transport-failure health. No credentialed live OpenRouter request was made.
Checklist
api/rss-proxy.jsallowlist (N/A: no feed added)npm run typecheck)expiresAtbounded to the first scheduled cron window (N/A: no health probe changed)Documentation Alignment Checklist
Rollout and rollback
Admission stays disabled unless both the OpenRouter key and classifier model are configured. After activation, monitor Company Monitoring worker outcomes and the admission decision ledger for claim or finalize errors, repeated lease expiry, a growing pending backlog, or a malformed-output reject spike. Disable the classifier configuration or revert this PR if those signals appear. Observe the first 72-hour hold window before treating the retry path as operationally accepted.
Related
Related: #6011, #6010, #6006, and #6012.
Screenshots
N/A. This PR changes backend policy and worker behavior only.