Repository navigation
[AND.40] PR B: retire Kotlin, KMP and Gradle; publish the MAUI APK as android-VERSION - #25
Merged
Merged
Conversation
…L jobs The Kotlin build and publish jobs and the codeql-kotlin job leave the workflows. The actionlint step moves to a Linux workflow-lint job that verify requires with maui and security. The MAUI jobs and the csharp CodeQL job are unchanged. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The gradle block is replaced by a nuget block over the six explicit Mobile project directories, weekly on Mondays, with maui, contracts and tests groups. The github-actions block is unchanged. The dependency policy now states the NuGet update procedure: an admission record, a locked restore into a clean NUGET_PACKAGES folder, and no auto-merge. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The publish-maui job becomes publish and creates the android-VERSION prerelease titled "Android VERSION (.NET MAUI)". The release tag, the eng tag, the published.py tag and the maui-prepare default candidate follow the same namespace. The PR A android-maui-VERSION releases stay as published history. The release.json track stays maui. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…paths from eng mobile.py keeps version, check, hooks, maui-stage and maui-sign, and its defaults point at the MAUI candidate and release directories. The Kotlin bytecode, stage, verify and sign paths and their helpers are removed, and repository_check no longer runs the Gradle project audit, the Gradle dependency policy or the Kotlin profile history. published.py keeps only the MAUI verification and maui-prepare. device-smoke.py and verify_published_fixture.py are removed with their inventory rows. The Kotlin cases of test_mobile.py are removed. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…sion gates licences.py keeps the .NET project audit (now dotnet_project_audit, run by the repository check) and the MAUI closure audit. The Gradle roster, the lock and verification-metadata checks, the Kotlin closure and distribution verification, and the Gradle declarations are removed. dependency_policy.py and its tests are removed; the NuGet feed, Contracts packages and reviews list in dependency-policy.json now describe the MAUI closure, and the Kotlin reviews stay on disk as history. licence-boundary.json keeps its schema with an empty roster, which maui_identity now requires. The three retired Gradle build files stay exempt from the build-system check until unit 8 deletes them. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
resources.py keeps the shared JSON helpers and the MAUI archive gate. The Kotlin archive verification, the resource profile, the source receipt and the signing payload are removed with their tests. build_identity.py keeps the MAUI report only: the generate, report and verify_report Kotlin paths and the Gradle-lock source of PackageVersion are removed, and PackageVersion is derived from the MAUI NuGet lock. The reviewed Contracts source text that the MAUI ContractSet axis binds moves, byte for byte, to eng/policy/contracts-source.json with its digest pinned in build_identity.py. contracts-build-identity-r3 supersedes r2 for the two changed Contracts-derived files, named to the AND.40 reviewer. The Kotlin artifact record android-packaged-resources-r14 remains tracked and is retired with the notice texts in the next unit. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…y and artifact binding The android-licences inventory and the eight notice texts that only the Kotlin closure used are removed, and their inventory rows go with them. The Kotlin artifact record android-packaged-resources-r14 retires through a new explicit retired-artifact status in check_provenance: it stays tracked and unchanged, it is exempt from notice and profile binding, and only an artifact active in the previous inventory may retire. Two Contracts-derived tools that changed are rebound to successor records (contracts-provenance-port-r3 supersedes r2, reviewed by the AND.40 reviewer). The retained notices, the MAUI notice block and the MAUI closure notices are unchanged. THIRD_PARTY_NOTICES.md keeps only the MAUI block and a current preamble. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The 37 tracked paths of the Kotlin baseline are removed: app/, shared/ and gradle/ (29 files), the root Gradle build, settings, lockfile, properties, wrapper scripts, .java-version and eng/licences.gradle.kts. Their inventory rows go with them; the Gradle wrapper record gradle-wrapper-9-7-1-r2 becomes inactive and stays unchanged as history. The temporary exemption of the three retired Gradle build files is removed, so any build system file other than a reviewed .csproj is refused again. The Kotlin release tags, assets and immutable records are not touched. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…ainst the maui job The JDK pin that .java-version carried is recorded in eng/policy/dotnet-toolchain.json as Temurin 21.0.12 for Android platform tooling only. maui_identity checks that the maui job of ci.yml pins the same version and that .java-version is gone, with a refusal test. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
README, CONTRIBUTING, AGENTS, the development, licence, provenance, build-identity, releasing and toolchain docs describe the .NET MAUI application, the APK-only release under android-VERSION, the NuGet dependency procedure and the retirement of the Kotlin application, its Gradle build, its CodeQL category and its installed-package identity. Dated bootstrap and planning records keep their history with a note. .gitignore drops the Gradle and Kotlin rules and ignores only the MAUI /build/ output; .gitattributes drops the gradlew, *.bat and *.jar rules that no tracked file needs. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…ment receipt android-kotlin-retirement-r1 is a successor record in the existing schema with disposition Drop: its sourcePaths list the 52 tracked paths this pull request removes since the PR base, and its verification and review text name the retired consumers (the Kotlin application and KMP module, the Gradle build and locks, the Gradle licence closure, the Kotlin device smoke and upgrade helpers, the Maven feed, the java-kotlin CodeQL category and bundle, the Kotlin publish job and release namespace, the io.github applicationId, the Kotlin upgrade baseline and the retired artifact record android-packaged-resources-r14). The earlier records stay unchanged as history. The record names the AND.40 reviewer. No MAUI device upgrade proof exists until PRF.12 and AND.13. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…rect the build identity record and the PR checklist
AppVersion no longer reads release/app.json, an untracked file that synthesised the retired io.github.arcforges.mobile subject into build-identity.json, which every APK embeds. The release axis is the allocated release name under the MAUI artifact id com.arcforges.mobile, recorded with no source path. The catalog entry is {kind release, allocation release-name}; any source file on that axis is refused. contracts-build-identity-r3 is corrected to the new target digests and records the correction. The pull request checklist names the current gates instead of the Kotlin checks and Gradle checksum metadata.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…lchain record The maui job installs android and maui-android at the explicit workload set 10.0.401 and checks for "Workload version: 10.0.401" (AND.40 decision 22). The record described an unversioned install and said PR A still adds the channel beside the Gradle baseline, which PR B retires. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…tired review chain The retired eng/dependency_policy.py enforced the publisher binding, the dropped-review set equality and the immutability of retained dependency reviews. Those checks are now in eng/maui_identity.py check_dependency_policy, run by check_maui: - the policy publisher is exact and the publish job of ci.yml carries the android-release environment, refs/heads/main and the push event; - every review file is listed exactly once, in reviews or retiredReviews; - in a git checkout, no review ever added to history is deleted, and no retained review differs from its first addition (a successor review supersedes it). eng/policy/dependency-policy.json lists the 16 Gradle, Kotlin and Compose/Spotless reviews as retiredReviews, an explicit recorded removal from the ordered MAUI chain. docs/dependency-policy.md now describes only enforced checks; the content of a review remains a human review obligation. The three provenance records added by this PR (android-kotlin-retirement-r1, contracts-build-identity-r3, contracts-provenance-port-r3) no longer pre-assert the reviewer's decision: review.decision is pending and reviewedOn is null until the reviewer records its own outcome. check_provenance refuses them until then. The records that already exist at the base commit are unchanged. Negative fixtures cover a wrong publisher, a publish job without its environment, a dropped review, a deleted review and a rewritten review; a successor review is accepted. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…omment and the bug template - The three records this PR adds (android-kotlin-retirement-r1, contracts-build-identity-r3, contracts-provenance-port-r3) name the pre-assigned reviewer w-deku-20261008-rev-and-40, decision approved and reviewedOn 2026-10-09 (brief S25). The rationale of the retirement receipt calls out the bounded retired field of eng/provenance/files.json. - eng/published.py: the comment states that this module verifies android-VERSION tags only. The PR A prerelease android-maui-0.1.0-ci.74.1 was verified by its own publish run (main CI 37937976324) and is kept as immutable history. - .github/ISSUE_TEMPLATE/bug_report.yml asks for the app version and the Android version or OS instead of the JDK. - Three test methods that named the retired Kotlin baseline are renamed for what they assert now; their assertions are unchanged. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Contributor
Author
|
Reviewed 1eabc64 for [AND.40] epoch 1: approved (independent exact-head review; PR B rounds 1 to 4). Reviewer: independent session w-deku-20261008-rev-and-40. Approvals are comments under one GitHub account, so independence is by session only. Material findings, rounds 1 to 3, all resolved at this head:
Round 4 (this head):
Non-blocking findings, carried:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Claim: AND.40 epoch 1 (w-deku-20261009-and-40)
Task record: android lane, task-and-40. Authority:
This is PR B of two (decision 5). PR A (#24, merged as 43ecb25) published the MAUI prerelease
android-maui-0.1.0-ci.74.1(main CI 37937976324). That release stays as immutable history.What this changes (unit 6)
workflow-lintjob, andverifyrequires maui, security and workflow-lint. The MAUI publish is nowpublish, with tagandroid-VERSIONand title "Android VERSION (.NET MAUI)". Secret handling, theandroid-releaseenvironment and the signing steps are unchanged.app/**), the KMPshared/**module, the Gradle build, wrapper and settings,.java-versionandeng/licences.gradle.ktsare deleted;eng, and the Gradle licence closure and dependency admission.eng/maui_identity.py check_dependency_policycovers the exact publisher binding, the publish-job conditions, review-set equality (reviewsplusretiredReviews) and git-history immutability of retained reviews, with negative tests.android-kotlin-retirement-r1: its sourcePaths are exactly the 52 deleted paths, andandroid-packaged-resources-r14is retired with a boundedretiredinventory field;contracts-build-identity-r3: AppVersion is now the allocated release name undercom.arcforges.mobile, with no synthetic source;contracts-provenance-port-r3;com.arcforges.mobile), the PR checklist and the bug template.Validation
Local B gate at
1eabc64, run by the independent reviewer through the workstation build slot: B GATES PASSED.Not run locally
The hosted-only steps: Linux linux-evidence and maui-stage, codeql-csharp, and Verify at this head.
Carried (S26 and review notes)
workloadSetreview field form.🤖 Generated with Claude Code