Skip to content

fix(tooling): audit public contracts from current SDK-owned inputs #41

Closed

Description

@FLwolfy

Verified on branch / awaiting merge

Production implementation: dd5979c613b0fe8ebd9f7026f25001ceee9f8cee. Delivered head: dbae93e8f211d45a69cdffdb6afa3a33a0af0fa5; the subsequent diff contains documentation/acceptance evidence only. Exact-head CI: Engine CI and NuGet dependency graph passed; all six checks on this exact head are successful. All applicable acceptance conditions for this issue are verified; unavailable physical/manual device checks are explicitly scoped, not reported passed.

Owner: Tooling consumes current SDK-evaluated source/compiled output. Implementation commits: 14338d61, e053be5b, a38437f7.

Evidence: complete report, exact-head delivery attachment, portable test-case/raw-measurement/requirement indexes linked by the report. Specific proof: Contracts: public API graph default/independent/stale output cases; Final real complete architecture/XML/Wiki validation.

Commands: official tests/Invoke-EditorUiAcceptance.ps1 Contracts/Workflows/Visual/Lifecycle/Products with SDK-selected independent outputs; complete source/entry preparation; formal InnoEngine.Build scripts --ide for the three companions; tests/Invoke-WikiChecks.ps1; controlled public performance fixtures where applicable. The report records original command owners, TRX/binlogs, negative tests, failures, skips, input hashes and device limits.

Profiles overlap; do not sum their pass counts into a distinct-test claim. Windows-only sharing fixtures and Unix-only filesystem fixtures are scoped to the executing host. Real native contexts/simulated display metrics and hidden product feature journeys are not a claim of physical display, OS IME or manual Mac testing. No BGCS/vendor/package/generated-binding modification, parallel Core system, test hook, IVT or private reflection was used.

Keep this issue Open. PR #26 includes an individual Fixes #41 and will close it only when the user merges to master. No automatic merge or premature master-resolution claim.

Original defect, ownership and accepted work

The following baseline observations describe the issue as opened. The verification above supersedes intermediate pending checkpoints; original failed/negative logs remain preserved. Acceptance checkboxes are checked only after the exact delivery-head verification completes.

Parent and plan mapping

Parent #27; E12 (#39), with the SDK/input ownership acceptance in #16 and #19. This is required validation work discovered before changing the validator.

Confirmed facts

PublicApiBoundaryValidator currently constructs bin/<configuration>/<TFM>/<assembly>.dll paths from project XML. An SDK build using a separate ArtifactsPath therefore leaves it auditing a different, stale default output. During E03 validation it classified the current public AssetBrowserStyle(EditorStyleMetrics) constructor dependency as implementation-only because the inspected default assembly predates that constructor. The current source and D: SDK-owned build have the public dependency.

DocumentationSourceModels also has a default-output path path when SDK reference capture is not selected. The existing SDK-backed WikiProjectReferences path does not currently accept the caller's artifact owner. These are confirmed path/identity weaknesses; no BGCS defect is involved.

Owner and dependency direction

Inno.Tooling.Architecture owns public-contract and documentation analysis. Reuse the existing public SDK evaluation and source-compilation machinery. Do not introduce a second resolver, copy stale assemblies into expected paths, weaken public-reference rules, or add platform-specific validation branches.

Implementation scope

  • Resolve source, compilation options, framework/package/project references and actual output paths from one explicitly selected SDK/configuration/artifact owner.
  • Make public boundary validation inspect the current candidate source/contract, never silently choose a different default output.
  • Reuse the same input authority for API documentation, public dependency classification and project graph validation.
  • Remove replaced path guesses and duplicated resolution logic; retain explicit foreign-product limits and diagnostics.
  • If an explicit artifact-owner option is needed for validation, map it once to the SDK inputs and document it; do not require reference-pack paths or platform lists.
  • Preserve read-only/design-time behavior: no native preparation during inspection.

Failure, cancellation and lifetime

Missing current inputs, unresolved public signatures, invalid owners and SDK failures must fail with actionable diagnostics. Cancellation must drain owned SDK processes. Do not repair inputs, select stale defaults, publish partial reports as successful, or retain collectible extension objects.

Acceptance

  • Default-output and independent-ArtifactsPath candidate builds produce identical public dependency classifications.
  • A stale or missing default bin cannot override an independent current owner.
  • Adding/removing a public constructor or member changes the classification from actual current source.
  • A real public dependency requires a public reference; an implementation dependency still requires PrivateAssets=compile.
  • Foreign-product and missing-reference cases remain accurately diagnosed without requiring an unavailable native platform SDK.
  • Architecture, XML, Wiki and relevant public SDK fixtures pass through the standard entry.
  • Record commit, commands, actual inputs and evidence. Keep this issue open until verification and merge through PR refactor(editor): unify UI ownership and editing workflows #26.

Evidence: D:/InnoEngine-Verification/editor-ui-closure-2026-10-27/e03-architecture-debug.log (28 violations: 27 new XML layout violations being corrected separately, plus this stale-output classification).

Activity

  1. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    Final artifact-owner verification found that the repository-wide self-test still invokes the SDK-less preview, which can see stale default-bin assemblies while the actual candidate is built under ArtifactsPath. The formal SDK gate already passed for 241/241 current projects; this does not make the preview result authoritative. Replacing that complete-graph self-test with an explicit SDK/actual build-owner request rather than deleting its assertions or weakening API checks. A separate confirmed defect is fixed by lazy framework-reference resolution: graph-only CLI fixtures no longer execute reference targets or require an unrelated Foundation project. All 152 focused architecture cases except the old preview-based self-test now pass. Full replacement and final CI remain pending.

  2. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    Committed correction: 14338d6. The complete architecture suite passed all 153 cases (corrections/Inno.Tooling.Architecture.Tests/formal-complete.trx, 6m13s). The full repository self-test now explicitly uses the selected SDK and its assembly-recorded actual ArtifactsPath. Graph-only inspection no longer eagerly executes framework reference targets. Small fixtures retain their two-minute bound; the new complete SDK graph request has a separate fifteen-minute budget. Per-reference-query and collectible-unload barriers were not weakened. The SDK-less preview remains a limited inspection mode and is not used as final SDK ownership proof.

  3. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    Commit 14338d61 additionally fixes graph-only validation eagerly resolving framework references and creating outputs. The complete repository regression now selects the actual SDK and build-recorded ArtifactsPath. All 153 architecture/tooling tests passed (corrections/Inno.Tooling.Architecture.Tests/formal-complete.trx, 6m13s), including current-source public boundary inspection. Graph-only fixtures remain read-only. The complete SDK regression has an explicit 15-minute operation budget; individual SDK evaluation and collectible unload timeouts are unchanged. The optional SDK-less preview remains a limited heuristic preview; it is not used as final candidate proof. Final combined gates and Wiki are being rerun. Keep Open.

  4. FLwolfy commented on Oct 28, 2026

    @FLwolfy
    MemberAuthor

    SDK output-owner correction

    Commit e053be5 records the SDK-evaluated artifacts owner as test assembly metadata after the SDK computes its output paths. Both repository architecture and Wiki tests consume the shared test-source contract. Six public SDK/metadata tests pass, including default output, SDK-default artifact output, explicit independent output, and invalid/duplicate metadata rejection.

    The completed broad Contracts run at af6eac3 remains recorded as failed: the Wiki test omitted the independent artifacts owner, and a Task fixture guessed the old Foundation output. The actual production Foundation bootstrap correctly has its own SDK scope. The fixture now consumes the real MSBuild TargetOutputs; the targeted official registration test passes and still asserts distinct private publishers, no replayed Copy tasks, and released Foundation output handles.

    With the correct Wiki owner, a fresh 241-project inventory reported only one new source XML omission (Dispose), now corrected in a4d975a. Final Wiki/architecture and product/CI acceptance are being rerun; this comment does not replace those gates or mark the entire Editor plan complete.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions