## Summary - align verification-start tests with the canonical credential-enabled provider fixture - seed required tenant-permission evidence for provider operation start tests so inventory/compliance assertions exercise the real queued and `scopeBusy` contracts - refresh stale provider-connection and verification-report test baselines to current shared output - add the complete Spec 294 artifacts for the bounded provider/verification stabilization follow-up ## Scope - bounded to `apps/platform/tests`, shared Pest test helpers, and `specs/294-provider-verification-runtime-semantics` - no runtime application code changes under `apps/platform/app` - no schema, route-cutover, framework, or asset changes ## Validation - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Verification/VerificationAuthorizationTest.php tests/Feature/Verification/VerificationStartAfterCompletionTest.php tests/Feature/Verification/VerificationStartDedupeTest.php` - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ProviderConnections/ProviderDispatchGateStartSurfaceTest.php tests/Feature/ProviderConnections/ProviderOperationConcurrencyTest.php` - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ProviderConnections/ProviderConnectionNeutralitySpec238Test.php tests/Feature/Verification/ProviderConnectionHealthCheckWritesReportTest.php` - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ProviderConnections tests/Feature/Verification` - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` ## Notes - browser smoke was not run because the final diff contains no runtime app or UI changes; only tests, shared test helpers, and spec artifacts changed - provider registration remains unchanged in `apps/platform/bootstrap/providers.php` - no new globally searchable resource or destructive action behavior was introduced Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #349
5.9 KiB
5.9 KiB
Research: Provider Verification Runtime Semantics Stabilization
Pinned Failure-Classification Categories
294 uses exactly these spec-local categories:
surface-or-report-baseline-driftfixture-contract-driftprovider-verification-runtime-regressiondedupe-concurrency-contract-driftout-of-scope-existing-debtresolved-or-not-needed
These categories are implementation-tracking vocabulary only. They do not become runtime product state.
Pinned Stabilization Seams
294 stabilizes exactly these seam families:
provider-neutrality-surfaceshared-startable-fixturesverification-start-contractprovider-dispatch-concurrencyverification-report-summary
Decision 1: Classify the targeted failing lane before changing anything
- The package starts with the already confirmed failing command
cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ProviderConnections tests/Feature/Verification. failure-classification.mdrecords every currently failing group before any implementation work begins.- This keeps
294bounded to the confirmed provider/verification lane instead of silently widening into broader suite repair.
Decision 2: Fixture contract drift must be cleared before runtime semantics are widened
- Current repo truth already has a canonical startable verification fixture path:
createUserWithTenant(..., fixtureProfile: 'credential-enabled')or an equivalent helper path that seeds a truthful startable Microsoft provider connection. - Hand-built provider connections that look plausible but miss canonical prerequisites may legitimately block before queue dispatch.
- Therefore, implementation must align startable fixtures first and only treat remaining mismatches as runtime regressions after that alignment.
Decision 3: StartVerification and ProviderOperationStartGate remain the runtime owners
StartVerificationowns provider verification start, dedupe, and new-run-after-completion behavior.ProviderOperationStartGateowns shared provider-operation dedupe versusscopeBusybehavior, stale-queued cleanup, and blocked-start behavior.294should stabilize those owners, not add a new semantics layer around them.
Decision 4: Provider-neutral disclosure stays primary, provider-specific identity detail stays nested
ProviderConnectionSurfaceSummaryand the target-scope descriptor/normalizer already define the neutral summary path.- The current failing neutrality test proves the detail baseline drift lives at that disclosure seam, not in a broader route or panel contract.
- Microsoft tenant identity detail remains allowed as nested provider-owned context, but it should not replace the neutral top-line summary.
Decision 5: Verification report totals must track the current emitted inventory
ProviderConnectionHealthCheckWritesReportTestcurrently fails because the report emits more checks than a stale ceiling expects.VerificationReportSchemavalidates shape, not the feature-local ceiling.- Therefore, the implementation should anchor test expectations to the current emitted inventory and current report writer behavior, not to a stale literal maximum.
Decision 6: Browser proof stays conditional and reused, not expanded
- The primary proof lane is the targeted ProviderConnections/Verification feature suite.
- If implementation changes visible provider-connection disclosure, reuse the existing
tests/Browser/Spec281ProviderConnectionScopeSmokeTest.phponly. Verification-report disclosure remains bounded to feature-lane proof in294. - Do not add a new browser family or a second broad smoke lane under
294.
Rejected Alternatives
Rejected: fold the work back into Spec 293
That would blur the route-cutover stabilization boundary and make the post-cutover handoff ambiguous.
Rejected: reopen Spec 238, Spec 188, Spec 084, or Spec 074
Those packages are historical context. 294 should treat them as context and stabilize only the current remaining failing lane.
Rejected: split provider and verification into separate micro-specs
The same start gate, fixture contract, and report summary seams would be duplicated across two packages.
Rejected: widen to a full-suite or broader provider-boundary repair
That would exceed the user-provided bounded scope and bury the actual remaining seam under unrelated work.
Evidence Anchors
apps/platform/tests/Feature/ProviderConnections/ProviderConnectionNeutralitySpec238Test.phpapps/platform/tests/Feature/ProviderConnections/ProviderDispatchGateStartSurfaceTest.phpapps/platform/tests/Feature/ProviderConnections/ProviderOperationConcurrencyTest.phpapps/platform/tests/Feature/Verification/VerificationAuthorizationTest.phpapps/platform/tests/Feature/Verification/VerificationStartAfterCompletionTest.phpapps/platform/tests/Feature/Verification/VerificationStartDedupeTest.phpapps/platform/tests/Feature/Verification/ProviderConnectionHealthCheckWritesReportTest.phpapps/platform/tests/Pest.phpapps/platform/app/Services/Verification/StartVerification.phpapps/platform/app/Services/Providers/ProviderOperationStartGate.phpapps/platform/app/Support/Providers/TargetScope/ProviderConnectionSurfaceSummary.phpapps/platform/app/Support/Providers/TargetScope/ProviderConnectionTargetScopeNormalizer.phpapps/platform/app/Support/Providers/TargetScope/ProviderConnectionTargetScopeDescriptor.phpapps/platform/app/Services/Providers/MicrosoftProviderHealthCheck.phpapps/platform/app/Support/Verification/VerificationReportSchema.php
Boundary Summary
294is a provider/verification stabilization package, not a route-cutover package.293remains untouched.- Historical Specs
238,188,084, and074remain untouched. - The package keeps the proving lane bounded to the targeted feature folders and one conditional existing browser smoke.