Intake cubing scramble successor surfaces
This commit is contained in:
parent
01d36e43e9
commit
0f88d3b301
6 changed files with 210 additions and 12 deletions
|
|
@ -11,13 +11,14 @@ Boundary:
|
|||
- when later repos are mirrored or their root-license evidence changes, rerun `C:\HyperTwist\scripts\Write-HyperTwistRepoLicenseEvidenceAudit.ps1` in the same pass that updates the legal tracker
|
||||
|
||||
Counts:
|
||||
- total deduped repos scanned: 66
|
||||
- clear repo-local license file or explicit mixed root-license declaration: 59
|
||||
- total deduped repos scanned: 69
|
||||
- clear repo-local license file or explicit mixed root-license declaration: 60
|
||||
- MIT with clear root license file: 33
|
||||
- MIT from README only, no root license file: 1
|
||||
- MIT from repo metadata only, no root license file: 1
|
||||
- no clear repo-local license signal: 5
|
||||
- no-clear bucket where current HyperTwist manifest already carries a legal call: 5
|
||||
- non-MIT license from repo metadata only, no root license file: 1
|
||||
- no clear repo-local license signal: 6
|
||||
- no-clear bucket where current HyperTwist manifest already carries a legal call: 6
|
||||
- package-subpath rows normalized under parent root authority: 11
|
||||
- historical alias rows outside active mirror expectation: 1
|
||||
- unresolved upstream-unavailable, missing, or unrelated non-standalone rows outside the live standalone count: 0
|
||||
|
|
@ -34,10 +35,14 @@ MIT without root license file - README only:
|
|||
MIT without root license file - metadata only:
|
||||
- pmndrs/maath
|
||||
|
||||
Non-MIT license from repo metadata only, no root license file:
|
||||
- cubing/scramble.cubing.net - signal: GPL-3.0-or-later via `package.json`
|
||||
|
||||
No clear repo-local license signal:
|
||||
- alinen/cube - current manifest call: `No explicit license found`
|
||||
- ambisinister/blindsolve - current manifest call: `No explicit license found`
|
||||
- AviKaufman/Rubix-cube-trainer - current manifest call: `All rights reserved`
|
||||
- cubing/mark3 - current manifest call: `No explicit license found`
|
||||
- cubing/qqTimer - current manifest call: `No explicit license found`
|
||||
- poliva/cubedex - current manifest call: `No explicit license found`
|
||||
|
||||
|
|
|
|||
|
|
@ -704,6 +704,8 @@ Current licensing judgment:
|
|||
- `cubing/cubing.js` via `cubing/scramble`
|
||||
- `cubing/scramble.cubing.net`
|
||||
- `cubing/mark3`
|
||||
- when HyperTwist retains those successor repos directly, track them as their
|
||||
own repo rows rather than blurring them back into this alias row
|
||||
- direct donor use is not cleared
|
||||
- keep this row as a historical alias only, not as an active mirror-restoration
|
||||
target
|
||||
|
|
@ -733,6 +735,124 @@ Approved working posture:
|
|||
- do not let it keep the mirror audit in an unresolved state when maintained
|
||||
public scramble sources are already elsewhere in the cubing family
|
||||
|
||||
### `cubing/mark3`
|
||||
|
||||
Decision date:
|
||||
|
||||
- `2026-05-27`
|
||||
|
||||
Current licensing judgment:
|
||||
|
||||
- the repo is now mirrored locally
|
||||
- no explicit repo-root license file is visible at the checked mirror root
|
||||
- the checked root surface currently lacks a standalone `LICENSE`, `COPYING`,
|
||||
or `NOTICE` file
|
||||
- the checked `package.json` does not declare a repo license
|
||||
- treat the row as restrictive custody and `license-missing`
|
||||
- direct donor use is not cleared
|
||||
- retain as a scramble-generation clean-room candidate only
|
||||
|
||||
Source basis:
|
||||
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\README.md`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\package.json`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\src\scramble-generation\index.ts`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\src\fixtures\testCompetitionScramblesSpec.ts`
|
||||
|
||||
Practical obligations:
|
||||
|
||||
- keep the mirror in restrictive custody
|
||||
- do not assume permissive terms from the public repo visibility alone
|
||||
- Model B must not read this mirror
|
||||
- if a later source-backed license basis appears, reopen this row selectively
|
||||
instead of silently flattening it into permissive custody
|
||||
|
||||
Approved working posture:
|
||||
|
||||
- retain as a scramble-generation architecture reference and clean-room
|
||||
candidate only
|
||||
- use it for source inspection, seeded workflow reference, and independently
|
||||
owned reimplementation planning
|
||||
- do not widen from the mirror as a normal permissive donor lane
|
||||
|
||||
### `cubing/scramble.cubing.net`
|
||||
|
||||
Decision date:
|
||||
|
||||
- `2026-05-27`
|
||||
|
||||
Current licensing judgment:
|
||||
|
||||
- the repo is now mirrored locally
|
||||
- no explicit repo-root license file is visible at the checked mirror root
|
||||
- the checked root surface currently lacks a standalone `LICENSE`, `COPYING`,
|
||||
or `NOTICE` file
|
||||
- the checked `package.json` declares `GPL-3.0-or-later`
|
||||
- treat that as repo-local metadata-only license evidence, not as the same tier
|
||||
as a clear root license file
|
||||
- keep the row in restrictive custody and treat it as strong copyleft
|
||||
- direct donor use is not cleared
|
||||
|
||||
Source basis:
|
||||
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\package.json`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\README.md`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\src\scramble.ts`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\src\index.html`
|
||||
|
||||
Practical obligations:
|
||||
|
||||
- keep the mirror in restrictive custody
|
||||
- preserve the distinction between metadata-only license evidence and a clear
|
||||
repo-root license file
|
||||
- Model B must not read this mirror
|
||||
- do not treat the public webapp shell as permission for direct donor reuse
|
||||
|
||||
Approved working posture:
|
||||
|
||||
- retain as a scramble-webapp behavior reference and clean-room candidate only
|
||||
- use it for source inspection, event-selection UX reference, refresh-workflow
|
||||
comparison, and independently owned reimplementation planning
|
||||
- do not widen from the mirror as a normal permissive or direct-integration
|
||||
lane
|
||||
|
||||
### `cubing/scramble-display`
|
||||
|
||||
Decision date:
|
||||
|
||||
- `2026-05-27`
|
||||
|
||||
Current licensing judgment:
|
||||
|
||||
- the repo is now mirrored locally
|
||||
- the checked root `LICENSE.md` resolves to `GPL-3.0-or-later`
|
||||
- keep the row in restrictive custody and treat it as strong copyleft
|
||||
- the repo is scramble-display specific and sits above already tracked cubing.js
|
||||
and twisty.js surfaces
|
||||
- direct donor use is not cleared
|
||||
|
||||
Source basis:
|
||||
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\LICENSE.md`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\README.md`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\src\scramble-display\index.ts`
|
||||
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\src\scramble-display\ScrambleDisplay.ts`
|
||||
|
||||
Practical obligations:
|
||||
|
||||
- keep the mirror in restrictive custody
|
||||
- Model B must not read this mirror
|
||||
- do not treat this wrapper surface as permission to bypass the stricter
|
||||
cubing.js / twisty.js lane boundaries
|
||||
- preserve it as a comparison surface rather than a direct donor-use approval
|
||||
|
||||
Approved working posture:
|
||||
|
||||
- retain as a scramble-visualization comparison surface only
|
||||
- use it for source inspection, display-shell behavior reference, and bounded
|
||||
clean-room planning if a first-party equivalent is ever needed
|
||||
- do not widen from the mirror as a normal permissive donor lane
|
||||
|
||||
### `onionhoney/roux-trainers`
|
||||
|
||||
Decision date:
|
||||
|
|
|
|||
|
|
@ -14,7 +14,10 @@
|
|||
"cs0x7f/cstimer","https://github.com/cs0x7f/cstimer.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cs0x7f\cstimer","C:\Workspaces\HyperTwist\mirrors\restrictive\cs0x7f\cstimer","restrictive","GPL-3.0","strong-copyleft","1","LICENSE","","README.md","GPL-3.0-or-later","clear_repo_license_file","","LICENSE","","","","","Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>","d417cfcc5d7702b54ef8afcb843d87c5dfcfb69e","Manifest/tracker posture is narrower or more contextual than the root license signal."
|
||||
"cubing/alg.js","https://github.com/cubing/alg.js.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\alg.js","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\alg.js","restrictive","GPL-3.0-or-later","strong-copyleft","1","LICENSE.md","","README.md","GPL-3.0-or-later","clear_repo_license_file","","LICENSE.md","","","","","Copyright (C) 2007 Free Software Foundation, Inc.","1c2fd2bf2fb4204f5f2a195ee7bd2a04a9a7784c",""
|
||||
"cubing/cubing.js","https://github.com/cubing/cubing.js.git","C:\Workspaces\HyperTwist\mirrors\permissive\cubing\cubing.js","C:\Workspaces\HyperTwist\mirrors\permissive\cubing\cubing.js","permissive","MPL-2.0 OR GPL-3.0-or-later","dual-weak-copyleft-library-use-ok","2","LICENSE-GPL.md; LICENSE-MPL.md","","README.md","MPL-2.0 OR GPL-3.0-or-later","clear_repo_license_file","","LICENSE-GPL.md; LICENSE-MPL.md","","","","","Copyright (C) 2007 Free Software Foundation, Inc.","06faa3d74083646a93236e69e0f38cb23669ad34",""
|
||||
"cubing/mark3","https://github.com/cubing/mark3.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3","restrictive","No explicit license found","license-missing","0","","","README.md","no_clear_repo_local_license_signal","","","","","","","","","ce956c33c4cace52ecaf6c08edb2327cd040600f","Manifest/tracker carries the current legal call, but no standalone repo-local license signal was captured at the mirror root."
|
||||
"cubing/qqTimer","https://github.com/cubing/qqTimer.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\qqTimer","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\qqTimer","restrictive","No explicit license found","license-missing","0","","","README.md","no_clear_repo_local_license_signal","","","","","","","","","64786743d9e2a4f2bdeb9d1cff1ff97874fbac63","Manifest/tracker carries the current legal call, but no standalone repo-local license signal was captured at the mirror root."
|
||||
"cubing/scramble-display","https://github.com/cubing/scramble-display.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display","restrictive","GPL-3.0-or-later","strong-copyleft","1","LICENSE.md","","README.md","GPL-3.0-or-later","clear_repo_license_file","","LICENSE.md","","","","","Copyright (C) 2007 Free Software Foundation, Inc.","7447d5e31947d4804352a64dc828e7437ba9aa9f",""
|
||||
"cubing/scramble.cubing.net","https://github.com/cubing/scramble.cubing.net.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net","restrictive","GPL-3.0-or-later (package metadata only; no root license file)","strong-copyleft","0","","","README.md","GPL-3.0-or-later","metadata_only","","package.json","","","GPL-3.0-or-later","package.json","","863169dde94090e27fa3bbbb4e6184af3b91e14f",""
|
||||
"cubing/twisty.js","https://github.com/cubing/twisty.js.git","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js","C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js","restrictive","GPL-3.0-or-later","strong-copyleft","1","LICENSE.md","","README.md","GPL-3.0-or-later","clear_repo_license_file","","LICENSE.md","","","","","Copyright (C) 2007 Free Software Foundation, Inc.","58ef9e07e253054ad1fd88f71823f0af76f2852f",""
|
||||
"cutelyaware/magiccube4d","https://github.com/cutelyaware/magiccube4d.git","C:\Workspaces\HyperTwist\mirrors\permissive\cutelyaware\magiccube4d","C:\Workspaces\HyperTwist\mirrors\permissive\cutelyaware\magiccube4d","permissive","Custom permissive attribution-request license","custom-permissive-attribution","1","LICENSE.md","","README.md","other_root_license_file","clear_repo_license_file","","LICENSE.md","","","","","Copyright (c) 2016 Melinda Green and Don Hatch","6761a9dff7fc23cd11c747f473d47e164c0d076f","Manifest/tracker posture is narrower or more contextual than the root license signal."
|
||||
"ecomfe/echarts-gl","https://github.com/ecomfe/echarts-gl.git","C:\Workspaces\HyperTwist\mirrors\permissive\ecomfe\echarts-gl","C:\Workspaces\HyperTwist\mirrors\permissive\ecomfe\echarts-gl","permissive","BSD-3-Clause","permissive","1","LICENSE","","README.md","BSD-family","clear_repo_license_file","","LICENSE","","","","","Copyright (c) 2017, Baidu Inc.","709273a186bed9d0271ac7efd49aafc275275626","Manifest/tracker posture is narrower or more contextual than the root license signal."
|
||||
|
|
|
|||
|
|
|
@ -75,6 +75,10 @@ For each resumed repo pass:
|
|||
public source surfaces already exist elsewhere, convert it into a
|
||||
historical alias row instead of keeping it in the active
|
||||
mirror-restoration queue
|
||||
8ab. if HyperTwist later retains one or more of those maintained successor repos
|
||||
directly, intake each successor as its own manifest row, mirror, legal
|
||||
call, and audit entry instead of treating the historical alias row as a
|
||||
substitute
|
||||
8b. if a manifest row points at a package subpath inside a mirrored monorepo
|
||||
and the parent git root resolves to the same repo URL, normalize that row
|
||||
under the parent root authority in the generated audit instead of leaving it
|
||||
|
|
@ -85,6 +89,10 @@ For each resumed repo pass:
|
|||
10. if the `MIT` call is README-only or metadata-only, capture canonical `MIT`
|
||||
text in the MIT text folder and record the evidence path, source URL, and
|
||||
commit hash explicitly in the audit ledger and third-party notices draft
|
||||
10a. if a non-`MIT` license is present only in repo-local package metadata and
|
||||
no root license file exists, record that as metadata-only evidence in the
|
||||
root tracker and generated audit, but keep it distinct from clear
|
||||
repo-root license-file evidence
|
||||
11. rerun:
|
||||
- `C:\HyperTwist\scripts\Write-HyperTwistRepoLicenseEvidenceAudit.ps1`
|
||||
12. answer status questions by naming:
|
||||
|
|
|
|||
|
|
@ -80,10 +80,17 @@ Required rule:
|
|||
- if a missing standalone repo row is only a historical alias and maintained
|
||||
public source surfaces now live elsewhere, convert it into a historical alias
|
||||
row instead of keeping it in the active mirror-restoration queue
|
||||
- if HyperTwist later retains one or more of those maintained successor repos
|
||||
directly, intake them as explicit repo rows with their own legal calls rather
|
||||
than treating the historical alias row as a substitute for successor custody
|
||||
- if a manifest row points at a package subpath inside a mirrored monorepo and
|
||||
the parent git root resolves to the same repo URL, normalize that row under
|
||||
the parent root authority in the generated audit rather than treating it as a
|
||||
generic exclusion
|
||||
- if a repo has no root license file but does declare a repo-local license in
|
||||
package metadata, record that as metadata-only evidence in the generated
|
||||
audit and root tracker, but do not treat it as equivalent to a clear root
|
||||
license file
|
||||
- if a repo resolves to `MIT` from a repo-root license file, capture the exact
|
||||
repo-root `MIT` text under:
|
||||
- `C:\HyperTwist\docs\generated\license_audit\MIT_LICENSE_TEXTS_2026-05-27\`
|
||||
|
|
|
|||
|
|
@ -171,11 +171,32 @@ function Get-MetadataSignal {
|
|||
continue
|
||||
}
|
||||
|
||||
$text = Get-Content -LiteralPath $fullPath -Raw -ErrorAction SilentlyContinue
|
||||
$text = Get-Content -LiteralPath $fullPath -Raw -Encoding UTF8 -ErrorAction SilentlyContinue
|
||||
if (-not $text) {
|
||||
continue
|
||||
}
|
||||
|
||||
if ($candidate -eq "package.json") {
|
||||
try {
|
||||
$packageJson = $text | ConvertFrom-Json -ErrorAction Stop
|
||||
$packageLicense = [string]$packageJson.license
|
||||
if ($packageLicense) {
|
||||
$packageLicense = $packageLicense.Trim()
|
||||
if ($packageLicense -and
|
||||
$packageLicense -notmatch '^SEE LICENSE IN\b' -and
|
||||
((-not $ManifestLicense) -or
|
||||
($ManifestLicense -match [regex]::Escape($packageLicense)) -or
|
||||
($packageLicense -match [regex]::Escape($ManifestLicense)))) {
|
||||
return @{
|
||||
Signal = $packageLicense
|
||||
Path = $candidate
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
|
||||
if ($ManifestLicense -match 'MIT' -and $text -match '\bMIT\b') {
|
||||
return @{
|
||||
Signal = "MIT"
|
||||
|
|
@ -224,6 +245,16 @@ function Get-SafeFileStem {
|
|||
return $stem.Trim('_')
|
||||
}
|
||||
|
||||
function Write-Utf8NoBomTextFile {
|
||||
param(
|
||||
[string]$Path,
|
||||
[string]$Content
|
||||
)
|
||||
|
||||
$encoding = [System.Text.UTF8Encoding]::new($false)
|
||||
[System.IO.File]::WriteAllText($Path, $Content, $encoding)
|
||||
}
|
||||
|
||||
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||||
$docsRoot = Join-Path $repoRoot "docs"
|
||||
$generatedRoot = Join-Path $docsRoot "generated\\license_audit"
|
||||
|
|
@ -265,7 +296,7 @@ New-Item -ItemType Directory -Path $generatedRoot -Force | Out-Null
|
|||
New-Item -ItemType Directory -Path $mitTextDir -Force | Out-Null
|
||||
Get-ChildItem -LiteralPath $mitTextDir -File -ErrorAction SilentlyContinue | Remove-Item -Force
|
||||
|
||||
$manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
|
||||
$manifest = Get-Content $manifestPath -Raw -Encoding UTF8 | ConvertFrom-Json
|
||||
$entries = New-Object System.Collections.Generic.List[object]
|
||||
|
||||
foreach ($repo in $manifest.repositories) {
|
||||
|
|
@ -360,7 +391,7 @@ foreach ($entry in $entries) {
|
|||
$readmeFiles = Get-RootFilesByPattern -Path $path -Pattern '^README([-.].+)?(\..+)?$'
|
||||
|
||||
$licenseFileRows = foreach ($licenseFile in $licenseFiles) {
|
||||
$text = Get-Content -LiteralPath $licenseFile.FullName -Raw -ErrorAction SilentlyContinue
|
||||
$text = Get-Content -LiteralPath $licenseFile.FullName -Raw -Encoding UTF8 -ErrorAction SilentlyContinue
|
||||
[pscustomobject]@{
|
||||
Name = $licenseFile.Name
|
||||
Signal = Get-LicenseSignalFromText -FileName $licenseFile.Name -Text $text
|
||||
|
|
@ -398,7 +429,7 @@ foreach ($entry in $entries) {
|
|||
}
|
||||
} else {
|
||||
foreach ($readmeFile in $readmeFiles) {
|
||||
$readmeText = Get-Content -LiteralPath $readmeFile.FullName -Raw -ErrorAction SilentlyContinue
|
||||
$readmeText = Get-Content -LiteralPath $readmeFile.FullName -Raw -Encoding UTF8 -ErrorAction SilentlyContinue
|
||||
if ($entry.CurrentManifestLicense -match 'MIT' -and $readmeText -match '\bMIT\b') {
|
||||
$resolvedLicenseSignal = "MIT"
|
||||
$evidenceTier = "readme_only"
|
||||
|
|
@ -478,7 +509,7 @@ foreach ($row in $orderedAuditRows | Where-Object { $_.mit_bucket }) {
|
|||
$licenseCandidates = ($row.license_files -split '; ' | Where-Object { $_ })
|
||||
foreach ($candidate in $licenseCandidates) {
|
||||
$fullPath = Join-Path $row.primary_path $candidate
|
||||
$candidateText = Get-Content -LiteralPath $fullPath -Raw -ErrorAction SilentlyContinue
|
||||
$candidateText = Get-Content -LiteralPath $fullPath -Raw -Encoding UTF8 -ErrorAction SilentlyContinue
|
||||
if ((Get-LicenseSignalFromText -FileName $candidate -Text $candidateText) -eq "MIT") {
|
||||
$mitText = $candidateText
|
||||
break
|
||||
|
|
@ -491,7 +522,7 @@ foreach ($row in $orderedAuditRows | Where-Object { $_.mit_bucket }) {
|
|||
}
|
||||
|
||||
$mitFilePath = Join-Path $mitTextDir ("{0}.LICENSE.txt" -f (Get-SafeFileStem -RepoId $row.repo_id))
|
||||
Set-Content -LiteralPath $mitFilePath -Value $mitText -Encoding UTF8
|
||||
Write-Utf8NoBomTextFile -Path $mitFilePath -Content ($mitText.TrimEnd() + "`r`n`r`n")
|
||||
|
||||
$block = @(
|
||||
"Component: $($row.repo_id)",
|
||||
|
|
@ -520,13 +551,17 @@ foreach ($row in $orderedAuditRows | Where-Object { $_.mit_bucket }) {
|
|||
$mitNoticeBlocks.Add(($block -join "`r`n"))
|
||||
}
|
||||
|
||||
Set-Content -LiteralPath $thirdPartyPath -Value (($mitNoticeBlocks -join "`r`n`r`n").TrimEnd() + "`r`n") -Encoding UTF8
|
||||
Write-Utf8NoBomTextFile -Path $thirdPartyPath -Content (($mitNoticeBlocks -join "`r`n`r`n").TrimEnd() + "`r`n`r`n")
|
||||
|
||||
$scannedCount = @($orderedAuditRows).Count
|
||||
$clearRootCount = @($orderedAuditRows | Where-Object { $_.evidence_tier -eq "clear_repo_license_file" }).Count
|
||||
$mitClearCount = @($orderedAuditRows | Where-Object { $_.mit_bucket -eq "mit_clear_root_license_file" }).Count
|
||||
$mitReadmeCount = @($orderedAuditRows | Where-Object { $_.mit_bucket -eq "mit_readme_only" }).Count
|
||||
$mitMetadataCount = @($orderedAuditRows | Where-Object { $_.mit_bucket -eq "mit_metadata_only" }).Count
|
||||
$nonMitMetadataCount = @($orderedAuditRows | Where-Object {
|
||||
$_.evidence_tier -eq "metadata_only" -and
|
||||
-not $_.mit_bucket
|
||||
}).Count
|
||||
$noClearCount = @($orderedAuditRows | Where-Object { $_.resolved_license_signal -eq "no_clear_repo_local_license_signal" }).Count
|
||||
$noClearWithCanonCount = @($orderedAuditRows | Where-Object {
|
||||
$_.resolved_license_signal -eq "no_clear_repo_local_license_signal" -and
|
||||
|
|
@ -559,6 +594,7 @@ $markdown.Add("- clear repo-local license file or explicit mixed root-license de
|
|||
$markdown.Add("- MIT with clear root license file: $mitClearCount")
|
||||
$markdown.Add("- MIT from README only, no root license file: $mitReadmeCount")
|
||||
$markdown.Add("- MIT from repo metadata only, no root license file: $mitMetadataCount")
|
||||
$markdown.Add("- non-MIT license from repo metadata only, no root license file: $nonMitMetadataCount")
|
||||
$markdown.Add("- no clear repo-local license signal: $noClearCount")
|
||||
$markdown.Add("- no-clear bucket where current HyperTwist manifest already carries a legal call: $noClearWithCanonCount")
|
||||
$markdown.Add("- package-subpath rows normalized under parent root authority: $normalizedSubpathCount")
|
||||
|
|
@ -594,6 +630,25 @@ if ($metadataOnlyRows.Count -eq 0) {
|
|||
}
|
||||
$markdown.Add("")
|
||||
|
||||
$nonMitMetadataRows = @($orderedAuditRows | Where-Object {
|
||||
$_.evidence_tier -eq "metadata_only" -and
|
||||
-not $_.mit_bucket
|
||||
})
|
||||
$markdown.Add("Non-MIT license from repo metadata only, no root license file:")
|
||||
if ($nonMitMetadataRows.Count -eq 0) {
|
||||
$markdown.Add("- none")
|
||||
} else {
|
||||
foreach ($row in $nonMitMetadataRows) {
|
||||
$detail = if ($row.metadata_signal_path) {
|
||||
"$($row.resolved_license_signal) via ``$($row.metadata_signal_path)``"
|
||||
} else {
|
||||
$row.resolved_license_signal
|
||||
}
|
||||
$markdown.Add("- $($row.repo_id) - signal: $detail")
|
||||
}
|
||||
}
|
||||
$markdown.Add("")
|
||||
|
||||
$noClearRows = @($orderedAuditRows | Where-Object { $_.resolved_license_signal -eq "no_clear_repo_local_license_signal" })
|
||||
$markdown.Add("No clear repo-local license signal:")
|
||||
if ($noClearRows.Count -eq 0) {
|
||||
|
|
@ -649,7 +704,7 @@ if ($remainingExcludedRows.Count -eq 0) {
|
|||
}
|
||||
$markdown.Add("")
|
||||
|
||||
Set-Content -LiteralPath $markdownPath -Value (($markdown -join "`r`n").TrimEnd() + "`r`n") -Encoding UTF8
|
||||
Write-Utf8NoBomTextFile -Path $markdownPath -Content (($markdown -join "`r`n").TrimEnd() + "`r`n`r`n")
|
||||
|
||||
Write-Output "Wrote:"
|
||||
Write-Output $csvPath
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue