Skip to content

licensing: dual SPDX header (MPL-2.0 + CC-BY-SA-4.0) as the standard#58

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/confident-albattani-okm8i5
Jun 21, 2026
Merged

licensing: dual SPDX header (MPL-2.0 + CC-BY-SA-4.0) as the standard#58
hyperpolymath merged 2 commits into
mainfrom
claude/confident-albattani-okm8i5

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

Owner ruling on the two previously-flagged licence items: every source file carries both SPDX lines — MPL-2.0 and CC-BY-SA-4.0 — with the root LICENSE (MPL-2.0) remaining the single licence GitHub detects for community health.

Dual header applied to the 7 flagged files (manual, per-file, owner-directed)

  • academic/formal-verification/{agda/Phronesis.agda, agda/PhronesisEcho.agda, coq/Phronesis.v, lean4/Phronesis.lean, lean4/lakefile.lean} — were Apache-2.0 OR MIT
  • .github/workflows/{scorecard.yml, secret-scanner.yml} — were PMPL-1.0 (drift; phronesis isn't a Palimpsest carve-out repo)

Policy updated to match

  • LICENSING.adoc — the standard is now two SPDX lines per file; documents the GitHub marker, exclusions, and the migration status.
  • .machine_readable/licensing-policy.toml — machine twin updated (and itself dual-headed).

Migration status

These 7 files are done. The remaining single-SPDX estate files migrate to the dual header incrementally — a mixed single/dual state is owner-sanctioned during the transition (tracked as a follow-up). No bulk SPDX sweep was performed, per the estate guardrail.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AqMopxUsgu78rg5fhWBUkk


Generated by Claude Code

Owner ruling: every source file carries BOTH SPDX-License-Identifier lines —
MPL-2.0 and CC-BY-SA-4.0 — with the root LICENSE (MPL-2.0) remaining the single
licence GitHub detects for the community-health profile.

Applied the dual header to the 7 previously-flagged files (manual, per-file,
owner-directed — not a bulk sweep):
- academic/formal-verification/{agda/*.agda, coq/Phronesis.v, lean4/*.lean}
  (were `Apache-2.0 OR MIT`)
- .github/workflows/{scorecard.yml, secret-scanner.yml} (were `PMPL-1.0` drift;
  Phronesis is not a Palimpsest carve-out repo)

Updated the policy to match:
- LICENSING.adoc: the standard is now two SPDX lines per file; documents the
  GitHub marker, exclusion cases, and the migration status (these 7 done; the
  remaining single-SPDX files migrate incrementally — mixed state is sanctioned
  during transition).
- .machine_readable/licensing-policy.toml: machine twin updated likewise (and
  itself now dual-headed).

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AqMopxUsgu78rg5fhWBUkk
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 6 issues detected

Severity Count
🔴 Critical 0
🟠 High 3
🟡 Medium 3
View findings
[
  {
    "reason": "binary_to_term without :safe option -- deserialization attack (1 occurrences, CWE-502)",
    "type": "elixir_send_unsanitised",
    "file": "/home/runner/work/phronesis/phronesis/lib/phronesis/compiler.ex",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "Nominal-only SAST in phronesis: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
    "type": "StaticAnalysis",
    "file": "/home/runner/work/phronesis/phronesis",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Add CodeQL or equivalent SAST workflow.",
    "scorecard_check": "SAST"
  },
  {
    "reason": "Repository has 7 non-main remote branch(es). Policy: single main branch only.",
    "type": "GS007",
    "file": ".",
    "action": "delete_remote_branches",
    "rule_module": "git_state",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/scorecard/StaticAnalysis -- Hypatia scorecard: StaticAnalysis -- 1 day(s) old",
    "type": "CSA001",
    "file": "phronesis",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/code_safety/elixir_send_unsanitised -- Hypatia code_safety: elixir_send_unsanitised -- 9 day(s) old [STALE]",
    "type": "CSA001",
    "file": "lib/phronesis/compiler.ex",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code-scanning alert hypatia/code_safety/elixir_send_unsanitised (high) at lib/phronesis/compiler.ex is 9 days old (threshold: 7 days) -- overdue for remediation",
    "type": "CSA003",
    "file": "lib/phronesis/compiler.ex",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 6 issues detected

Severity Count
🔴 Critical 0
🟠 High 3
🟡 Medium 3
View findings
[
  {
    "reason": "binary_to_term without :safe option -- deserialization attack (1 occurrences, CWE-502)",
    "type": "elixir_send_unsanitised",
    "file": "/home/runner/work/phronesis/phronesis/lib/phronesis/compiler.ex",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "Nominal-only SAST in phronesis: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
    "type": "StaticAnalysis",
    "file": "/home/runner/work/phronesis/phronesis",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Add CodeQL or equivalent SAST workflow.",
    "scorecard_check": "SAST"
  },
  {
    "reason": "Repository has 7 non-main remote branch(es). Policy: single main branch only.",
    "type": "GS007",
    "file": ".",
    "action": "delete_remote_branches",
    "rule_module": "git_state",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/scorecard/StaticAnalysis -- Hypatia scorecard: StaticAnalysis -- 1 day(s) old",
    "type": "CSA001",
    "file": "phronesis",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/code_safety/elixir_send_unsanitised -- Hypatia code_safety: elixir_send_unsanitised -- 9 day(s) old [STALE]",
    "type": "CSA001",
    "file": "lib/phronesis/compiler.ex",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code-scanning alert hypatia/code_safety/elixir_send_unsanitised (high) at lib/phronesis/compiler.ex is 9 days old (threshold: 7 days) -- overdue for remediation",
    "type": "CSA003",
    "file": "lib/phronesis/compiler.ex",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath marked this pull request as ready for review June 21, 2026 22:46
@hyperpolymath
hyperpolymath merged commit 1e156f9 into main Jun 21, 2026
8 checks passed
@hyperpolymath
hyperpolymath deleted the claude/confident-albattani-okm8i5 branch June 21, 2026 22:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants