Define witnessed admission and settlement contracts - #766
Conversation
Self-code review
Resolved finding:
No open findings remain after reviewing @codex please confirm the closed-union, witness-binding, and admission-versus-settlement phase boundaries. |
|
Warning Review limit reached
Next review available in: 39 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThe PR documents admission-versus-settlement semantics and adds immutable TypeScript domain objects for four admission outcomes, witnesses, residual postures, execution results, retry dispositions, and bound settlement plans, with comprehensive validation tests. ChangesAdmission and settlement model
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/domain/admission/AdmissionObstructionReason.ts`:
- Around line 50-56: Add static factory methods to AdmissionObstructionReason
for capability-denied, unsupported-evidence, law-violation, budget-exceeded, and
unsupported-contract, matching invalidDerivation and staleBasis. Each factory
should accept the code string and construct the reason using its corresponding
named constant, so callers no longer need raw obstruction-family literals.
In `@src/domain/admission/DerivationWitness.ts`:
- Around line 21-27: Extract the shared null/undefined fields and
AdmissionEvaluation instance checks into a requireAdmissionEvaluation-style
helper in src/domain/admission/admissionValidation.ts. Update DerivationWitness
to call it, replace PluralityWitness.requireFields with it while retaining the
distinct-coordinate validation, and replace
ObstructionWitness.requirePresentFields/requireEvaluation with it; preserve the
existing validation errors and codes.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 2b17f606-f05c-4c8f-b5e4-501b8d8abb27
📒 Files selected for processing (29)
ARCHITECTURE.mdREADME.mddocs/topics/api/README.mdsrc/domain/admission/AdmissionEvaluation.tssrc/domain/admission/AdmissionExecution.tssrc/domain/admission/AdmissionObstructionReason.tssrc/domain/admission/AdmissionOutcome.tssrc/domain/admission/AdmissionResidualPosture.tssrc/domain/admission/AdmissionRetryDisposition.tssrc/domain/admission/AdmissionRuntimeFailure.tssrc/domain/admission/AdvancedAdmissionPosture.tssrc/domain/admission/CompletedAdmissionExecution.tssrc/domain/admission/ConflictAdmission.tssrc/domain/admission/ConflictWitness.tssrc/domain/admission/DerivationWitness.tssrc/domain/admission/DerivedAdmission.tssrc/domain/admission/FailedAdmissionExecution.tssrc/domain/admission/ObstructedAdmission.tssrc/domain/admission/ObstructionWitness.tssrc/domain/admission/PluralAdmission.tssrc/domain/admission/PluralAdmissionPosture.tssrc/domain/admission/PluralityWitness.tssrc/domain/admission/UnchangedAdmissionPosture.tssrc/domain/admission/UnsettledConflictAdmissionPosture.tssrc/domain/admission/admissionValidation.tssrc/domain/admission/matchAdmission.tssrc/domain/settlement/SettlementPlan.tstest/unit/domain/admission/AdmissionOutcome.test.tstest/unit/domain/settlement/SettlementPlan.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
- GitHub Check: coverage-threshold
- GitHub Check: test-node (22)
- GitHub Check: preflight
🧰 Additional context used
📓 Path-based instructions (4)
src/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
src/**/*.{ts,tsx,js,jsx}: Do not introduceany,as any,as unknown as,unknown(outside adapters),Record<string, unknown>(outside adapters),*Likeplaceholder types,JSON.parse/JSON.stringify(outside adapters),fetch(outside adapters),process.env(outside adapters),@ts-ignore, orz.any()in core code; use validated boundary models and ports instead.
Use constructor-injected ports for external capabilities; do not rely on ambient dependencies for I/O, clocks, persistence, or entropy.
Do not createutils.ts,helpers.ts,misc.ts, orcommon.ts; name files after the actual concept they model.
Prefer one file per class, type, or object; if a file accumulates peer concepts, split it.
Keep helper corridors, fake shape trust, transitional duplication, and compile-time theater out of the codebase; runtime-honest TypeScript must reflect actual behavior.
No enum usage; prefer runtime-backed domain forms and unions.
Do not use boolean trap parameters; prefer named option objects or separate methods.
Avoid magic strings or numbers when a named constant should exist.
Keep domain bytes asUint8Array;Bufferbelongs in infrastructure adapters.
Files:
src/domain/admission/AdmissionOutcome.tssrc/domain/admission/AdvancedAdmissionPosture.tssrc/domain/admission/FailedAdmissionExecution.tssrc/domain/admission/UnsettledConflictAdmissionPosture.tssrc/domain/admission/PluralAdmissionPosture.tssrc/domain/admission/DerivedAdmission.tssrc/domain/admission/AdmissionEvaluation.tssrc/domain/admission/AdmissionRuntimeFailure.tssrc/domain/admission/ConflictWitness.tssrc/domain/admission/UnchangedAdmissionPosture.tssrc/domain/admission/ObstructedAdmission.tssrc/domain/admission/AdmissionExecution.tssrc/domain/admission/PluralAdmission.tssrc/domain/admission/DerivationWitness.tssrc/domain/admission/CompletedAdmissionExecution.tssrc/domain/admission/matchAdmission.tssrc/domain/admission/PluralityWitness.tssrc/domain/admission/AdmissionResidualPosture.tssrc/domain/admission/admissionValidation.tssrc/domain/admission/AdmissionRetryDisposition.tssrc/domain/admission/ConflictAdmission.tssrc/domain/admission/AdmissionObstructionReason.tssrc/domain/admission/ObstructionWitness.tssrc/domain/settlement/SettlementPlan.ts
src/domain/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
src/domain/**/*.{ts,tsx,js,jsx}: Insrc/domain/**, do not useDate.now(),new Date(),Date(),performance.now(),Math.random(),crypto.randomUUID(),crypto.getRandomValues(),setTimeout,setInterval, rawnew Error(...)/new TypeError(...), or direct imports from Node built-ins; time, entropy, and external capabilities must enter through ports or parameters, and domain errors should extendWarpError.
Construct domain objects only in core when doing so establishes validated runtime truth; do not build infrastructure adapters, host APIs, persistence implementations, wall clocks, or entropy sources inside core.
Prefer discriminated unions and explicit result types instead of boolean-flag bags, and model expected failures as return values rather than exceptions.
src/domain/must not import host APIs or Node-specific globals; hexagonal architecture boundaries are mandatory.
Domain code must not use the wall clock directly; time must enter through a port or parameter.
Files:
src/domain/admission/AdmissionOutcome.tssrc/domain/admission/AdvancedAdmissionPosture.tssrc/domain/admission/FailedAdmissionExecution.tssrc/domain/admission/UnsettledConflictAdmissionPosture.tssrc/domain/admission/PluralAdmissionPosture.tssrc/domain/admission/DerivedAdmission.tssrc/domain/admission/AdmissionEvaluation.tssrc/domain/admission/AdmissionRuntimeFailure.tssrc/domain/admission/ConflictWitness.tssrc/domain/admission/UnchangedAdmissionPosture.tssrc/domain/admission/ObstructedAdmission.tssrc/domain/admission/AdmissionExecution.tssrc/domain/admission/PluralAdmission.tssrc/domain/admission/DerivationWitness.tssrc/domain/admission/CompletedAdmissionExecution.tssrc/domain/admission/matchAdmission.tssrc/domain/admission/PluralityWitness.tssrc/domain/admission/AdmissionResidualPosture.tssrc/domain/admission/admissionValidation.tssrc/domain/admission/AdmissionRetryDisposition.tssrc/domain/admission/ConflictAdmission.tssrc/domain/admission/AdmissionObstructionReason.tssrc/domain/admission/ObstructionWitness.tssrc/domain/settlement/SettlementPlan.ts
src/domain/**/!(*.test).{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use explicit domain concepts with validated constructors,
Object.freeze, andinstanceofdispatch; domain objects should be runtime-backed nouns, not ad hoc shape bags.
Files:
src/domain/admission/AdmissionOutcome.tssrc/domain/admission/AdvancedAdmissionPosture.tssrc/domain/admission/FailedAdmissionExecution.tssrc/domain/admission/UnsettledConflictAdmissionPosture.tssrc/domain/admission/PluralAdmissionPosture.tssrc/domain/admission/DerivedAdmission.tssrc/domain/admission/AdmissionEvaluation.tssrc/domain/admission/AdmissionRuntimeFailure.tssrc/domain/admission/ConflictWitness.tssrc/domain/admission/UnchangedAdmissionPosture.tssrc/domain/admission/ObstructedAdmission.tssrc/domain/admission/AdmissionExecution.tssrc/domain/admission/PluralAdmission.tssrc/domain/admission/DerivationWitness.tssrc/domain/admission/CompletedAdmissionExecution.tssrc/domain/admission/matchAdmission.tssrc/domain/admission/PluralityWitness.tssrc/domain/admission/AdmissionResidualPosture.tssrc/domain/admission/admissionValidation.tssrc/domain/admission/AdmissionRetryDisposition.tssrc/domain/admission/ConflictAdmission.tssrc/domain/admission/AdmissionObstructionReason.tssrc/domain/admission/ObstructionWitness.tssrc/domain/settlement/SettlementPlan.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Do not use direct imports fromsrc/infrastructure/**insrc/domain/**orsrc/ports/**; depend on a port instead.
Do not use direct Node built-ins insrc/domain/**orsrc/ports/**; use a port instead.
Files:
src/domain/admission/AdmissionOutcome.tssrc/domain/admission/AdvancedAdmissionPosture.tssrc/domain/admission/FailedAdmissionExecution.tssrc/domain/admission/UnsettledConflictAdmissionPosture.tssrc/domain/admission/PluralAdmissionPosture.tssrc/domain/admission/DerivedAdmission.tstest/unit/domain/settlement/SettlementPlan.test.tssrc/domain/admission/AdmissionEvaluation.tssrc/domain/admission/AdmissionRuntimeFailure.tssrc/domain/admission/ConflictWitness.tssrc/domain/admission/UnchangedAdmissionPosture.tssrc/domain/admission/ObstructedAdmission.tssrc/domain/admission/AdmissionExecution.tssrc/domain/admission/PluralAdmission.tssrc/domain/admission/DerivationWitness.tssrc/domain/admission/CompletedAdmissionExecution.tssrc/domain/admission/matchAdmission.tssrc/domain/admission/PluralityWitness.tssrc/domain/admission/AdmissionResidualPosture.tssrc/domain/admission/admissionValidation.tssrc/domain/admission/AdmissionRetryDisposition.tssrc/domain/admission/ConflictAdmission.tssrc/domain/admission/AdmissionObstructionReason.tssrc/domain/admission/ObstructionWitness.tssrc/domain/settlement/SettlementPlan.tstest/unit/domain/admission/AdmissionOutcome.test.ts
🔇 Additional comments (26)
ARCHITECTURE.md (1)
160-160: LGTM!Also applies to: 193-193, 250-265
README.md (1)
28-28: LGTM!Also applies to: 239-264, 337-337, 360-369, 405-422
docs/topics/api/README.md (1)
319-323: LGTM!Also applies to: 332-378, 389-393, 409-409, 426-448, 462-488
src/domain/admission/admissionValidation.ts (1)
1-30: LGTM!src/domain/admission/AdvancedAdmissionPosture.ts (1)
1-13: LGTM!src/domain/admission/UnsettledConflictAdmissionPosture.ts (1)
1-13: LGTM!src/domain/admission/AdmissionResidualPosture.ts (1)
1-10: LGTM!src/domain/admission/ConflictWitness.ts (1)
1-56: LGTM!src/domain/admission/PluralAdmissionPosture.ts (1)
1-12: LGTM!src/domain/admission/AdmissionEvaluation.ts (1)
1-49: LGTM!src/domain/admission/AdmissionObstructionReason.ts (1)
59-65: LGTM!src/domain/admission/AdmissionRetryDisposition.ts (1)
1-52: LGTM!src/domain/admission/AdmissionRuntimeFailure.ts (1)
1-16: LGTM!src/domain/admission/UnchangedAdmissionPosture.ts (1)
1-14: LGTM!src/domain/admission/ObstructedAdmission.ts (1)
1-19: LGTM!src/domain/admission/FailedAdmissionExecution.ts (1)
1-16: LGTM!test/unit/domain/admission/AdmissionOutcome.test.ts (1)
1-535: LGTM!src/domain/admission/AdmissionOutcome.ts (1)
1-12: LGTM!src/domain/admission/ConflictAdmission.ts (1)
1-20: LGTM!src/domain/admission/DerivedAdmission.ts (1)
1-20: LGTM!src/domain/admission/PluralAdmission.ts (1)
1-20: LGTM!src/domain/admission/matchAdmission.ts (1)
1-34: LGTM!src/domain/admission/CompletedAdmissionExecution.ts (1)
1-26: LGTM!src/domain/admission/AdmissionExecution.ts (1)
1-5: LGTM!src/domain/settlement/SettlementPlan.ts (1)
1-56: LGTM!test/unit/domain/settlement/SettlementPlan.test.ts (1)
1-78: LGTM!
Release Preflight
If this PR is from a |
Release Preflight
If this PR is from a |
Summary
derived | plural | conflict | obstructionadmission algebra as runtime-backed classesSettlementPlanbound to exact lanes, frontiers, proposal, law, and policyScope
This is the contract checkpoint for #765. It does not expose the new types from package root or classify live writes/imports yet; #765 remains open for the semantic-matrix classifier and runtime integration.
Refs #765
Refs #712
Verification
npm run lintnpm run lint:semgrepnpm run typechecknpm run lint:md:codenpm run lint:docs-topologyReview posture
Self-review found one anti-sludge false positive for the semantic retry value
unknown; the two exact lines now carry narrow inline suppressions explaining that they are value vocabulary, not the TypeScriptunknowntype. No unresolved self-review findings remain.