Publication preparation: MIT license, security policy, and public metadata - #8
Merged
Merged
Conversation
Prepares the repository to be read by strangers, with no change to any service, property contract, or fixture. - LICENSE: canonical MIT, Copyright (c) 2026 maximalfocus. - pyproject: PEP 639 `license = "MIT"` plus `license-files`, so the wheel carries `License-Expression: MIT` and ships the file. Requires hatchling 1.27, the first release that understands that metadata. - Dockerfile: copy LICENSE alongside README before the project build, which now needs it. - SECURITY.md: educational purpose, fictional local-only boundary, the deliberately vulnerable contrast service and its two-action opt-in, the supported Docker workflow, non-production status, and a private reporting path. Separates the intended BOPLA demonstration from a genuine unintended finding. - README: licensing and reporting sections, and a warning against reusing either half as a production pattern. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Closes #7.
Everything that must be true before this repository can be read by strangers. No service, property
contract, walkthrough case, or fixture changes — the gate still proves the same 360 behaviors.
What landed
LICENSECopyright (c) 2026 maximalfocuspyproject.tomllicense = "MIT"+license-files, andhatchling>=1.27DockerfileLICENSEbesideREADME.md, which the project build now needsSECURITY.mdFR-019safety and reporting contractREADME.mdThe license metadata is real, not decorative
The declaration is verified through the built artifact rather than by reading the file back:
License-Expressionis the SPDX form, so this is machine-readable licensing rather than a looseclassifier. That is also why
hatchlingmoved to>=1.27— 1.25 silently ignores PEP 639 metadata,which would have produced a wheel claiming no license at all.
Adding
license-fileshad one non-obvious consequence worth recording: the build readsLICENSE,but the Dockerfile copied only
pyproject.toml,uv.lock,README.md, andsrcbeforeuv sync --locked. Without the extra copy the image build fails outright. A cached-image run hidesthis — the first gate run here passed against a stale
fieldblind:localand proved nothing aboutthe change, so the result below is from
--no-cache.SECURITY.md draws the line the demo needs
The hazard in publishing this project is a reader mistaking the deliberate flaw for an accident, or
a researcher filing "the vulnerable service is vulnerable." So the policy states plainly that the
vulnerableservice's excessive data exposure and mass assignment are the product, and scopesreports to genuinely unintended weaknesses: reaching the vulnerable service without both opt-in
actions, container escape or egress, a real credential or personal datum committed here, the
secureservice breaking its own property contract, or protected values reaching logs.Reporting goes through this repository's Security tab rather than an email address, so no personal
contact data is published.
Verification
Rebuilt with
--no-cache, then:docker compose run --rm verifyexits0. The documented walkthrough still passes 8/8 and exits0. Containers and networks were torn down after.Not in this change
Repository description, topics, and visibility are provider metadata rather than tracked files, so
they are set alongside the visibility change itself — after this lands and the exposure review is
confirmed clean. Nothing here is deployed, hosted, or published as a package or image.