Compare commits

...
5 Commits
Author SHA1 Message Date
koftwentytwo-standards-releases[bot] 083d90326a chore(main): release 1.1.2 (#46)
Release proposal generated from reviewed changes on main. Review the
version, changes, and validation before merging.
---


## 1.1.2 (2026-10-13)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

## What's Changed
### Changes
* fix(releases): scope bootstrap parameters under Actions pwsh by
@KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/45


**Full Changelog**:
https://github.com/KofTwentyTwo/standards/compare/v1.1.1...v1.1.2

---
Generated by [Release
Please](https://github.com/googleapis/release-please) using this
repository's release configuration.

Co-authored-by: koftwentytwo-standards-releases[bot] <340613191+koftwentytwo-standards-releases[bot]@users.noreply.github.com>
2026-10-13 06:10:59 -05:00
james.maesandCodex GPT-6 261a0055ae fix(releases): scope bootstrap parameters under Actions pwsh (#45)
Both1.0.1 production runs reached the fixed builder after full
acceptance. The inline dependency bootstrap failed with `param is not
recognized` because GitHub's default pwsh shell inserts
`$ErrorActionPreference = 'stop'` before the run body. The previous
standalone-script test did not model that wrapper; this was my
implementation error.

Invoke the existing parameterized bootstrap inside a script block and
pass its arguments through. Preserve every package
URL/version/hash/signature check, destination guard, official action
input and Azure trust scope. Update tests to execute the actual run body
after GitHub's preamble.

Validation: added the preamble to the existing real-body test first and
reproduced all five bootstrap cases failing with the exact hosted param
error in2.26sec; after the fix40 signing tests pass with zero skips. The
actual corrected wrapped body also downloads/verifies Microsoft's real
pinned package and starts its CLI. Configured script analysis,
actionlint, zizmor medium gate and diff checks pass. No production
signing/publication success claimed.

Refs #43 and KofTwentyTwo/MarkdownViewr.Windows#33. Substantial AI
assistance: Codex GPT-6. Required genuine maintainer review before
merge; app release authorization already exists.

Signed-off-by: James Maes <james@kof22.com>
Co-authored-by: Codex GPT-6 <noreply@openai.com>
2026-10-13 06:08:28 -05:00
koftwentytwo-standards-releases[bot] 96cbdf208a chore(main): release 1.1.1 (#42)
Release proposal generated from reviewed changes on main. Review the
version, changes, and validation before merging.
---


## 1.1.1 (2026-10-12)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

## What's Changed
### Changes
* docs(inventory): register MarkdownViewr and the Windows starter by
@KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/36
* fix(releases): bootstrap verified Artifact Signing dependency by
@KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/44


**Full Changelog**:
https://github.com/KofTwentyTwo/standards/compare/v1.1.0...v1.1.1

---
Generated by [Release
Please](https://github.com/googleapis/release-please) using this
repository's release configuration.

Co-authored-by: koftwentytwo-standards-releases[bot] <340613191+koftwentytwo-standards-releases[bot]@users.noreply.github.com>
2026-10-12 18:24:28 -05:00
james.maesandCodex GPT-6 b3e4b4989c fix(releases): bootstrap verified Artifact Signing dependency (#44)
The MarkdownViewr dev release reaches Azure OIDC successfully but the
official Artifact Signing action fails bootstrapping its pinned Sign
CLI: `--add-source` is incompatible with the caller's NuGet package
source mapping.

Prestage the exact action dependency from nuget.org with a fixed SHA256
and `dotnet nuget verify --all`. The official action then finds the
genuine package in its normal dependency directory. Caller NuGet policy,
OIDC trust, signing inputs, ownership catalog and final
signature/distributed-byte gates stay intact. Existing dependency
directories are preserved and rejected rather than replaced.

Fixes #43.

Validation: reproduced the hosted error locally; executed the actual new
workflow step with Microsoft's real signed package and launched its CLI;
all 40 signing regression tests pass (zero skips); full configured
PowerShell analysis, actionlint and zizmor pass. Five added tests cover
valid staging, changed download, invalid signature, existing directory
and missing executable. No production signing or publication claimed
yet.

Substantial AI assistance: implemented with Codex GPT-6. Maintainer
review required by K22-AI-01 before merge.

Signed-off-by: James Maes <james@kof22.com>
Co-authored-by: Codex GPT-6 <noreply@openai.com>
2026-10-12 18:22:02 -05:00
james.maesandCodex 089a94ac3c docs: register MarkdownViewr and Windows starter as Products
MarkdownViewr.Windows and windows-app-template are public Windows
products but are absent from the required repository inventory. Add both
as Product tier, with adoption-in-progress status and their actual
purpose.

This resolves the missing inventory proposal for K22-REPO-42 without
asserting conformance, signed release readiness or completed maintainer
review. Existing people, access, repository rows and policies remain
unchanged. Inventory acceptance requires this PR to be reviewed and
merged.

Validation: markdownlint-cli2 v0.23.3 reports zero issues for
MAINTAINERS.md; git diff --check passes; commit is signed (G) and DCO
signed off. The new links point to the existing public repositories.
Required hosted documentation/conformance checks and maintainer review
remain pending.

Related release tracking:
https://github.com/KofTwentyTwo/MarkdownViewr.Windows/issues/10. Shared
defaults: AppKit PR#29 and windows-app-template PR#4. Substantial AI
assistance: Codex (GPT-6).

Signed-off-by: James Maes <james@kof22.com>
Co-authored-by: Codex (GPT-6) <noreply@openai.com>
2026-10-12 11:59:29 -05:00
6 changed files with 129 additions and 2 deletions

No files matched your search

+31
View File
@@ -366,6 +366,37 @@ jobs:
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
# The pinned official action installs this tool with --add-source, which
# conflicts with NuGet package source mapping. Stage its verified package
# in the action's own dependency directory without changing caller policy.
- name: Prepare pinned Artifact Signing CLI dependency
if: inputs.sign
shell: pwsh
run: |
& {
param(
[string]$PackageDirectory = $env:RUNNER_TEMP,
[string]$InstallRoot = $env:LOCALAPPDATA
)
$ErrorActionPreference = 'Stop'
$version = '0.9.1-beta.26227.3'
$package = Join-Path $PackageDirectory "sign.$version.nupkg"
$destination = Join-Path $InstallRoot "ArtifactSigning/sign/sign.$version"
if (Test-Path -LiteralPath $destination) { throw 'Artifact Signing CLI directory already exists; use a fresh release runner.' }
Invoke-WebRequest -Uri "https://api.nuget.org/v3-flatcontainer/sign/$version/sign.$version.nupkg" -OutFile $package
if ((Get-FileHash -LiteralPath $package -Algorithm SHA256).Hash -ne '34FD0D4AEABDBC363A48883881865B4DD65E6C11BA916028082FA23F3E1B1BA1')
{
throw 'Artifact Signing CLI package checksum mismatch.'
}
dotnet nuget verify $package --all
if ($LASTEXITCODE -ne 0) { throw 'Artifact Signing CLI NuGet signature verification failed.' }
[IO.Compression.ZipFile]::ExtractToDirectory($package, $destination)
if (-not (Test-Path -LiteralPath (Join-Path $destination 'tools/net8.0/any/sign.dll') -PathType Leaf))
{
throw 'Artifact Signing CLI package is missing its executable.'
}
} @args
# Signs the app's own executables and DLLs (and the CLI) before packing, so the
# binaries inside the installer, the portable zip, and the update packages are
# all signed (K22-REL-05).
+1 -1
View File
@@ -1 +1 @@
{".":"1.1.0"}
{".":"1.1.2"}
+23
View File
@@ -3,6 +3,29 @@
<!-- Generated by Release Please and GitHub; permit native spacing, links and repeated categories. -->
<!-- markdownlint-disable MD012 MD022 MD024 MD032 MD034 -->
## 1.1.2 (2026-10-13)
<!-- Release notes generated using configuration in .github/release.yml at main -->
## What's Changed
### Changes
* fix(releases): scope bootstrap parameters under Actions pwsh by @KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/45
**Full Changelog**: https://github.com/KofTwentyTwo/standards/compare/v1.1.1...v1.1.2
## 1.1.1 (2026-10-12)
<!-- Release notes generated using configuration in .github/release.yml at main -->
## What's Changed
### Changes
* docs(inventory): register MarkdownViewr and the Windows starter by @KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/36
* fix(releases): bootstrap verified Artifact Signing dependency by @KofTwentyTwo in https://github.com/KofTwentyTwo/standards/pull/44
**Full Changelog**: https://github.com/KofTwentyTwo/standards/compare/v1.1.0...v1.1.1
## 1.1.0 (2026-10-12)
<!-- Release notes generated using configuration in .github/release.yml at main -->
+2
View File
@@ -24,6 +24,8 @@ conformance version in its README once it passes the conformance checker.
| --- | --- | --- | --- |
| [standards](https://github.com/KofTwentyTwo/standards) | These policies, standards, configs, and reusable workflows | Product | Not yet: rulesets and CI being added |
| [AppKit](https://github.com/KofTwentyTwo/AppKit) | Shared foundation packages for Windows desktop apps | Product | Adoption in progress |
| [MarkdownViewr.Windows](https://github.com/KofTwentyTwo/MarkdownViewr.Windows) | Windows Markdown reader based on Darin Kelkhoff's macOS markdownViewr and AppKit | Product | Adoption in progress: release acceptance, signing and maintainer review pending |
| [windows-app-template](https://github.com/KofTwentyTwo/windows-app-template) | Reusable AppKit Windows app starter with optional CLI and stable/dev release workflows | Product | Adoption in progress: shared defaults and release controls in review |
| [gclo](https://github.com/KofTwentyTwo/gclo) | Clone and update every repository of a GitHub organization (Windows app and CLI) | Product | Adoption in progress: standards gates, governance files, and the Kingsrook layout are in review (gclo #62); settings and exceptions pending |
### Awaiting classification
+71
View File
@@ -14,6 +14,14 @@ BeforeAll `
if($start -lt 0 -or $end -ge $lines.Count) { throw 'Cannot locate the actual Velopack signing wrapper.' }
$script:Wrapper = Join-Path $TestDrive 'sign-one.ps1'
[IO.File]::WriteAllLines($script:Wrapper, @($lines[($start + 1)..($end - 1)] | ForEach-Object { $_.Substring(10) }))
$dependencyStart = [Array]::IndexOf($lines, ' - name: Prepare pinned Artifact Signing CLI dependency')
if($dependencyStart -lt 0) { throw 'Cannot locate the actual signing dependency bootstrap.' }
$dependencyStart += 4
$dependencyEnd = $dependencyStart
while($dependencyEnd -lt $lines.Count -and $lines[$dependencyEnd].StartsWith(' ')) { $dependencyEnd++ }
$script:Bootstrap = Join-Path $TestDrive 'sign-dependency.ps1'
# GitHub's default pwsh shell prepends this statement to every inline run body.
[IO.File]::WriteAllLines($script:Bootstrap, @('$ErrorActionPreference = "stop"') + @($lines[$dependencyStart..($dependencyEnd - 1)] | ForEach-Object { $_.Substring(10) }))
$script:OldTool = $env:K22_VPK_SIGN_TOOL
$env:K22_VPK_SIGN_TOOL = 'Invoke-WrapperTool'
@@ -31,6 +39,69 @@ BeforeAll `
}
}
Describe 'The actual Artifact Signing dependency bootstrap' `
{
BeforeEach `
{
$script:InstallRoot = Join-Path $TestDrive ([guid]::NewGuid().ToString('N'))
$script:PackageDirectory = Join-Path $script:InstallRoot 'downloads'
[void][IO.Directory]::CreateDirectory($script:PackageDirectory)
$script:Destination = Join-Path $script:InstallRoot 'ArtifactSigning/sign/sign.0.9.1-beta.26227.3'
Mock Invoke-WebRequest `
{
$fixture = Join-Path (Split-Path -Parent $OutFile) 'fixture'
[void][IO.Directory]::CreateDirectory((Join-Path $fixture 'tools/net8.0/any'))
[IO.File]::WriteAllText((Join-Path $fixture 'tools/net8.0/any/sign.dll'), 'fixture')
[IO.Compression.ZipFile]::CreateFromDirectory($fixture, $OutFile)
}
Mock Get-FileHash { [pscustomobject]@{ Hash = '34FD0D4AEABDBC363A48883881865B4DD65E6C11BA916028082FA23F3E1B1BA1' } }
Mock dotnet { $global:LASTEXITCODE = 0 }
}
It 'stages the verified tool where the official action finds it' `
{
& $script:Bootstrap -InstallRoot $script:InstallRoot -PackageDirectory $script:PackageDirectory
Get-Content -LiteralPath (Join-Path $script:Destination 'tools/net8.0/any/sign.dll') | Should -Be 'fixture'
Should -Invoke dotnet -Exactly 1
}
It 'rejects a changed download before verification or extraction' `
{
Mock Get-FileHash { [pscustomobject]@{ Hash = 'bad' } }
{ & $script:Bootstrap -InstallRoot $script:InstallRoot -PackageDirectory $script:PackageDirectory } | Should -Throw '*checksum mismatch*'
Test-Path -LiteralPath $script:Destination | Should -BeFalse
Should -Invoke dotnet -Exactly 0
}
It 'rejects an invalid NuGet signature before extraction' `
{
Mock dotnet { $global:LASTEXITCODE = 1 }
{ & $script:Bootstrap -InstallRoot $script:InstallRoot -PackageDirectory $script:PackageDirectory } | Should -Throw '*signature verification failed*'
Test-Path -LiteralPath $script:Destination | Should -BeFalse
}
It 'preserves a preexisting dependency directory' `
{
[void][IO.Directory]::CreateDirectory($script:Destination)
$marker = Join-Path $script:Destination 'marker.txt'
[IO.File]::WriteAllText($marker, 'preserve')
{ & $script:Bootstrap -InstallRoot $script:InstallRoot -PackageDirectory $script:PackageDirectory } | Should -Throw '*already exists*'
Get-Content -LiteralPath $marker | Should -Be 'preserve'
Should -Invoke Invoke-WebRequest -Exactly 0
}
It 'rejects a package without the expected executable' `
{
Mock Invoke-WebRequest `
{
$emptyFixture = Join-Path (Split-Path -Parent $OutFile) 'empty'
[void][IO.Directory]::CreateDirectory($emptyFixture)
[IO.Compression.ZipFile]::CreateFromDirectory($emptyFixture, $OutFile)
}
{ & $script:Bootstrap -InstallRoot $script:InstallRoot -PackageDirectory $script:PackageDirectory } | Should -Throw '*missing its executable*'
}
}
AfterAll `
{
$env:K22_VPK_SIGN_TOOL = $script:OldTool
+1 -1
View File
@@ -1 +1 @@
1.1.0
1.1.2