feat(raven): dynamic driver licensing with field-first narrative#883
feat(raven): dynamic driver licensing with field-first narrative#883DHCross wants to merge 2 commits into
Conversation
No fixed driver cap. No open floodgate. Dynamic licensing by mass, chamber resonance, question resonance, freshness, and short-window salience. Licensed means lawful to use, not obligated to speak. Field-first synthesis remains mandatory. Implementation: - Added DriverLicenseRole (primary, contextual, background, excluded) and DriverLicenseReason types - Implemented applyDynamicDriverLicensing() that licenses drivers based on magnitude, chamber resonance, question resonance, freshness, and short-window salience - Centralized claimMayBeNamed() as single source for "what Raven may name" - Expanded Math Brain driver pool from 5 to 8 - Wired questionCategory through pipeline for contextual licensing - Added field-first directive to systemBlockBuilder: open with measured pressure before naming aspects - Added dynamic driver law: licensed means lawful to use, not mandatory to mention - Added grounding directive: do not imply confirming event is owed - Updated terrain packet to show LICENSED DRIVERS with role/reason metadata - Propagated license metadata through GeometryDriver, DriverSummary, and client-facing types - Updated all UI surfaces to use claimMayBeNamed() instead of hard-coded isPeakDriver || tier !== 'minor' - Added 4 focused tests proving chamber resonance, question resonance, and field-first prompt guidance Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_4189aed9-c5ea-44f8-af61-27a30719cacc) |
…l zodiac calculations Add ayanamsa parameter support with validation for 35 allowed values (1-35). Default to Lahiri (1) for Sidereal zodiac requests when ayanamsa not explicitly provided. Validate ayanamsa at both root and options level, throwing BestAstrologyProxyValidationError for invalid values. Auto-append default ayanamsa for Sidereal zodiac_type to ensure astronomically stable calculations.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b5251aa1-94e8-4619-ba14-cf041882633e) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2c1fdbad2a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| export function claimMayBeNamed(claim: DriverLicenseCandidate): boolean { | ||
| if (typeof claim.mayMention === 'boolean') return claim.mayMention; | ||
| return Boolean(claim.isPeakDriver) || claim.tier !== 'minor'; |
There was a problem hiding this comment.
Use dynamic nameability when pinning readouts
When a minor driver becomes nameable via mayMention=true (for chamber/question resonance), this new predicate lets the live prompt name it, but the session pin still uses the old !claim.isPeakDriver && claim.tier === 'minor' filter in collectPinnedGeometry and the pinned summary only carries the first raw drivers. On follow-up/refinement turns without a fresh artifact, collectSpeakableUniverse falls back to session.currentReadout.pinnedDrivers, so Raven can lose or repair-block the contextual driver it just licensed; the pinning/carry-forward path needs to use this same predicate.
Useful? React with 👍 / 👎.
|




Summary
Test plan
cd vessel && npm run test:smokeGenerated with Devin
Note
Medium Risk
Changes the single authority for which transit drivers Raven may name across the chat pipeline and prompts; regressions could over- or under-expose geometry in readings, though behavior is covered by new focused tests.
Overview
Introduces dynamic driver licensing so Raven can lawfully name more than peak/top-tier drivers when chamber landing, question category, salience, and freshness justify it—without treating every licensed driver as mandatory speech.
resolveLicensedGeometryClaimsnow runsapplyDynamicDriverLicensingusing landing houses andquestionCategory(wired fromraven-chatthrough turn readout / geometry build). Claims gainlicenseRole,licenseReasons, andmayMention/shouldMention/mustMention;claimMayBeNamedreplaces the oldisPeakDriver || tier !== 'minor'gate across prompts, UI chips, dossier projection, and subject attribution. Math Brain expands the speakable driver pool from 5 to 8; certified terrain shows LICENSED DRIVERS with role/reason metadata and new field-first / grounding directives insystemBlockBuilder.Separately:
bestAstrologyProxyvalidates sidereal ayanamsa (1–35) and defaults Lahiri when zodiac is sidereal; docs add the lens-rotation doctrine. NewvaultDuplicateDetectionclusters exact/near-duplicate vault profiles with unit tests.Reviewed by Cursor Bugbot for commit 94fc1d7. Bugbot is set up for automated code reviews on this repo. Configure here.