Skip to content

feat(raven): dynamic driver licensing with field-first narrative#883

Open
DHCross wants to merge 2 commits into
mainfrom
ai/dynamic-driver-licensing
Open

feat(raven): dynamic driver licensing with field-first narrative#883
DHCross wants to merge 2 commits into
mainfrom
ai/dynamic-driver-licensing

Conversation

@DHCross

@DHCross DHCross commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

  • 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.
  • 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

Test plan

  • Typecheck: ✅ passed
  • Focused tests added for:
    • Chamber resonance admitting salient minor drivers
    • Weak non-resonant minor drivers staying excluded
    • Question resonance licensing texture without mandatory speech
    • Field-first prompt guidance in terrain packet
  • Full smoke test ready to run: cd vessel && npm run test:smoke

Generated 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.

resolveLicensedGeometryClaims now runs applyDynamicDriverLicensing using landing houses and questionCategory (wired from raven-chat through turn readout / geometry build). Claims gain licenseRole, licenseReasons, and mayMention / shouldMention / mustMention; claimMayBeNamed replaces the old isPeakDriver || 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 in systemBlockBuilder.

Separately: bestAstrologyProxy validates sidereal ayanamsa (1–35) and defaults Lahiri when zodiac is sidereal; docs add the lens-rotation doctrine. New vaultDuplicateDetection clusters 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.

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>
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
shipyard Error Error Jun 28, 2026 11:24pm

@cursor

cursor Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot 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.
@cursor

cursor Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot 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)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +206 to +208
export function claimMayBeNamed(claim: DriverLicenseCandidate): boolean {
if (typeof claim.mayMention === 'boolean') return claim.mayMention;
return Boolean(claim.isPeakDriver) || claim.tier !== 'minor';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
D Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant