Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
c046caf
test: require provider availability transitions in the existing Workd…
adrianwebb Oct 17, 2026
1792926
test: retain native provider availability history in exact public Wor…
adrianwebb Oct 17, 2026
a484d53
test: use the existing public capacity audit and reproduce incomplete…
adrianwebb Oct 17, 2026
cb53c12
test: respect the original SQL row limit before asserting missing aud…
adrianwebb Oct 17, 2026
808b4e1
fix: retain availability transitions in existing public paginated cap…
adrianwebb Oct 17, 2026
2cc9eca
test: retain native availability rollback competing publication and e…
adrianwebb Oct 17, 2026
183ce4e
fix: preserve the original public record return type and generic SQL …
adrianwebb Oct 17, 2026
bd4a07a
test: reject malformed retained availability clocks and unmeasured wo…
adrianwebb Oct 17, 2026
d74c76e
fix: retain measured availability clocks quantities and safe eligibil…
adrianwebb Oct 17, 2026
9f6cd75
test: roll back altered native availability audit evidence without re…
adrianwebb Oct 17, 2026
4d7769b
test: retain corrupted native availability clocks and exact scoped re…
adrianwebb Oct 17, 2026
7c41337
acceptance: select provider audit history and complete authorized pag…
adrianwebb Oct 17, 2026
50dbb04
test: reject a retained impossible calendar date instead of accepting…
adrianwebb Oct 17, 2026
0e76533
test: retain impossible native calendar inputs and both original cloc…
adrianwebb Oct 17, 2026
b990691
fix: retain only original canonical availability clock bytes without …
adrianwebb Oct 17, 2026
4f25533
fix: retain complete held owner catalogs when appending acceptance se…
adrianwebb Oct 17, 2026
686061d
integrate checked API561 with public provider availability history
adrianwebb Oct 17, 2026
2f1d782
test: retain native provider closure audit in canonical closeout fixture
adrianwebb Oct 17, 2026
76ad92e
test: assert the existing deterministic capacity audit identity
adrianwebb Oct 17, 2026
1dfc15e
test: reproduce exact native availability fault function grammar befo…
adrianwebb Oct 17, 2026
cfad9dd
test: preserve exact PostgreSQL function delimiters in shared native …
adrianwebb Oct 17, 2026
000fe68
test: select original native fault SQL grammar before provider accept…
adrianwebb Oct 17, 2026
2288d30
ci: reproduce owning availability audit failures before the complete …
adrianwebb Oct 17, 2026
e02db3e
test: retain exact discriminated native fault modes under strict Type…
adrianwebb Oct 17, 2026
d7e82b2
test: reproduce unobserved runtime availability expiry and original c…
adrianwebb Oct 17, 2026
5008687
test: require transactional native expiry observation rollback compet…
adrianwebb Oct 17, 2026
1c1d46f
fix: retain actual availability expiry and its original terminal cloc…
adrianwebb Oct 17, 2026
e92ca21
acceptance: select the owning expiry regression and retain strict ter…
adrianwebb Oct 17, 2026
841b281
test: reject terminal expiry clocks before original supply expiration…
adrianwebb Oct 17, 2026
59d0f45
fix: reject malformed terminal expiry before any retained observation…
adrianwebb Oct 17, 2026
d02a6d5
test: reproduce stale availability claim mutating original capability…
adrianwebb Oct 17, 2026
1d5d831
fix: bind capability offer publication to the existing availability s…
adrianwebb Oct 17, 2026
ffcad83
test: type original SQL offer rows without changing native assertions
adrianwebb Oct 17, 2026
f8bf864
test: require current availability claim before any provider projecti…
adrianwebb Oct 17, 2026
c3024fc
fix: validate and lock the current availability claim before any coup…
adrianwebb Oct 17, 2026
fdcbe12
test: retain the generic owning claim reader signature in the exact m…
adrianwebb Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
- name: Build public API exports before native acceptance consumer regression
run: npm run build:dist
- name: Reproduce native lease transition history before complete verification
run: node node_modules/vitest/vitest.mjs run --config ./vitest.control-plane.config.ts tests/unit/control-plane/capacity/execution/admission/postgres.test.ts tests/unit/control-plane/release/provider-prerequisites.test.ts tests/unit/control-plane/providers/assignments/lifecycle/architecture/terminal-observation-postgres.test.ts tests/unit/control-plane/capacity/execution/graph/persistence/concurrent-results-postgres.test.ts tests/unit/control-plane/providers/assignments/architecture/recovery/operator-recovery-postgres.test.ts tests/unit/control-plane/providers/assignments/architecture/recovery/recovery-observation-postgres.test.ts tests/unit/control-plane/capacity/workdays/scheduling/architecture/workday-start-native.test.ts tests/unit/control-plane/capacity/workdays/lifecycle/concurrent-runs-postgres.test.ts tests/unit/control-plane/capacity/execution/graph/architecture/workday-closeout-persistence.test.ts tests/unit/control-plane/capacity/execution/architecture/initial/admission/session-authority-unit.test.ts tests/unit/control-plane/capacity/planning/assignment-estimate-integration.test.ts tests/unit/control-plane/capacity/planning/estimate-source-native.test.ts tests/unit/control-plane/providers/assignments/architecture/cancellation-persistence.test.ts tests/unit/control-plane/capacity/execution/architecture/initial/admission/resource-closure-unit.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-status-history-postgres.test.ts tests/unit/control-plane/capacity/accounting/architecture/accounting-history-postgres.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-review-exhaustion-postgres.test.ts tests/unit/control-plane/capacity/workdays/scheduling/architecture/workday-node-history-native.test.ts tests/unit/control-plane/capacity/execution/admission/discussion-binding.test.ts tests/unit/control-plane/capacity/execution/architecture/admission-replay-authority.test.ts tests/unit/control-plane/capacity/execution/architecture/admission-replay-native.test.ts tests/unit/control-plane/capacity/execution/admission/timeout-postgres.test.ts tests/unit/control-plane/capacity/execution/scheduling/planning/planning-window-evidence.test.ts tests/unit/control-plane/capacity/execution/scheduling/planning/planning-phase-native.test.ts tests/unit/control-plane/capacity/execution/admission/closeout/closeout-admission.test.ts tests/unit/control-plane/capacity/workdays/lifecycle/workday-lifecycle-observations.test.ts tests/unit/control-plane/capacity/execution/reporting/report-context-scope.test.ts tests/unit/control-plane/capacity/execution/reporting/report-context-lifecycle.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-status-history.test.ts tests/unit/control-plane/capacity/execution/graph/architecture/workday-observation-persistence.test.ts
run: node node_modules/vitest/vitest.mjs run --config ./vitest.control-plane.config.ts tests/unit/control-plane/capacity/execution/admission/postgres.test.ts tests/unit/control-plane/release/provider-prerequisites.test.ts tests/unit/control-plane/providers/assignments/lifecycle/architecture/terminal-observation-postgres.test.ts tests/unit/control-plane/capacity/execution/graph/persistence/concurrent-results-postgres.test.ts tests/unit/control-plane/providers/assignments/architecture/recovery/operator-recovery-postgres.test.ts tests/unit/control-plane/providers/assignments/architecture/recovery/recovery-observation-postgres.test.ts tests/unit/control-plane/capacity/workdays/scheduling/architecture/workday-start-native.test.ts tests/unit/control-plane/capacity/workdays/lifecycle/concurrent-runs-postgres.test.ts tests/unit/control-plane/capacity/execution/graph/architecture/workday-closeout-persistence.test.ts tests/unit/control-plane/capacity/execution/architecture/initial/admission/session-authority-unit.test.ts tests/unit/control-plane/capacity/planning/assignment-estimate-integration.test.ts tests/unit/control-plane/capacity/planning/estimate-source-native.test.ts tests/unit/control-plane/providers/assignments/architecture/cancellation-persistence.test.ts tests/unit/control-plane/capacity/execution/architecture/initial/admission/resource-closure-unit.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-status-history-postgres.test.ts tests/unit/control-plane/capacity/accounting/architecture/accounting-history-postgres.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-review-exhaustion-postgres.test.ts tests/unit/control-plane/capacity/workdays/scheduling/architecture/workday-node-history-native.test.ts tests/unit/control-plane/capacity/execution/admission/discussion-binding.test.ts tests/unit/control-plane/capacity/execution/architecture/admission-replay-authority.test.ts tests/unit/control-plane/capacity/execution/architecture/admission-replay-native.test.ts tests/unit/control-plane/capacity/execution/admission/timeout-postgres.test.ts tests/unit/control-plane/capacity/execution/scheduling/planning/planning-window-evidence.test.ts tests/unit/control-plane/capacity/execution/scheduling/planning/planning-phase-native.test.ts tests/unit/control-plane/capacity/execution/admission/closeout/closeout-admission.test.ts tests/unit/control-plane/capacity/workdays/lifecycle/workday-lifecycle-observations.test.ts tests/unit/control-plane/capacity/execution/reporting/report-context-scope.test.ts tests/unit/control-plane/capacity/execution/reporting/report-context-lifecycle.test.ts tests/unit/control-plane/capacity/execution/architecture/monitoring/node-status-history.test.ts tests/unit/control-plane/capacity/execution/graph/architecture/workday-observation-persistence.test.ts tests/unit/control-plane/capacity/ontology/availability-history.test.ts tests/unit/control-plane/capacity/ontology/availability-postgres.test.ts
- run: npm run verify:direct
- name: Verify real PostgreSQL backup-writer migration closure
run: npx vitest run --config vitest.control-plane.config.ts tests/unit/control-plane/services/live/replication-migration-postgres.test.ts
Expand Down
24 changes: 24 additions & 0 deletions guarantees/agent/golden/scenes/component-boundaries.scene.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2834,3 +2834,27 @@ workflow:
- id: execution-retired-participation-2
action: { verifier: api.golden.execution-retired-participation-2 }
expect: { status: passed }
- id: provider-availability-history-unit
action: { verifier: api.golden.provider-availability-history-unit }
expect: { status: passed }
- id: capacity-audit-pagination-unit
action: { verifier: api.golden.capacity-audit-pagination-unit }
expect: { status: passed }
- id: provider-availability-fault-sql-unit
action: { verifier: api.golden.provider-availability-fault-sql-unit }
expect: { status: passed }
- id: provider-availability-expiry-unit
action:
verifier: api.golden.provider-availability-expiry-unit
expect:
status: passed
- id: provider-availability-offer-guard-unit
action:
verifier: api.golden.provider-availability-offer-guard-unit
expect:
status: passed
- id: provider-availability-current-claim-unit
action:
verifier: api.golden.provider-availability-current-claim-unit
expect:
status: passed
30 changes: 30 additions & 0 deletions guarantees/verifiers/golden.verifiers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4804,3 +4804,33 @@ verifiers:
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/execution/architecture/native-inventory.test.ts
testName: "requires native absence of every retired table including source candidates without accepting ambiguous catalog or resolution results"
api.golden.provider-availability-history-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "publishes the committed provider availability transition into existing scoped capacity audit history without private adapter observations"
api.golden.capacity-audit-pagination-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "public capacity audit preserves raw records and complete cursor pagination including equal-clock identities"
api.golden.provider-availability-fault-sql-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "executes the exact owning native availability fault SQL with missing interrupted and altered audit writes before original source retry"
api.golden.provider-availability-expiry-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "retains each actual runtime expiry in the original availability audit clock and reports only newly expired sessions through unchanged replay"
api.golden.provider-availability-offer-guard-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "retains exact capability offer bytes on stale foreign or terminal availability publication before original guarded retry"
api.golden.provider-availability-current-claim-unit:
kind: vitestCase
ownerPackage: "@treeseed/api"
testFile: tests/unit/control-plane/capacity/ontology/availability-history.test.ts
testName: "denies a missing current availability claim before every offer lane or seed grant mutation without changing original requests"
41 changes: 41 additions & 0 deletions src/api/capacity/repositories/accounts/availability-observation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import {canonicalJson,sha256} from '../../security.ts';
import {isDeepStrictEqual} from 'node:util';
import type {ProviderAvailabilitySession} from '@treeseed/sdk/capacity-provider/contracts';
import type {CapacityGovernanceDatabase} from '../../database.ts';
import {CapacityGovernanceError} from '../../database.ts';
import {CapacityAuditRepository} from '../support/audit.ts';
type Row=Record<string,unknown>;
const object=(value:unknown):Row=>value&&typeof value==='object'&&!Array.isArray(value)?value as Row:{};
const healthy=(value:unknown):boolean|null=>{if(value===undefined||value===null)return null;if(typeof value!=='boolean')throw new CapacityGovernanceError('provider_availability_observation_invalid','Availability health observation must remain an original boolean.',500);return value;};

/** Existing audit is observation history; the session remains the supply authority. */
export async function observeAvailabilitySession(database:CapacityGovernanceDatabase,session:ProviderAvailabilitySession):Promise<void>{
const now=(session.status==='closed'||session.status==='expired')?session.closedAt:session.refreshedAt;
const clocks=[session.openedAt,session.refreshedAt,session.expiresAt,session.snapshot.availableFrom,...(session.closedAt?[session.closedAt]:[]),...(session.snapshot.availableUntil?[session.snapshot.availableUntil]:[])];
if(!clocks.every(value=>typeof value==='string'&&Number.isFinite(Date.parse(value))&&new Date(value).toISOString()===value)||Date.parse(session.openedAt)>Date.parse(session.refreshedAt)||Date.parse(session.expiresAt)<=Date.parse(session.refreshedAt)||session.closedAt&&Date.parse(session.closedAt)<Date.parse(session.refreshedAt)||session.status==='expired'&&(!session.closedAt||Date.parse(session.closedAt)<Date.parse(session.expiresAt))||![session.snapshot.maxConcurrentWorkers,session.snapshot.availableWorkers,session.snapshot.reservedWorkers,session.snapshot.borrowedWorkers].every(value=>Number.isSafeInteger(value)&&value>=0))
throw new CapacityGovernanceError('provider_availability_observation_invalid','Original lifecycle clocks and measured worker quantities required.',500);
if(!now||!Number.isFinite(Date.parse(now))||!Number.isSafeInteger(session.sequence)||session.sequence<1)
throw new CapacityGovernanceError('provider_availability_observation_invalid','Original availability identity sequence and clock required.',500);
const adapters=session.snapshot.adapters.map(adapter=>{
const accounting=object(adapter.accountingObservation),model=object(accounting.modelUsage),capabilities=object(accounting.capabilityUsage);
const policy=object(adapter.observations).modelPolicy;
return{id:adapter.id,status:adapter.status,runtimeBuild:adapter.runtimeBuild??null,capabilities:adapter.capabilities,laneIds:adapter.laneIds,
nativeLimitsDigest:'sha256:'+sha256(canonicalJson(adapter.nativeLimits)),modelPolicyDigest:policy===undefined?null:'sha256:'+sha256(canonicalJson(policy)),
offers:(adapter.offers??[]).map(offer=>({offerId:offer.offerId,offerDigest:offer.offerDigest})),
modelHealthy:healthy(model.healthy),capabilityHealth:Object.fromEntries(adapter.capabilities.map(id=>[id,healthy(object(capabilities[id]).healthy)]))};
});
if(new Set(adapters.map(adapter=>adapter.id)).size!==adapters.length)
throw new CapacityGovernanceError('provider_availability_observation_invalid','Ambiguous adapter inventory cannot become history.',500);
const metadata={providerId:session.providerId,membershipId:session.membershipId,availabilitySessionId:session.id,sequence:session.sequence,status:session.status,
openedAt:session.openedAt,refreshedAt:session.refreshedAt,expiresAt:session.expiresAt,closedAt:session.closedAt,
pressure:session.snapshot.pressure,availableFrom:session.snapshot.availableFrom,availableUntil:session.snapshot.availableUntil,
maxConcurrentWorkers:session.snapshot.maxConcurrentWorkers,availableWorkers:session.snapshot.availableWorkers,reservedWorkers:session.snapshot.reservedWorkers,borrowedWorkers:session.snapshot.borrowedWorkers,
lanes:session.snapshot.lanes,constraintsDigest:'sha256:'+sha256(canonicalJson(session.snapshot.constraints)),adapters};
const action='provider.availability.updated',key=session.sequence+':'+session.status;
await new CapacityAuditRepository(database).recordOnce({teamId:session.teamId,providerId:session.providerId,membershipId:session.membershipId,
actorType:'system',actorId:null,action,resourceType:'provider-availability-session',resourceId:session.id,idempotencyKey:key,metadata,now},session.id+':'+key);
const rows=await database.all('SELECT * FROM capacity_audit_events WHERE team_id=? AND action=? AND resource_id=? AND idempotency_key=?',[session.teamId,action,session.id,key]);
const row=rows[0];let retained:unknown;try{retained=JSON.parse(String(row?.metadata_json));}catch{/* Original malformed bytes remain retained. */}
if(rows.length!==1||!row||row.capacity_provider_id!==session.providerId||row.membership_id!==session.membershipId||row.created_at!==now||!isDeepStrictEqual(retained,metadata))
throw new CapacityGovernanceError('provider_availability_observation_conflict','Availability requires its exact original durable public audit observation.',500);
}
Loading
Loading