Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 20:02
· 117 commits to main since this release
38ad79c

Changelog

  • 38ad79c Merge pull request #60 from curiouspub/the-snapshot-signs-before-the-tag
  • d90d995 ci(release): the snapshot signs, so the release's arguments are exercised before a tag
  • 205594b Merge pull request #59 from curiouspub/the-publish-exchanges-its-identity
  • f8e6e32 ci(release): the wrapper publish exchanges its identity, and its package manager is ensured
  • bfa6619 Merge pull request #57 from curiouspub/the-guard-names-the-release
  • 16e0631 test(readme-contract): only a final version retires the disclaimer
  • f86e0f4 Makefile: release-log captures a release run
  • baca1dd test(readme-contract): the publication row names the release it waits for
  • 65b21f9 Merge pull request #58 from curiouspub/the-buffer-is-sampled
  • 567e4f5 test(socketpin): the mutation record says what the run printed
  • ac2ee8a test(socketpin): the buffer is sampled while the body moves
  • 80364a1 Merge pull request #56 from curiouspub/the-exit-test-runs-itself
  • 8e85c7e test(exit-test): ask the question where it can be answered, and name the fix in the refusal
  • c90e724 build,test: the exit test runs itself
  • 05a8c3e test(fixtures): a project whose srcDir is computed, and no pages to find
  • fcc1ee2 Merge pull request #55 from curiouspub/the-readme-quotes-the-catalog
  • 286ebb7 docs: a push is chained to the surface check, and the run that taught us
  • e7a5d0c test(guard),build: read the wrapper's copy with a parser, and let the module name itself
  • f3b148d test(leakscan,guard),build: a rule may be added; retiring one needs a record
  • d6a9928 docs(README),test(flow): a warning is not a refusal, and a row says so
  • 79bffbc test(guard): a one-directional rule passes rather than skips
  • 217bae3 test(guard): let the copy audit reach the copy it was not reading
  • 10f3ebe docs(README),test(guard): hold three of the README's claims to the tree
  • 832b855 test(guard,pack): make five rows check what their names claim
  • ab65bac docs(README),test(guard): say what a composed message names
  • e326d2b docs(guard): state the conclusion without pointing at where it came from
  • 3ce8a58 docs: correct the exit-codes note — cancelling also exits 0
  • 6bde5c9 docs: rewrite the README for a first-timer, quoting the catalog throughout
  • e0bba49 docs: move the spelling-per-file rule into the public CLAUDE.md
  • 1d9e7fd test(guard,pack): hold the README's claims to their own sources
  • 6c6b4bc Merge pull request #54 from curiouspub/the-stage-is-declared
  • 83eaa1e Document every declared stage in one sentence, and publish the twelve in the catalog's note
  • 1f2f706 test(guard): a site that declares no stage is told so, not that it declared an empty one
  • ea653aa test(guard): a composed headline is held by how it is built: one constructor and one shape per id and stage
  • d07ea54 test(guard): the headline rows: every site declares a stage, one What per id and stage, and the README quotes only what the catalog carries
  • 03fa96c test(guard),build: the catalog records the stages sites declare and quotes the What each one writes
  • 51095fd feat(ui),feat(flow),test(guard): a failure declares the stage a person was in, at every site, the way it declares its id
  • 7d92603 Merge pull request #50 from curiouspub/the-blob-universe
  • 2c1c977 merge: bring the branch up to main again, which now carries the tokeniser-cost row's provisional ceiling
  • 5cea657 Merge pull request #53 from curiouspub/the-tokeniser-publishes-its-ratio
  • b397fed test(citations): the tokeniser-cost row measures in milliseconds, publishes its ratio every run, and its ceiling is marked provisional
  • d495f3d merge: bring the branch up to main, which now carries the re-ruled quiet-stream record and the queue's single run
  • e9fa65e Merge pull request #52 from curiouspub/the-queue-runs-once
  • 8712a42 Merge pull request #51 from curiouspub/the-quiet-stream-retake
  • 96989d5 test(timing): the quiet-stream darwin record is re-ruled from every hosted reading, and its budget is held as a ceiling
  • 8949d66 ci: the merge queue's own branches no longer trigger a second run of the whole matrix
  • 249d4d7 test(leakscan): two claims that were true and proved by nothing now each have a row
  • 6b914c9 test(leakscan): a fixture's value is git's stdout, not its stderr too
  • 82325d5 docs: the history scan's cost figure keeps one home, beside its target
  • fbeb04a merge: bring the branch up to main, which carries the merge-queue flake fix it was missing
  • be60756 fix(leakscan): membership is objects and not commits, and a NUL stops hiding the rest of a blob
  • 9d3703d fix(leakscan),fix(rules): a blob is checked at every path it was published at, and a manifest that cannot be read stops being clean
  • 72d1512 feat(leakscan): the history is scanned as blobs reachable from origin, and a ledger records what is already out
  • ad836d5 refactor(leakcheck): one engine answers "is this a leak", and it takes the path as an argument
  • 6c21b49 Merge pull request #49 from curiouspub/the-windows-retake
  • 97cdb9d feat(rules): every rule in the four manifests carries a stable id, and a report names it instead of the rule
  • 1361e3f fix(test): the range fixture's clone disables background gc, which was ejecting pull requests from the merge queue
  • 68aa9c2 test(timing),docs: the windows keep-alive record is retaken as the worse of two, and two things that cannot be read back from inside the repo
  • 1b9c0e4 Merge pull request #48 from curiouspub/the-failure-catalog
  • 03ff16e fix(guard): a site key is a property of the repository, not of the host — and a ledger entry that matches nothing must say so
  • f03123e test(guard): every site carrying an id carries the same action, and the census cannot see it
  • f0974eb feat(ui),feat(flow),test(guard),build: the four rulings — a family split, an obligation ledger, and a catalog anybody can read
  • 5f5d47e fix(guard),test(guard),test(flow),refactor(flow): ten more, and two of them were fc4c811's own regressions
  • fc4c811 fix(guard),test(guard),test(flow): the checker reads types rather than spellings, and six more holes a cold review found
  • 71b93c4 test(guard): the census row reads the checker's count without inheriting its verdict
  • 94754ed fix(ui),test(guard): four failures had no id, and the checker that certified them visited calls only
  • 6c1b33a test(flow): the preflight goldens carry the aggregate's id, and the filter that hid them
  • e6834c1 feat(ui),feat(mcp),test(guard): the id reaches both readers, and the contract is checked rather than asserted
  • 1c7ffc8 fix(flow): the three adjudicated action corrections, each with a row at its caller
  • c26f0d7 feat(ui),feat(check),feat(flow): every failure carries a stable id, and joining the waitlist stops being one
  • 665679f Merge pull request #47 from curiouspub/the-gate-checks-itself
  • 3971827 build,test(guard): the gate names what it skips, and refuses to run on the trunk
  • 893146e Merge pull request #46 from curiouspub/the-four-tools
  • e3b4d88 fix(ui),fix(flow),test(guard): a setting named in a failure is named in its Why
  • 8c5d24b feat(ui),feat(flow),feat(mcp): the next step travels as a value, not as a sentence about a terminal
  • 05ea05f feat(ui),feat(flow),feat(mcp): a refused deploy keeps the id its follow-up call needs
  • 2c9cdff test(mcp),test(flow): the status a build has never heard of, and a mutation note that said eight
  • 30f74f7 test(mcp): the capacity fixture matches by tail like its neighbours
  • 834d996 fix(mcp),fix(flow),fix(ui): what a cold read of the agent surface found
  • 40b46cd feat(mcp): the four tools an agent deploys with
  • a356027 refactor(flow): the no-login reason becomes a field rather than a prefix
  • fd90760 refactor(ui): the line-preserving escape becomes a named export
  • 17cab57 feat(mcp): a watched call reports progress while it is running
  • 5db3ec2 feat(flow): make the two login calls callable without a terminal
  • f467d63 feat(flow): read a deploy's event stream as a report rather than a render
  • 031c8e5 feat(flow): report a build's progress to a caller that is not a terminal
  • b250797 Merge pull request #45 from curiouspub/a-starved-pass-is-retaken
  • e6ee05d fix(timing): the retake, off the gate's own runners
  • bf85a9d feat(timing),test(flow),test(timing): no unpaced fixtures — every row declares what its starvation is measured against
  • 32ff8ed fix(timing): the quiet-stream record said 4.12 ms and its own window was derived from 10.28
  • 962ec4c test(timing,flow): a starved pass is retaken, not counted
  • d760795 Merge pull request #43 from curiouspub/assert-the-neutralised-set
  • 7cf5453 Merge pull request #42 from curiouspub/surface-check-recovery
  • 531c0c7 Merge pull request #44 from curiouspub/outcome-url-progress
  • 1030e73 feat(mcp): a tool call gets a context and somewhere to report progress
  • 44ce8ff feat(flow),test(guard): one exported composer for the site address
  • cec0984 feat(flow): Deploy hands back what the run produced, not only what to release
  • c7f8c70 test(flow): capture what a successful run prints, before anything moves it
  • 5474052 test(guard): the neutralised set, named with its reasons and asserted one variable at a time
  • 78db42d fix(surfacecheck): say how to get to green when the surface is one that can be edited in place
  • f838318 Merge pull request #41 from curiouspub/one-enumeration
  • 17bd66b test(guard): cmd.Dir decides which repository, and each direction names its witness
  • eafa947 test(guard): one enumeration, asking git, honouring .gitignore and nothing else
  • 8f14f3f Merge pull request #40 from curiouspub/stall-window-registry
  • b5a360e test(timing): linux and windows record their spreads, and the tail turns out to live on one leg
  • 90418ad test(timing),test(flow): a record carries the shape of the passes it admitted, not just the top of them
  • 6ebf015 test(timing),build: each leg records the fixture it ran through, and both conditions publish
  • 68bd2c8 test(timing),test(flow): the windows come back down, and the fixtures with them
  • 610ea00 test(timing),build: linux and windows retaken under the rule, and the gate stops hiding what it measured
  • 77a5bf7 test(flow),test(timing): the probe carries the row's integrity test, and darwin is retaken under it
  • 8d9fbf1 test(timing),test(flow): three windows retaken, and the fixtures that had to move with them
  • efccf6c test(flow): two readings the record called one, and the band that let a lost margin pass
  • 32c117c docs(timing): the ceiling's measurement is retaken on the tip it describes
  • 3312fc4 test(flow): the receive-end control's two tables recorded, per leg, and the row that took them removed
  • 250bb0b test(flow),test(timing): every probe arm gets a deadline, the stop rule narrows to the send end, and the read side's three windows are measured
  • 87ad4fd test(flow): the receive-end control gets a budget and a place at the back, and the unpaced probe stops under-sampling
  • c78eede test(flow),test(timing): the read side's fixture stops following its own reading, and a control asks what the receive end is worth
  • 920921d test(guard),test(timing): the surface vocabulary learns a label shape it was missing, and the upload rows' ceiling names the detector
  • 3603e3a test(timing): the two block points off the gate, and the registry is complete
  • 9bd08b4 test(flow),test(timing): linux and windows measured off the gate, and the block-point probe learns to refuse
  • 6d78b16 test(flow),test(timing): the pin goes back to 128 KiB, because one leg stopped finishing at sixteen
  • 8fc9129 test(flow): the buffer sampler stops paying for sockets that are gone, and neither pass can be killed before it reports
  • bcdd0be test(flow),test(timing): the read-back stops racing the kernel, and darwin turns out not to be able to hold a receive pin
  • 06e90ae test(timing): four guards tighten, the unpinnable-leg promise is rewritten, and darwin is retaken
  • 93ee507 test(flow),test(guard): the pin becomes a parameter, and the gate gains a race pass
  • efcf182 test(timing): the guard — a write-side measurement says which mode its leg is in
  • 5f64c5d feat(flow),test(flow): the upload's transport becomes a seam, and both ends of it are pinned
  • c851001 test(timing): the record learns what a pin is, and the write side is retaken under one
  • 041907d test(flow,timing): the darwin leg measured, and one window raised by it
  • 2f49878 test(timing): the guard — a stall window is registered, and measured on every leg
  • 51c843c refactor(timing,flow): the five stall windows move into one registry
  • 7b7f8ab Merge pull request #39 from curiouspub/perimeter
  • e145e01 fix(ui),fix(mcp),fix(cmd),test(guard): the perimeter around the boundary
  • ab583a3 Merge pull request #38 from curiouspub/double-does-not-lie
  • 0ea3e34 test(flow),feat(ui): the terminal double delegates instead of pretending
  • 974e25d Merge pull request #36 from curiouspub/failure-holds-data
  • 6e9a1db fix(surfacecheck): a base the push discarded is measured against the default branch
  • 04546cb fix(ui),test(ui): the quotation is found by position, not by value
  • 6e07d53 fix(ui),fix(flow),test: this program's own composed paragraphs, restored
  • e3653ec fix(flow),test(guard): three sites the pattern-sweep missed, and the guard that would not have
  • 0833f5c fix(ui),refactor(flow),test(ui): a failure holds the far end's sentence as a field
  • e43849d Merge pull request #37 from curiouspub/required-checks-recorded
  • 6818893 fix(ci),test(guard): a required check has to be produced where it is waited for
  • 3f57a6d test(flow): the two wait arms are decided, not timed
  • b00bc5a docs,test(guard): the seven required checks, and the guard that keeps two of the three copies honest
  • c468a39 Merge pull request #34 from curiouspub/publish-and-url
  • cf69b16 test(guard),fix(ui): the analyser is the only thing that can see the format seam
  • 205bcde fix(flow),fix(api),fix(ui),test: six rulings on the publish, and the one home for escaping
  • 64d4f0d feat(flow),test(flow),docs: publish the build, and print the address without claiming it answers
  • a14e2d0 feat(api),test(api): the call that gives a built deploy an address
  • b17dad5 Merge pull request #35 from curiouspub/ui-sanitise-at-the-boundary
  • 87ceefa fix(ui),test(ui),test(guard),refactor(flow): escape at the rendering boundary, once
  • c20fcea Merge pull request #33 from curiouspub/npm-wrapper
  • 59ca442 docs(npm): which real paths put an address into the identity check
  • ad27a5f test(npm): the instrument comes out
  • caa2af1 test(npm): the packaging rows run npm without a shell, and stop claiming a bit Windows has not got
  • 4b6bf07 fix(npm),test(npm): an address literal reaches the certificate's address entries
  • a650655 test(npm): a temporary row that makes the two unreachable legs speak
  • 6bf1b41 docs(npm): what a bypass entry matches, and which way it errs
  • e448df7 test(guard): the publishing job's action list is the exact two
  • b4ed8a0 test(guard): the registry readback is run, not read
  • 5c3e61f test(npm): the bytes a proxy hands back with its agreement
  • 7e3ae82 fix(npm): an unreadable proxy credential names the proxy
  • 7f98656 fix(npm): a certificate nobody can vouch for says which one it was
  • bcede95 fix(npm): a bare bypass entry names one host, not a domain
  • 8d6c9a5 test(npm): the proxy cases most likely to be wrong
  • 080d8bb fix(npm): a failed download removes its temp file once the handle is gone
  • 2d36c67 fix(npm): an answer whose body is not wanted is closed rather than drained
  • 3df295f test(npm): the certificates the wrapper's TLS rows run on, encoded minimally
  • fec824b fix(guard,scripts): what the rebase found — a name collision and a script the widened guard now sees
  • 411a03a test(npm): the newest-release row scans the shared module too
  • 6da6698 docs: how the wrapper installs, and what checks the download
  • 846a6f1 test(api): the loopback set the wrapper ships is the one this client enforces
  • 985f6bd feat(ci,release): the wrapper's suite inside the gate, and a publish that measures the registry
  • 37f7d90 feat(release): a second archive the wrapper can open, and a row that says which
  • 0d203a8 feat(npm): a wrapper package whose postinstall checks what it downloads
  • 8234080 feat(wire): two codes, so a client can tell a failed build from an unfinished one
  • a280b06 Merge pull request #32 from curiouspub/publish-surface-check
  • b7c461f docs: the merge queue is an operator action, and it is not done
  • 1556e3b ci(workflows),test(guard): an edited title is a new surface, and the range needs its history
  • 00e9e21 fix(scripts,surfacecheck): the hook reads a tag the way the workflow does
  • 8fc6ca3 fix(surfacecheck): what a narrowing costs, said where somebody can act on it
  • 2cfacd1 test(surfacecheck): the control travels the road, and the union is read in both directions
  • 16bb639 fix(surfacecheck): "I could not look" stops being reported as "nothing there"
  • 0146542 perf(citations): bound the join, so a stranger's text cannot hold a runner
  • 5b9d257 fix(surfacecheck): the report stops publishing the text it caught
  • 70db263 fix(preflight),test(guard): the published module is fetchable again
  • bb738b4 ci(workflows),build(make),docs: the surface check becomes the mechanism
  • b924253 feat(surfacecheck): the surfaces a scan of file contents cannot see
  • 05871f9 refactor(citations): the subword tokeniser moves out of a tests-only package
  • b54a29f fix(guard): a worktree lane is not this checkout's code
  • 0930889 test(guard): drop the NPM_TOKEN allowlist entry — the wrapper publishes without one
  • fc450ac Merge pull request #31 from curiouspub/start-and-stream
  • 9a4b410 fix(flow): the stall watchdog watches bytes, and a replayed phase is not narrated twice
  • 67b89f7 docs(flow),test(flow): which stream a line goes to is decided by where it came from
  • 058cd61 docs(flow): say which of the stream's numbers this client cannot check
  • 1ff9753 feat(flow): start the build, and render the log until it finishes
  • 7d69a9b refactor(ui): make the escape set a table, so one byte can be taken out
  • 94483a1 feat(api): the start call, and an event stream with no deadline at all
  • 118a09b feat(ui): escape control bytes before build output reaches a terminal
  • 5e9da59 Merge pull request #30 from curiouspub/deploy-create-and-upload
  • 54d5332 docs(flow): say where the stall row's margin was measured, and where it was not
  • 6e5f349 fix(flow): the upload waits for the next byte, not for the whole transfer
  • 335cc31 docs: the upload is built, and these two files said it was not
  • 77cb21a feat(flow): the deploy sequence creates the deploy and uploads the archive
  • 8980015 feat(api): the deploy create, authenticated per call
  • f94e3ca feat(wire): the deploy-create response carries the upload link's expiry
  • 206d8ad docs(check): date what the supersede narrowing actually guards
  • 08e5c69 Merge pull request #29: the deploy sequence
  • e726606 docs: the deploy types are here, and this line said they were not
  • 8082d3f fix(api): a refused base URL must not echo the secret it is refusing
  • c5817ec feat(check),fix(flow): a declined row can be superseded by the answer that arrives later
  • f68c9c2 docs: the deploy command is no longer a stub, and these two said it was
  • c1e469b cmd/curious: deploy dispatches to the sequence
  • d9cb76a flow: the deploy sequence, and the hand-off it forms
  • 87ba472 ui: the interrupt handler runs the caller's tidy-up before it ends
  • c1d4aa3 pack: Prepare takes the limits verdict instead of measuring it again
  • 62be358 Merge pull request #28: apply the adjudicated cold reads
  • 027594d fix(check),test(check): a validated report stays validated, and two rows start testing their names
  • 885dedf fix(pack): six findings that share two files, named in full
  • 1fa74b6 fix(flow): one renderer for a finding's paths, measured or not
  • ac37f21 Merge pull request #27: the local limits, and paths that carry their measurements
  • 105d5a9 feat(check),feat(flow),feat(pack): a finding's paths can carry their measurements
  • 0e8b064 feat(pack,check,units): the local limits, measured before packing and reported with everything else
  • d2d2dde Merge pull request #26: answer an explicit null id
  • 443f1f2 Merge remote-tracking branch 'origin/main' into nullid
  • aa447da Merge pull request #25: the packer refuses what it cannot honestly archive
  • 3e53b5e fix(mcp): answer an explicit null id instead of ignoring it
  • 178501b feat(pack): refuse what cannot honestly be archived, and own the archive's order
  • 73d9f2a Merge pull request #23: the MCP stdio server, hand-rolled
  • db3ec89 feat(mcp): pin the newest revision of the shape this server actually speaks
  • 30ecb2d Merge remote-tracking branch 'origin/main' into mcp-server
  • 4b605cf Merge pull request #24: the deterministic archive
  • c9266c9 feat(pack): the deterministic archive
  • 5f58921 feat(mcp),feat(cmd),docs: the stdio MCP server — transport and dispatch, no tools yet
  • 4d37781 Merge pull request #22: the capacity gate, and the waitlist when the door is shut
  • af7d35b test(flow),feat(flow),docs(ui): every retry time through one renderer, and the branch nobody measured
  • f85e1fd feat(flow): the capacity gate that runs before a login
  • 7f34c32 feat(flow): the waitlist offer, and the support address it names
  • bbeb844 feat(flow): one home for the closed-capacity copy and the reset renderer
  • cc7c69e Merge pull request #21: pre-flight's four checks, and a guard that judges values
  • 8534932 test(ui),refactor(ui): the published failures are a set read from the source
  • 462c0f3 test(guard),feat(preflight): the needle goes through the door, not around the check
  • b3bbfbc test(guard): the URL check folds constants, so it judges values not spellings
  • 7a48c74 refactor(ui): the two worked examples go to the checks that own them
  • bb21c97 feat(preflight): register the astro.config check in production
  • fb30a03 feat(preflight): scan the walked file list for hard-coded dev URLs
  • 60c4831 feat(preflight): the lockfile check, and the workspace sniff behind it
  • 17135f6 feat(preflight): the astro-dep check
  • c9debdf feat(preflight): a bounded reader, and one place that parses package.json
  • 50449bd test(preflight): project fixture trees at the repository root
  • dd02e36 docs(flow): say what each seam owes, and pin the one claim this repo cannot prove
  • 7ab25e0 Merge pull request #20: the login machine, and a third exit code with a meaning
  • 99b155a feat(ui),feat(flow),test: a third exit code, scoped to a door that is shut
  • 9940590 feat(flow),test(flow): give the waitlist hand-off the run's own context
  • 59154f8 test(flow): say what the machine's structural guard cannot see
  • c74b78a test(flow): let the terminal double resolve a default, so the row named for a bare newline means it
  • 62bd0a1 feat(flow),test(flow): the login machine, and every failure keyed to the contract
  • 9fb0f07 docs(flow): say what this package holds, and why the login is a machine
  • 38a8c46 docs(config): say which half of the contract the caller owns
  • 5503acf Merge pull request #19: the token file's seven tiers, and a CLI that stops widening what it does not own
  • b4d0f55 docs(config): the reason field's contract, and the bad-verb residue with its gate named
  • bc696f7 fix(config): a distinctive temp prefix and an age gate, and a version field that says nothing is refused
  • 10d8718 fix(config): the two-spelling refusal asks about every key, not the three we know
  • bb262c3 fix(config): the umask governs above our own directory
  • d2f17cf fix(config): a save brings the version into line with what it wrote
  • 968a0b0 docs(config): say what the platform that ignores them does with the two new arguments
  • 17fca38 fix(config): the small sweep — one reason per line, and a warning that says only what it knows
  • 97e2f8c test(config): the four coverage rows, one of them behind a capability probe
  • efe679b fix(config): sweep temp litter, gate the schema version, and stop printing credentials
  • 67da660 feat(config): the unknown-field map renders its keys and never its values
  • ea771ef refactor(config)!: Save takes the credential pair and validates it together
  • 795ee71 fix(config): strip known keys by the decoder's own relation, and refuse a file that spells one field twice
  • 112a55a fix(config): create every missing directory level usably, not just the leaf
  • 97d67ff Merge pull request #18: the release pipeline, and a guard over what it is allowed to do
  • 55ae8ad docs: the build section says what the gate is, not how many workflows there are
  • 767f8d9 ci(release): pin the signing tool to a current version, and say who has to move it
  • 825d11f ci: revert the deliberately mutable pin
  • 1040268 ci: TEMPORARY — a deliberately mutable pin, to show the guard fails CI
  • cb29ff6 feat(release): the pipeline, and a guard over what it is allowed to do
  • d10ca4a Merge pull request #17: the gate refuses a finding that says nothing
  • 3886490 test(pack): a directory inside the project that cannot be read stops the walk
  • 8f7a428 docs: the skip gate's blind spot goes in the file its reader opens
  • 5a2a2b3 docs: count lists by the list, not by a numeral beside them
  • dd47acf fix(pack): a combining mark is all three of its categories
  • 6482236 feat(check): the gate refuses a finding that says nothing
  • 85a56a5 Merge pull request #16: per-id declines, the gate's fifth rule, and two set equivalences
  • ddb3fe1 refactor(check): the row type is named for what it holds
  • 6420475 fix(preflight): the gate trip is recorded on the row, not as a note
  • 37b7930 test(guard): two set equivalences, each asserted from both sides
  • c142f5e build: the skip tool moves to tools/, where a tool lives
  • b9b9b22 test(preflight): the stray-decline row observes the order it claims
  • 5e9f8bc feat(flow): a by-design decline renders below advisory and asks nothing
  • edb20b3 feat(check): the gate refuses a finding under a declined id
  • 0362d4b feat(preflight): a check declines per id, not per check
  • 4ff4dae feat(check): a manifest row carries a status and, on a decline, a kind
  • 05150ca Merge pull request #15: the project walk, and a skipped row that nobody declared fails the run
  • d3663ef build: the skip manifest lists what is legitimate, not what happens to occur
  • 3700193 build: the skip manifest learns the three rows only a run could find
  • eb6ad14 build: a skipped row that nobody declared fails the run
  • 9ab74d3 test(pack): the row whose failure is a hang carries its own deadline
  • 9e2ea7a test(check): a negative fixture's premise becomes an assertion
  • 4fce082 feat(check),feat(pack): the combining-mark warning retires into the hard stop's wording
  • a348362 test(pack): the findings-arrive-together row runs where symlinks cannot be made
  • 27b8efc feat(pack),feat(check): the project walk, and the four questions it answers
  • 8197c29 test(check): a stand-in id has to be one nothing will ever claim
  • 4320cdb Merge pull request #14: the gate becomes the only door, and the manifest stops lying
  • 5f25a14 test(flow): guard the authored headline a mutation found unguarded
  • 703dd53 test(check): the threshold fixtures interleave, because one group is never disturbed
  • 51b706d fix(preflight): one tree gets one answer, whatever platform read it
  • 82b649d fix(flow): not-run joins the decision, a hard stop stops hiding warnings, copy always names an action
  • bc6fb6f feat(check,flow): Combine returns an unforgeable Report, and the renderer requires one
  • 5304f11 fix(preflight): stat the root first, and stop reporting a nil check as run
  • d0c9ffd feat(check): a constructor that makes the Paths contract true
  • ef5bad6 fix(check): the arrival key comes back, and the comparison is total again
  • 102ea23 Merge pull request #13: one result shape, copy that keeps its files, and a coverage row that can see every producer
  • 506f63f test(check): the coverage row moves to where it can see every producer
  • 6d9c27e feat(flow): carried copy keeps its words and still names the files
  • 401f2a9 refactor(preflight): the engine returns the same shape every producer does
  • c1c7f4c Merge pull request #12: a finding carries its own copy, one universe in the leaf, and a combiner that refuses duplicates
  • 507325f test(flow): the two-findings row now varies the position of the copy
  • 2528c49 feat(check,flow): a finding can carry its own copy, and a lone one renders it
  • 6198be3 feat(check): a combiner that refuses duplicate coverage
  • cdb1b25 refactor(check,preflight): the declared universe moves into the leaf
  • a20f8bb refactor(check): the check-id constants lose their stutter
  • 7ce9c8a Merge pull request #11: pre-flight — a leaf result model, the engine, and the terminal renderer
  • cd0b76f feat(flow): the CLI-mode pre-flight renderer
  • 332c877 feat(preflight): the engine — all checks run, fixed order, ran-manifest
  • 14c293b refactor(check): the pre-flight result model becomes a leaf package
  • 2405870 Merge pull request #8: the terminal surface — prompts, streams, colour, failures
  • 739b0e6 Merge pull request #10: the checksum column leaves the vendor check, and one resolver for the endpoint
  • 1e6bce3 fix(ui): inject the escape gate where every other environment answer is injected
  • 54c79c6 Merge main into the terminal-ui round
  • 2cc0999 fix(ui): ask the console before writing escapes, read the debug switch by value
  • 669585f fix(ui): Ctrl-C dies of the signal, and a user's own answer stops being our bug
  • 2d410ea fix(guard): the checksum COLUMN is exempt, not the file
  • 9e66957 feat(api): ResolveBaseURL — one answer to "which endpoint is this run using"
  • f2bb69c fix(guard): go.sum is generated, not authored — exempt from the vendor check
  • 939af7a Merge pull request #9: the token file — where it lives, how it is written, and which server it belongs to
  • f5f6ced docs(config): the atomic write's real argument, and a comment that had gone stale
  • b9597e6 test(config): the suite for the token file, with every assertion mutation-proved
  • cff64f4 feat(config): the token file — where it lives, how it is written, and which server it belongs to
  • 6db9bb8 test(ui): the null-device row asserts everywhere instead of skipping
  • f648d6f test(ui): a token survives no rendering path a config struct has
  • 3a2f01c feat(ui): Ctrl-C hands the terminal back and reports 130
  • 3360cdb feat(ui): prompts that cannot pair the wrong hint with the wrong default
  • 3e2963a feat(ui): the terminal surface — stream split, TTY detection, colour
  • 5ed2693 Merge pull request #7: CanonicalKey — a comparison-only form, kept off the wire
  • 7372167 feat(api): CanonicalKey — a comparison-only form, kept off the wire
  • ff554c4 Merge pull request #6: astro.config srcDir resolution — five readings, and a gate that names its gaps
  • 0cfe228 fix(preflight): an advisory names something you can act on, or it doesn't fire
  • 0e6c25c fix(preflight): the gate stops claiming to be complete, and starts saying so
  • 8663699 fix(preflight): follow a symlinked config, refuse a symlinked FIFO; retire a disproved advisory clause
  • ee547d0 fix(preflight): astro.config subset gate — unresolved by construction, not by patch
  • 45f5b09 fix(preflight): astro.config false hard stops — the pages-dir check never hard-stops
  • 860e1d8 Merge pull request #5: astro.config srcDir resolution, and failing honestly
  • 2d976a0 Merge pull request #4: stop forbidding the mutation-proof marker
  • a22a24b test(preflight): merge independent reconstruction's unique rows
  • 57eb752 test(preflight): astro.config resolution — table, read-counting, mutations
  • 6026eb2 feat(preflight): resolve srcDir from astro.config before failing on pages dir
  • 27fddaa fix(guard): stop forbidding the mutation-proof marker, which points at no document
  • 41b5d20 Merge pull request #2: the /v1 HTTP client and error mapping
  • b54f2e0 Merge pull request #3: the vendor rule, made structural
  • f12c432 test(api): merge the blind reconstruction's connection-refused, TLS and HTTP-date rows
  • 9d0f9c9 test(api): a real control for the token capture, and an exact undecodable-body message
  • 4e96691 fix(api),test(api): pin retry policy per endpoint, prove the ceiling, and classify Windows' real connection-refused errno
  • bcc775f test(api): consolidate every proxy-environment test into its own package
  • ec7a8bc fix(api): refuse every redirect, and make the address guard a real gate
  • 9f3d905 Merge the guard branch into this lane
  • d15b824 test(guard),docs: tokenise the vendor rule, narrow the exemption, and teach guard 3 document names
  • 847d17a test(guard),docs: the vendor rule becomes structural, and two correct rules stop pointing at each other
  • 18fb22a test(api): base URL resolution, trailing slash, configured timeout
  • c2283fc fix(api): stop clobbering HTTPS_PROXY/NO_PROXY on Windows
  • 170d95c test(api): request shapes, retry budgets, proxying and token leaks
  • ce1dae8 test(api): probe the address guard's spelling space
  • 8946f1d feat(api): the four /v1 calls this epic's login flow needs
  • bea9722 feat(api): map non-2xx responses into a typed APIError
  • 68d0761 feat(api): construct the /v1 client behind an address guard
  • c7ec31a Merge pull request #1: repo scaffold, Makefile, CI, four guards
  • a9dc2f0 test(guard),docs: ban the provider CLASS, not one vendor
  • e6316bc docs,test(guard): split CLAUDE.md public/local, and take the guard's universe from git
  • 9abadab fix: guard 4 becomes a type check, and the rest of the third review round
  • 1f431b2 fix: guards rise to their names, a fourth guard, and the cache that hid them
  • 16ce9be fix(ui): Secret implements fmt.Formatter — every mismatched verb leaked
  • e9996bb fix(ui): add MarshalText, and name the one path Secret cannot redact
  • 28b08b5 feat: repo scaffold, Makefile, CI, dependency policy, three guards
  • 582fc4d docs,wire: state the conclusion, not the citation; and the publish step returns a label
  • 0abb576 feat(wire): DeployPublishResponse — the publish step's success body
  • 1dd40d4 wire: DeployStartResponse carries the deploy's status
  • 5f02a07 wire: correct a false guarantee about the packed limit
  • 0ccebd3 wire: give the event stream a grammar, its names a registry, and the packed size a bound
  • d4f511c wire: close the guard gaps a line review demonstrated
  • ae5efe6 wire: deploy types, the SSE event contract, and the limit constants
  • ec908a3 wire: state that unknown fields are ignored on both sides
  • 1ae2183 wire: guard exported package-level vars
  • 5231128 wire: enumerate the error codes and their Retry-After obligation
  • a557d13 docs: correct the client-flow order and the lockfile check
  • 47522d7 chore: gitignore go.work files
  • 8858f63 Add initial README for curious publishing platform
  • 083212c wire: /v1 contract for Epic 1 (types only, additive-only)
  • f7cb181 chore: repo scaffolding
  • 4d8eef1 Initial commit