You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit d5cc0bc
Browse filesBrowse the repository at this point in the historyBrowse files
-`GlobalConstants.ReadMetadata` must never adopt an implausible tag as this build's version. The GitInfo generator embeds whatever `git describe` printed, and a tagless checkout makes it embed the tool's stderr (`fatal: No names found, cannot describe anything.`), which then leaks into the crash report, `producer_version`, the Sentry release, and the update gate — `producer_version` would no longer be version-shaped and the import gate could reject this build's own archives. `LooksLikeVersionTag` therefore requires a numeric `MAJOR.MINOR` and otherwise falls back to `v3.0.0-dev`, whose major must stay in step with `SecRandom.PluginSdk/PluginApiVersions.Current`; the same fallback replaces the old `v0.0.0.0` placeholder, because major `0` disagrees with every archive this build writes. The commit hash is still kept.
311
311
-`OverlayAssetLoader` is the desktop's only asset path: the desktop head sets `SecRandomBundleAssetsInAssembly=false` (`SecRandom.Desktop.csproj`), so `Assets` ships as loose files and is deliberately not embedded — a lookup that misses has no fallback and surfaces as `Could not create glyphtypeface` at the first measured glyph. Its URI matching must therefore stay **case-insensitive**: the authority casing that reaches this loader is not guaranteed to preserve the assembly name's `SecRandom`, and a case-sensitive comparison turns that into a total failure. Observed: an installed layout delivered a lowercase `avares://secrandom/...` while a portable build of the same commit worked, because the portable path happened to keep the original casing — the same defect, exposed on one path only. When a startup failure looks like a font/image error, check this loader first, and keep the `Assets`-root diagnostic in `Program.BindAssetLoader`.
312
312
- In PowerShell, a hash-table value holding a **single-element array of arrays** collapses: `@{ pairs = @( @('old','new') ) }` makes `$job.pairs` the inner pair itself, so `foreach ($pair in $job.pairs)` iterates the two **strings** and `$pair[0]`/`$pair[1]` become their first characters — an "old→new" replacement silently degrades into "O→n" character substitution and rewrites the whole file. When scripting bulk text replacements, keep at least two pairs per group, use the comma operator to force an array, or prefer an exact-match editor. Always diff-stat the result: a multi-line source file showing every line changed is a corrupted rewrite, not an edit.
313
+
- A fork parameter added to a type's constructor silently breaks upstream's **new** test files. The merge produces no conflict marker for a file only one side touched, and no release build job compiles the test projects, so the first CI run can be green on the app build while six call sites are already broken. After changing any constructor signature, grep every construction site in the repository and verify the argument count by hand — the conflict list is not evidence of completeness.
314
+
- A `public` member that references a type upstream made `internal` fails with CS0051 (`Inconsistent accessibility`), and the error appears only in the assembly that owns the public type. The fix that stays inside fork-owned code is to narrow the fork type (`internal sealed class`) so it matches its siblings, rather than widening upstream's type.
315
+
-**Written summaries meant for the maintainer belong in Chinese; internal reasoning stays English.** This covers session summaries, handover notes, and review lists: the maintainer uses the language to tell a report apart from the agent's own thinking. It does **not** relax the script rule below — a `.ps1`/shell body stays ASCII, so carry Chinese as data read from a UTF-8 file rather than as a literal in the script.
313
316
- Every `Get Latest Tag` / `Get Version` step in `build_publish.yml` must tolerate a repository with no tags: a fork starts tagless, `git describe --tags --abbrev=0` then exits non-zero, and the runner's native-command error preference turns that into a terminating error that fails the whole build. Resolve the tag behind `try`/`catch` (or `|| true` in bash), fall back to `git tag --sort=-v:refname`, and only then to a dev version whose major is parsed from `PluginApiVersions.Current` (`v<major>.0.0-dev` / `<major>.0.0-dev`) with a `::warning::`. The fallback major must come from that file rather than a hardcoded `0.0.0-dev`: `build_pluginsdk` enforces that the packed major equals the Plugin SDK API major, and the app/API majors must stay in step. Tag-push and manual-dispatch releases still take precedence over the fallback.
314
317
- The desktop `Publish Desktop` and UIAccess publish steps must run `dotnet publish` with `-p:BuildInParallel=false -p:UseSharedCompilation=false` and must check `$LASTEXITCODE` after every publish. The two full/light publishes share the same `obj/` tree, so parallel builds and the shared `VBCSCompiler` race intermittently with `CS2012` file-lock failures on Windows; a masked (unchecked) failure leaves `publish/full` incomplete and breaks downstream portable/installer packaging with confusing "file does not exist" errors. Keep the `Verify bundled audio runtime` step enabled so an incomplete self-contained publish is caught at its source instead of silently producing broken artifacts.
315
318
- The mobile `Build Android APK` and `Publish unsigned iOS arm64 IPA` steps must also pass `-p:BuildInParallel=false -p:UseSharedCompilation=false` (and the iOS step runs with `set -euo pipefail`). The shared `SecRandom.Core`/app graph is otherwise scheduled twice in parallel within a single build, racing on `obj/Release/net10.0` resource outputs with `MSB3554`/`CS1566`/`MSB4018` "being used by another process" failures on any platform. The iOS publish is the release critical path: the Mono/LLVM AOT step is ~95% of that job, and the SDK parallelizes it only to `Environment.ProcessorCount / 2`, which is integer 1 on the 3 vCPU macOS runner; the step therefore passes `-p:AotCompileMaxDegreeOfParallelism=2` to keep two cores busy inside the runner's 7 GB. `MtouchUseLlvm` stays at the SDK's Release default (`true`) — clearing it would trade runtime code quality for build time.
0 commit comments