diff --git a/.github/credential-surface.json b/.github/credential-surface.json index 2103747..d0af9bc 100644 --- a/.github/credential-surface.json +++ b/.github/credential-surface.json @@ -20,7 +20,7 @@ "name": "NPM_TOKEN", "tokenClass": "npm Automation token, or a granular access token with publish rights on the @cosyte scope. A classic Publish token demands a 2FA one-time password CI cannot supply and dies with EOTP at the last step, after a green build.", "storage": "organization", - "storageNote": "An organization secret on the cosyte org, shared by every @cosyte/* repository. A repository-level NPM_TOKEN silently OVERRIDES the organization one, so it must live in exactly one place; rotating it affects every @cosyte/* repository, not just this one.", + "storageNote": "An organization secret on the Cosyte org, shared by every @cosyte/* repository. A repository-level NPM_TOKEN silently OVERRIDES the organization one, so it must live in exactly one place; rotating it affects every @cosyte/* repository, not just this one.", "requiredForPublish": true, "registryAuth": true, "exposures": [ @@ -48,7 +48,7 @@ } ], "issuedForms": [{ "id": "npm-automation-token", "pattern": "npm_[A-Za-z0-9]{36}" }], - "retiredWhen": "An npm Trusted Publisher is registered for all eight @cosyte/* packages against org cosyte, repository config, workflow release.yml, environment release. Removing this token before that publisher exists breaks every publish, so the order is not negotiable. RELEASING.md, 'Still deferred: OIDC trusted publishing', has the sequence." + "retiredWhen": "An npm Trusted Publisher is registered for all eight @cosyte/* packages against org Cosyte, repository config, workflow release.yml, environment release. Removing this token before that publisher exists breaks every publish, so the order is not negotiable. RELEASING.md, 'Still deferred: OIDC trusted publishing', has the sequence." }, { "name": "RELEASE_PR_TOKEN", diff --git a/.github/workflows/no-emdash.yml b/.github/workflows/no-emdash.yml index d212c18..8e10f68 100644 --- a/.github/workflows/no-emdash.yml +++ b/.github/workflows/no-emdash.yml @@ -2,7 +2,7 @@ name: Em-dash gate # The brand rule (founder directive 2026-07-24, written down in the knowledgebase repo # at 06-brand/voice-and-tone.md: "No em dashes. Ever.") bans U+2014 outright across -# every cosyte surface, and names COMMIT MESSAGES explicitly. This workflow is the CI +# every Cosyte surface, and names COMMIT MESSAGES explicitly. This workflow is the CI # half of that rule for config: the tracked files, and the text that is not a file. # # config was NOT clean when this landed, and the measurement behind that is the whole @@ -57,7 +57,7 @@ name: Em-dash gate # # Both of those land on `main`, and the brand rule names commit messages. The PR BODY # lands under no merge method GitHub offers, and is scanned anyway as deliberate -# over-strictness: it is a cosyte surface in its own right and it costs nothing to +# over-strictness: it is a Cosyte surface in its own right and it costs nothing to # cover. All three are checked below. This is not hypothetical bookkeeping: a squash # merge composes its message from the PR title and body, so a sweep whose own PR text # carries an em dash reds this gate on its own merge. diff --git a/CHANGELOG.md b/CHANGELOG.md index 7686ab0..d8d8a04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -297,7 +297,7 @@ no package, so entries here are **dated** rather than versioned. `test/drift-check-phi-probe.test.ts` is where the controls actually run. - **`@cosyte/script-utils`**, a new zero-dependency, zero-build package, so that the entry-point - guard every cosyte gate script needs lands **once** rather than being respelled per repo + guard every Cosyte gate script needs lands **once** rather than being respelled per repo (`ENTRYPOINT-STRING-COMPARE`). It ships `isCliEntrypoint(import.meta.url)`. `website` (3 CLIs) and `docs` (4 `.mjs` gates, one of them the real `test:build` gate) hold the same shape and are the intended next consumers. @@ -893,7 +893,7 @@ no package, so entries here are **dated** rather than versioned. path, exactly as it would be in `main`. A per-field exception to net 1's non-empty rule is a bigger surface than the cases it would buy. - **THE HONEST BOUND: this closed a LATENT hole and nothing in the org moves.** `typesVersions` is - the only one of the three any cosyte manifest uses (`ncpdp` and `@cosyte/test-utils`), and in + the only one of the three any Cosyte manifest uses (`ncpdp` and `@cosyte/test-utils`), and in BOTH of them every `typesVersions` target is already declared through `exports`, so the derived set is byte-for-byte what it was. `imports` and `browser` have no users here at all. The claim is not that anything shipped broken. diff --git a/README.md b/README.md index 19a5592..7ffbc50 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # cosyte-config -> One enforced toolchain for every cosyte package, published as eight small config packages. +> One enforced toolchain for every Cosyte package, published as eight small config packages. [![CI](https://img.shields.io/github/actions/workflow/status/cosyte/config/ci.yml?branch=main&label=CI)](https://github.com/cosyte/config/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/cosyte/config/blob/main/LICENSE) @@ -17,7 +17,7 @@ Shared build/lint/format configuration for the @cosyte/\* packages. ## Why this exists -Every cosyte package needs the same TypeScript options, the same lint rules, the same formatter +Every Cosyte package needs the same TypeScript options, the same lint rules, the same formatter settings, the same build and test wiring. Copied into each repository, those files drift: a rule relaxed in one place to unblock a release stays relaxed, and nobody finds out until two packages disagree about what "strict" means. @@ -28,12 +28,12 @@ declares them as devDependencies, and a change to the standard reaches every rep bump and `pnpm install`. The standard these packages encode is [`drift-manifest.json`](drift-manifest.json), which is the -cosyte estate's engineering baseline and says of itself that it inherits its authority from no other +Cosyte estate's engineering baseline and says of itself that it inherits its authority from no other document. Every requirement in it carries its own provenance note. There is no prose twin. ## Status -`cosyte-config` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`cosyte-config` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. This root package is `private: true` and is never published; it is the workspace that builds the eight `@cosyte/*` packages below, all of which are on that same line. Still moving: the @@ -63,10 +63,10 @@ that adopts it: | Package | What it is | How a package consumes it | | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | [`@cosyte/tsconfig`](packages/tsconfig) | `base.json` (type-check options) plus `library.json` (adds declaration and sourcemap emit) | `"extends": "@cosyte/tsconfig/base.json"` | -| [`@cosyte/eslint-config`](packages/eslint-config) | ESLint 10 flat config: unified `typescript-eslint` (`recommendedTypeChecked`), JSDoc gates on public exports, cosyte rules | `import cosyte from "@cosyte/eslint-config"; export default cosyte(import.meta.dirname);` | -| [`@cosyte/prettier-config`](packages/prettier-config) | The cosyte Prettier settings | `"prettier": "@cosyte/prettier-config"` in `package.json` | -| [`@cosyte/tsup-config`](packages/tsup-config) | The cosyte tsup baseline: dual ESM and CJS with declarations, ES2023, treeshake on | `import { cosyteTsup } from "@cosyte/tsup-config";` | -| [`@cosyte/vitest-config`](packages/vitest-config) | The cosyte Vitest baseline: v8 coverage with gating per-directory thresholds, plus the runnable-docs snippet suite | `import { cosyteVitest } from "@cosyte/vitest-config";` | +| [`@cosyte/eslint-config`](packages/eslint-config) | ESLint 10 flat config: unified `typescript-eslint` (`recommendedTypeChecked`), JSDoc gates on public exports, Cosyte rules | `import cosyte from "@cosyte/eslint-config"; export default cosyte(import.meta.dirname);` | +| [`@cosyte/prettier-config`](packages/prettier-config) | The Cosyte Prettier settings | `"prettier": "@cosyte/prettier-config"` in `package.json` | +| [`@cosyte/tsup-config`](packages/tsup-config) | The Cosyte tsup baseline: dual ESM and CJS with declarations, ES2023, treeshake on | `import { cosyteTsup } from "@cosyte/tsup-config";` | +| [`@cosyte/vitest-config`](packages/vitest-config) | The Cosyte Vitest baseline: v8 coverage with gating per-directory thresholds, plus the runnable-docs snippet suite | `import { cosyteVitest } from "@cosyte/vitest-config";` | | [`@cosyte/script-utils`](packages/script-utils) | Zero-dependency helpers for the gate scripts in `scripts/`: `isCliEntrypoint` and the shared PHI-scan engine | `import { isCliEntrypoint } from "@cosyte/script-utils";` | | [`@cosyte/test-utils`](packages/test-utils) | The shared conformance kit for the parsers: round-trip, lenient-mode, immutability, warning-code and PHI-leak runners | `import { roundTripProperty } from "@cosyte/test-utils";` | | [`@cosyte/process`](packages/process) | One `cosyte-process` bin behind build, test, lint, typecheck, format and check, so script bodies stop being hand-maintained | `"build": "cosyte-process build"` | @@ -143,7 +143,7 @@ grades `config` only; an estate-wide README group is a separate change. ## The estate baseline, and who it binds -[`drift-manifest.json`](drift-manifest.json) IS the cosyte engineering baseline: it declares what +[`drift-manifest.json`](drift-manifest.json) IS the Cosyte engineering baseline: it declares what every repository in the estate owes, and `pnpm run drift` grades each one against it and prints a per-repo worklist. `pnpm run drift:validate` validates the standard itself against [`drift-manifest.schema.json`](drift-manifest.schema.json) with nothing installed. diff --git a/RELEASING.md b/RELEASING.md index d935b4a..216a588 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -571,7 +571,7 @@ published. build even runs. - **Revoke.** On npmjs.com, Access Tokens, revoke the old token **after** the new one is installed and verified, not before: the two steps overlap deliberately so no release window is left with no - working token. Then re-read `gh secret list --org cosyte` and confirm one entry, one value. + working token. Then re-read `gh secret list --org Cosyte` and confirm one entry, one value. - **Compensating action.** If the token is believed compromised, invert the order: **revoke first**, accept that every `@cosyte/*` publish is blocked until a replacement is installed, and say so in the org channel because thirteen other repositories share it. Then `npm token list` and audit recent diff --git a/documentation/decisions/0002-the-0-1-0-version-line.md b/documentation/decisions/0002-the-0-1-0-version-line.md index a9853ab..a1c8638 100644 --- a/documentation/decisions/0002-the-0-1-0-version-line.md +++ b/documentation/decisions/0002-the-0-1-0-version-line.md @@ -12,7 +12,7 @@ - **Supersedes:** the sentence "the package stays on the **`0.0.x`-until-first-alpha** ladder", which stood in all eight package changelogs, in the root `CHANGELOG.md`, in `README.md` and in `.changeset/README.md` at commit `b78e2d977ac7615513c21f582c5efe5e42734209`; and the house - skeleton's `## Status` sentence "is on the cosyte 0.0.x ladder: the public API is not yet settled + skeleton's `## Status` sentence "is on the Cosyte 0.0.x ladder: the public API is not yet settled and may change in any release", which stood in all nine governed READMEs. `scripts/readme-check.mjs` compels the settled-line sentence in its place, resolving each package's line from its manifest version and the pending changesets. diff --git a/documentation/drift-enforcement.md b/documentation/drift-enforcement.md index a36e3c4..5a1cfb2 100644 --- a/documentation/drift-enforcement.md +++ b/documentation/drift-enforcement.md @@ -1,6 +1,6 @@ # Drift enforcement: which repos the baseline's verdict binds -`drift-manifest.json` is the cosyte estate's engineering baseline, and +`drift-manifest.json` is the Cosyte estate's engineering baseline, and `scripts/drift-check.js` grades every repo against it. This file answers the one question the baseline used to leave to silence: **whose failure is anybody's problem?** diff --git a/drift-manifest.json b/drift-manifest.json index 77c3fa5..e2120cf 100644 --- a/drift-manifest.json +++ b/drift-manifest.json @@ -1,7 +1,7 @@ { "$schema": "./drift-manifest.schema.json", "manifestVersion": 2, - "standing": "THIS FILE IS THE STANDARD. It is the cosyte estate's engineering baseline and it inherits its authority from no other document: there is no prose twin, and by operator decision none is to be written. Every requirement below carries its own provenance note saying where it was derived from, so no requirement is inherited unexamined. scripts/drift-check.js evaluates it and prints a per-repo WORKLIST; scripts/validate-drift-manifest.mjs validates this file against drift-manifest.schema.json, which ships beside it and needs no install to run. THE AUTHOR IS A SUBJECT TOO: configSubject below states which of these requirements config itself is held to and which it is exempt from, so the repo that publishes the standard is graded by it rather than standing outside it. AND NO ADVISORY RANGE IS TRANSCRIBED HERE: an override cites advisory IDENTIFIERS, and the ranges are read from the advisory record at check time, because a transcribed range decays silently while the sentence beside it still reads true. Drift is EXPECTED while the migration runs: the report is the worklist, never a claim of health.", + "standing": "THIS FILE IS THE STANDARD. It is the Cosyte estate's engineering baseline and it inherits its authority from no other document: there is no prose twin, and by operator decision none is to be written. Every requirement below carries its own provenance note saying where it was derived from, so no requirement is inherited unexamined. scripts/drift-check.js evaluates it and prints a per-repo WORKLIST; scripts/validate-drift-manifest.mjs validates this file against drift-manifest.schema.json, which ships beside it and needs no install to run. THE AUTHOR IS A SUBJECT TOO: configSubject below states which of these requirements config itself is held to and which it is exempt from, so the repo that publishes the standard is graded by it rather than standing outside it. AND NO ADVISORY RANGE IS TRANSCRIBED HERE: an override cites advisory IDENTIFIERS, and the ranges are read from the advisory record at check time, because a transcribed range decays silently while the sentence beside it still reads true. Drift is EXPECTED while the migration runs: the report is the worklist, never a claim of health.", "estate": { "provenance": "The umbrella's .gitmodules is the list of record for repo names, PATHS and hazards. These are its 24 submodule PATHS as of 2026-08-29, read for S0226. Repos are addressed by PATH and never by submodule NAME: the org profile repo is NAMED `.github` and PATHED `github-profile`, and since the checker resolves a repo by joining the umbrella root with the name it is given, and the umbrella root has its own `.github/` directory, addressing that repo by name would silently grade the umbrella's own workflows.", "addressedBy": "path", diff --git a/drift-manifest.schema.json b/drift-manifest.schema.json index acf0f47..8fb6a5d 100644 --- a/drift-manifest.schema.json +++ b/drift-manifest.schema.json @@ -1,8 +1,8 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://cosyte.com/schemas/drift-manifest.schema.json", - "title": "cosyte drift manifest", - "description": "The shape of drift-manifest.json, which IS the cosyte engineering baseline. Validated by scripts/validate-drift-manifest.mjs, which implements the subset of JSON Schema used here and nothing more: a manifest that needs a keyword the validator does not know is a change to BOTH files. The subset is type, required, properties, additionalProperties, patternProperties, propertyNames, items, minItems, minProperties, minLength, minimum, uniqueItems, enum, const, pattern and local $ref into $defs. No remote references: this file must validate with no network and no node_modules.", + "title": "Cosyte drift manifest", + "description": "The shape of drift-manifest.json, which IS the Cosyte engineering baseline. Validated by scripts/validate-drift-manifest.mjs, which implements the subset of JSON Schema used here and nothing more: a manifest that needs a keyword the validator does not know is a change to BOTH files. The subset is type, required, properties, additionalProperties, patternProperties, propertyNames, items, minItems, minProperties, minLength, minimum, uniqueItems, enum, const, pattern and local $ref into $defs. No remote references: this file must validate with no network and no node_modules.", "type": "object", "additionalProperties": false, "required": [ diff --git a/packages/eslint-config/CHANGELOG.md b/packages/eslint-config/CHANGELOG.md index 089f39b..5cc67d6 100644 --- a/packages/eslint-config/CHANGELOG.md +++ b/packages/eslint-config/CHANGELOG.md @@ -43,7 +43,7 @@ pre-alpha rule. See ### Changed -- Documentation and source comments no longer use em dashes, in line with the cosyte brand +- Documentation and source comments no longer use em dashes, in line with the Cosyte brand voice. No rule, option, or behaviour change. ## [0.0.4] - 2026-06-26 @@ -72,7 +72,7 @@ pre-alpha rule. See ### Added -- Initial release of the ESLint 9 flat config: `recommendedTypeChecked` + the cosyte guardrails (no `any`, +- Initial release of the ESLint 9 flat config: `recommendedTypeChecked` + the Cosyte guardrails (no `any`, no unjustified casts, JSDoc + `@example` gate on public exports, `no-console` in library code). (`0.0.1` was never published.) diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md index b68912f..64a5605 100644 --- a/packages/eslint-config/README.md +++ b/packages/eslint-config/README.md @@ -7,7 +7,7 @@ # @cosyte/eslint-config -> The cosyte lint bar in one factory call: no `any`, no undocumented public export, no drift. +> The Cosyte lint bar in one factory call: no `any`, no undocumented public export, no drift. [![npm version](https://img.shields.io/npm/v/@cosyte/eslint-config.svg)](https://www.npmjs.com/package/@cosyte/eslint-config) [![CI](https://img.shields.io/github/actions/workflow/status/cosyte/config/ci.yml?branch=main&label=CI)](https://github.com/cosyte/config/actions/workflows/ci.yml) @@ -24,12 +24,12 @@ keeps a published API from shipping undocumented. Copied per repository, those r locally to unblock a release and stay relaxed. The nearest alternative is `eslint-config-airbnb` or a hand-rolled flat config per repo. Neither -encodes the cosyte rules, and neither closes the drift: this is a published package, so a rule added +encodes the Cosyte rules, and neither closes the drift: this is a published package, so a rule added here reaches every consumer as a version bump. ## Status -`@cosyte/eslint-config` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/eslint-config` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. The factory signature `cosyte(tsconfigRootDir, opts?)` is settling, but the RULE SET behind it is not: rules are added as the parsers find gaps, and a version bump can therefore red a consumer that diff --git a/packages/prettier-config/CHANGELOG.md b/packages/prettier-config/CHANGELOG.md index d4bb96c..074cc92 100644 --- a/packages/prettier-config/CHANGELOG.md +++ b/packages/prettier-config/CHANGELOG.md @@ -43,7 +43,7 @@ pre-alpha rule. See ### Changed -- Documentation no longer uses em dashes, in line with the cosyte brand voice. No setting +- Documentation no longer uses em dashes, in line with the Cosyte brand voice. No setting change. ## [0.0.2] - 2026-06-25 diff --git a/packages/prettier-config/README.md b/packages/prettier-config/README.md index 8047f5c..74fd1ba 100644 --- a/packages/prettier-config/README.md +++ b/packages/prettier-config/README.md @@ -7,7 +7,7 @@ # @cosyte/prettier-config -> One formatter setting sheet for every cosyte repository, adopted in a single line. +> One formatter setting sheet for every Cosyte repository, adopted in a single line. [![npm version](https://img.shields.io/npm/v/@cosyte/prettier-config.svg)](https://www.npmjs.com/package/@cosyte/prettier-config) [![CI](https://img.shields.io/github/actions/workflow/status/cosyte/config/ci.yml?branch=main&label=CI)](https://github.com/cosyte/config/actions/workflows/ci.yml) @@ -28,7 +28,7 @@ rather than ten pull requests. ## Status -`@cosyte/prettier-config` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/prettier-config` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the `printWidth` and the per-filetype overrides. Both are the kind of setting that reformats an entire repository when it changes, so a consumer that cares should pin an exact version diff --git a/packages/process/README.md b/packages/process/README.md index 2801f44..cb5f1ae 100644 --- a/packages/process/README.md +++ b/packages/process/README.md @@ -31,7 +31,7 @@ verb does, or to which version of a tool runs it, arrives as a version bump of t ## Status -`@cosyte/process` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/process` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the verb set itself (which verbs exist, and what each one invokes) and the override file's schema. Both are consumer-visible in a way a version bump can break, because a changed diff --git a/packages/script-utils/README.md b/packages/script-utils/README.md index c7046b3..c4d3ddd 100644 --- a/packages/script-utils/README.md +++ b/packages/script-utils/README.md @@ -20,7 +20,7 @@ Zero-dependency helpers for the repo-local gate scripts in @cosyte/\* repos. A gate script that exits 0 without having checked anything is worse than no gate, because the run conclusion is the only thing anyone reads. Two ways of producing one turned out to be universal -across the cosyte repositories: an entrypoint guard written by hand that answers `false` for ordinary +across the Cosyte repositories: an entrypoint guard written by hand that answers `false` for ordinary invocations, and thirteen byte-distinct copies of one PHI scanner, each of which had to be fixed separately when an escape was found. @@ -30,7 +30,7 @@ request and a version bump. ## Status -`@cosyte/script-utils` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/script-utils` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the `runPhiScan` option surface, which is where the per-repo axes below are still being argued about, and the cross-cutting detection floor, which gains patterns as escapes are found. A new @@ -246,7 +246,7 @@ Is this module the file Node was pointed at, rather than one imported by somethi #### Why not compare the strings -The obvious spelling is a one-liner, and several cosyte repos wrote it by hand: +The obvious spelling is a one-liner, and several Cosyte repos wrote it by hand: ```js // Do not do this. diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 1186f8f..24d9cd1 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -135,7 +135,7 @@ pre-alpha rule. See ### Changed - Documentation, source comments, the npm package description, and seven assertion-failure - message strings no longer use em dashes, in line with the cosyte brand voice. No API, type, or + message strings no longer use em dashes, in line with the Cosyte brand voice. No API, type, or behaviour change: the message strings are the diagnostics a failing conformance run prints. ## [0.0.1] - 2026-06-26 diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md index e4fd2f1..8e635f9 100644 --- a/packages/test-utils/README.md +++ b/packages/test-utils/README.md @@ -21,7 +21,7 @@ Framework-agnostic conformance test kit for the @cosyte/\* parsers: generic roun Every parser in this estate owes the same archetype invariants: round-trip, lenient parsing that never throws outside its sanctioned fatals, immutability, a stable warning-code surface, and no patient data on a diagnostic. Written per repository, those suites diverge, and an audit of thirteen -cosyte repos (2026-07-30) found every PHI test green over unreachable space. Those tests could not +Cosyte repos (2026-07-30) found every PHI test green over unreachable space. Those tests could not have failed. The nearest alternative is each parser writing its own property tests against `fast-check`. That is @@ -30,7 +30,7 @@ in each parser, so the thing that is hard to get right is written once and revie ## Status -`@cosyte/test-utils` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/test-utils` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the `./perf` subpath, whose ratio ceiling is an open question (see the "What it will not tell you" section below and the review triggers in ADR 0001), and the option surface of diff --git a/packages/tsconfig/CHANGELOG.md b/packages/tsconfig/CHANGELOG.md index ef1bcf7..4d7ba29 100644 --- a/packages/tsconfig/CHANGELOG.md +++ b/packages/tsconfig/CHANGELOG.md @@ -43,7 +43,7 @@ pre-alpha rule. See ### Changed -- Documentation no longer uses em dashes, in line with the cosyte brand voice. No +- Documentation no longer uses em dashes, in line with the Cosyte brand voice. No compiler-option change. ## [0.0.2] - 2026-06-25 diff --git a/packages/tsconfig/README.md b/packages/tsconfig/README.md index 4be55ad..3bda172 100644 --- a/packages/tsconfig/README.md +++ b/packages/tsconfig/README.md @@ -28,7 +28,7 @@ reaches every consumer as a version bump and `pnpm install`. ## Status -`@cosyte/tsconfig` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/tsconfig` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. The two config names (`base.json`, `library.json`) are stable in practice, but the option set inside them is not: compiler options are added as TypeScript ships them and as the parsers find gaps, and diff --git a/packages/tsup-config/CHANGELOG.md b/packages/tsup-config/CHANGELOG.md index 4db6478..55e90e6 100644 --- a/packages/tsup-config/CHANGELOG.md +++ b/packages/tsup-config/CHANGELOG.md @@ -43,7 +43,7 @@ pre-alpha rule. See ### Changed -- Documentation no longer uses em dashes, in line with the cosyte brand voice. No build-option +- Documentation no longer uses em dashes, in line with the Cosyte brand voice. No build-option change. ## [0.0.1] - 2026-06-25 diff --git a/packages/tsup-config/README.md b/packages/tsup-config/README.md index 44d8703..79fcf5e 100644 --- a/packages/tsup-config/README.md +++ b/packages/tsup-config/README.md @@ -7,7 +7,7 @@ # @cosyte/tsup-config -> One dual-format build baseline, so every cosyte library packs the same way. +> One dual-format build baseline, so every Cosyte library packs the same way. [![npm version](https://img.shields.io/npm/v/@cosyte/tsup-config.svg)](https://www.npmjs.com/package/@cosyte/tsup-config) [![CI](https://img.shields.io/github/actions/workflow/status/cosyte/config/ci.yml?branch=main&label=CI)](https://github.com/cosyte/config/actions/workflows/ci.yml) @@ -29,7 +29,7 @@ that uses it as a version bump. ## Status -`@cosyte/tsup-config` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/tsup-config` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the compile target and the treeshake and splitting settings, all three of which change what a consumer's published artifact looks like. The `cosyteTsup(options)` shape itself is the part diff --git a/packages/vitest-config/CHANGELOG.md b/packages/vitest-config/CHANGELOG.md index 643fef9..1abd92d 100644 --- a/packages/vitest-config/CHANGELOG.md +++ b/packages/vitest-config/CHANGELOG.md @@ -46,7 +46,7 @@ pre-alpha rule. See ### Changed -- Documentation and source comments no longer use em dashes, in line with the cosyte brand +- Documentation and source comments no longer use em dashes, in line with the Cosyte brand voice. No config or behaviour change. ## [0.0.2] - 2026-07-15 diff --git a/packages/vitest-config/README.md b/packages/vitest-config/README.md index 19aad0b..8482411 100644 --- a/packages/vitest-config/README.md +++ b/packages/vitest-config/README.md @@ -20,7 +20,7 @@ Shared Vitest config (v8 coverage, per-directory >=90 gates) for @cosyte/\* pack Coverage that is reported but not gated is a number nobody acts on, and a repo-wide threshold hides the one directory that has none: a package can sit at 92% overall while its serializer is at 40%. -The cosyte baseline gates per directory, and it ships enabled rather than as a setting each repo +The Cosyte baseline gates per directory, and it ships enabled rather than as a setting each repo remembers to switch on. The nearest alternative is a hand-written `vitest.config.ts` per repository with `coverage.thresholds` @@ -29,7 +29,7 @@ from: nothing in that alternative proves the examples in your documentation stil ## Status -`@cosyte/vitest-config` is on the cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. +`@cosyte/vitest-config` is on the Cosyte 0.1.x line: the public API is settled and bump types follow ordinary semver. Still moving: the coverage exclude list and the snippet-suite options (`runnableTag`, `resolve`, `requireSnippet`), which have changed shape as the first consumers adopted them. The 90 threshold and diff --git a/scripts/changeset-guard.mjs b/scripts/changeset-guard.mjs index 9e96b40..872ed75 100644 --- a/scripts/changeset-guard.mjs +++ b/scripts/changeset-guard.mjs @@ -112,7 +112,7 @@ function splitChangeset(contents) { * same rule the drift check follows. That is a real limitation and it is bounded in the right * direction: a frontmatter shape this cannot read is reported as unparseable (exit 2), never as * empty (exit 1) and never as fine (exit 0). The only shapes changesets itself writes, and the only - * ones any cosyte repo has ever committed, are `"name": type` and `name: type`, one per line, + * ones any Cosyte repo has ever committed, are `"name": type` and `name: type`, one per line, * optionally with a trailing `# comment`. * * KNOWN AND ACCEPTED: a YAML flow map (`{ "@cosyte/tsconfig": patch }`) or a block scalar splitting @@ -249,7 +249,7 @@ export function gradeChangeset(filename, contents, knownPackages) { ); } else if (split.summary.includes(EM_DASH)) { problems.push( - `its summary contains an em dash, which is banned on every cosyte surface and would reach ` + + `its summary contains an em dash, which is banned on every Cosyte surface and would reach ` + `a public release body through scripts/release-notes.mjs.`, ); } diff --git a/scripts/check-no-emdash.sh b/scripts/check-no-emdash.sh index 6c73e67..a8091d6 100755 --- a/scripts/check-no-emdash.sh +++ b/scripts/check-no-emdash.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash # scripts/check-no-emdash.sh -# Brand rule (founder directive, 2026-07-24): cosyte never uses the em dash. +# Brand rule (founder directive, 2026-07-24): Cosyte never uses the em dash. # The em dash (U+2014) reads as an AI tell, so it is banned outright across every -# cosyte surface. Source of truth: `knowledgebase/06-brand/voice-and-tone.md` +# Cosyte surface. Source of truth: `knowledgebase/06-brand/voice-and-tone.md` # ("No em dashes. Ever."), which names COMMIT MESSAGES explicitly. # # THIS FILE IS THE ONE IMPLEMENTATION OF THE EM-DASH GATE FOR THIS ESTATE, and config @@ -708,7 +708,7 @@ if [ "$MODE" = files ] || [ "$MODE" = stdin ]; then echo " NUL byte and a seeded em dash: no hit on stdout, no diagnostic on stderr," >&2 echo " exit 0. That is a scanner that cannot see its subject, and it is" >&2 echo " indistinguishable from a clean tree." >&2 - echo " The known cause is a \`grep\` interposed with -I forced (the cosyte dev" >&2 + echo " The known cause is a \`grep\` interposed with -I forced (the Cosyte dev" >&2 echo " container ships one as a shell function; \`export -f grep\` reaches a child" >&2 echo " script). Run this gate with a real GNU grep." >&2 exit 1 @@ -720,7 +720,7 @@ fail_with_hits() { echo "$hits" >&2 echo "" >&2 echo "ERROR: check-no-emdash - em dash (U+2014, or an encoded form) found in ${what}." >&2 - echo " cosyte never uses em dashes (founder directive; 06-brand/voice-and-tone.md)." >&2 + echo " Cosyte never uses em dashes (founder directive; 06-brand/voice-and-tone.md)." >&2 echo " Rewrite with a period, colon, comma, or parentheses. Never re-encode it." >&2 exit 1 } @@ -749,7 +749,7 @@ refuse_if_incomplete() { echo " has ever tracked. If it is the latter, read the BINARY POSTURE note in" >&2 echo " this script's header before changing anything." >&2 fi - echo " cosyte never uses em dashes (founder directive; 06-brand/voice-and-tone.md)." >&2 + echo " Cosyte never uses em dashes (founder directive; 06-brand/voice-and-tone.md)." >&2 fi if grep -qiv 'binary file' "$ERRLOG"; then echo "ERROR: check-no-emdash - the scan reported errors, so it did not read all of" >&2 diff --git a/scripts/parser-template/.changeset/README.md b/scripts/parser-template/.changeset/README.md index d89c3e8..551c02e 100644 --- a/scripts/parser-template/.changeset/README.md +++ b/scripts/parser-template/.changeset/README.md @@ -11,4 +11,4 @@ pnpm changeset ``` During pre-alpha, pick **patch**. That keeps the package on the `0.0.x` ladder until its first -alpha. See the cosyte version ladder in the meta-repo's `documentation/conventions.md`. +alpha. See the Cosyte version ladder in the meta-repo's `documentation/conventions.md`. diff --git a/scripts/parser-template/CHANGELOG.md b/scripts/parser-template/CHANGELOG.md index f846692..ddfad89 100644 --- a/scripts/parser-template/CHANGELOG.md +++ b/scripts/parser-template/CHANGELOG.md @@ -10,7 +10,7 @@ this file is maintained by hand (Changesets handles the version bump and publish ## [Unreleased] The first pre-alpha release (`0.0.1`) will ship the initial public API surface. The package begins -its public history at `0.0.x`, per the cosyte version ladder (`0.0.x` until first alpha). +its public history at `0.0.x`, per the Cosyte version ladder (`0.0.x` until first alpha). ### Added diff --git a/scripts/parser-template/src/index.ts b/scripts/parser-template/src/index.ts index 0ea69d4..af76923 100644 --- a/scripts/parser-template/src/index.ts +++ b/scripts/parser-template/src/index.ts @@ -1,7 +1,7 @@ /** * Public entry point for the `{{PKG}}` package. * - * This is the **archetype scaffold** for a cosyte standard parser (see the meta-repo's + * This is the **archetype scaffold** for a Cosyte standard parser (see the meta-repo's * `documentation/conventions.md` → "The standard parser archetype"). The real parser, model, * serializer, helpers, and profile system are populated in subsequent phases; these stubs keep the * module resolvable and typed so the build/typecheck/lint/test pipeline verifies end-to-end, and diff --git a/scripts/readme-check.mjs b/scripts/readme-check.mjs index 7ba9a0a..a9e730e 100644 --- a/scripts/readme-check.mjs +++ b/scripts/readme-check.mjs @@ -230,8 +230,8 @@ const SETTLED_API_CLAIMS = [ * alone. Erring the other way would refuse honest prose that merely names the number. */ const RETIRED_LADDER_CLAIMS = [ - [/\b0\.0\.x\b[^\n]{0,60}?\bladder\b/i, "the cosyte 0.0.x ladder"], - [/\bladder\b[^\n]{0,60}?\b0\.0\.x\b/i, "the cosyte 0.0.x ladder"], + [/\b0\.0\.x\b[^\n]{0,60}?\bladder\b/i, "the Cosyte 0.0.x ladder"], + [/\bladder\b[^\n]{0,60}?\b0\.0\.x\b/i, "the Cosyte 0.0.x ladder"], [/\b0\.0\.x\b[^\n]{0,40}?\buntil\b[^\n]{0,40}?\balpha\b/i, "the 0.0.x-until-first-alpha ladder"], ]; @@ -608,9 +608,9 @@ function isLadderLine(line) { */ export function statusSentence(name, line) { if (isLadderLine(line)) { - return `\`${name}\` is on the cosyte 0.0.x ladder: the public API is not yet settled and may change in any release.`; + return `\`${name}\` is on the Cosyte 0.0.x ladder: the public API is not yet settled and may change in any release.`; } - return `\`${name}\` is on the cosyte ${lineLabel(line)} line: the public API is settled and bump types follow ordinary semver.`; + return `\`${name}\` is on the Cosyte ${lineLabel(line)} line: the public API is settled and bump types follow ordinary semver.`; } /** diff --git a/scripts/release-notes.mjs b/scripts/release-notes.mjs index 0b676b6..431166d 100644 --- a/scripts/release-notes.mjs +++ b/scripts/release-notes.mjs @@ -348,7 +348,7 @@ export function assertNotes({ body, packageName, version }) { } if (body.includes(EM_DASH)) { - problems.push("the body contains an em dash, which is banned on every cosyte surface"); + problems.push("the body contains an em dash, which is banned on every Cosyte surface"); } if (!body.includes(`${packageName}@${version}`)) { diff --git a/test/configs.test.ts b/test/configs.test.ts index d66fc6e..dc8b1df 100644 --- a/test/configs.test.ts +++ b/test/configs.test.ts @@ -7,7 +7,7 @@ import tsconfigLibrary from "@cosyte/tsconfig/library.json"; import { cosyteTsup } from "@cosyte/tsup-config"; import { cosyteVitest } from "@cosyte/vitest-config"; -// Smoke tests: every exported config loads and encodes the ratified cosyte standard. +// Smoke tests: every exported config loads and encodes the ratified Cosyte standard. // This is the config repo "dogfooding" itself: if a config fails to import or drifts off the // standard, CI fails here. @@ -73,7 +73,7 @@ describe("@cosyte/vitest-config", () => { }); describe("@cosyte/prettier-config", () => { - it("uses the cosyte house style", () => { + it("uses the Cosyte house style", () => { expect(prettierConfig.printWidth).toBe(100); expect(prettierConfig.singleQuote).toBe(false); expect(prettierConfig.semi).toBe(true); diff --git a/test/readme-check.test.ts b/test/readme-check.test.ts index 88ca857..0879744 100644 --- a/test/readme-check.test.ts +++ b/test/readme-check.test.ts @@ -77,8 +77,8 @@ function nodeBadge(floor: string): string { */ function statusSentence(name: string, line: string): string { return line === "0.0.x" - ? `\`${name}\` is on the cosyte 0.0.x ladder: the public API is not yet settled and may change in any release.` - : `\`${name}\` is on the cosyte ${line} line: the public API is settled and bump types follow ordinary semver.`; + ? `\`${name}\` is on the Cosyte 0.0.x ladder: the public API is not yet settled and may change in any release.` + : `\`${name}\` is on the Cosyte ${line} line: the public API is settled and bump types follow ordinary semver.`; } interface PackageSpec { @@ -712,7 +712,7 @@ describe("readme-check: the Status sentence (AC6)", () => { workspaceWith([ { dir: "alpha", - mutate: (r) => r.replace("is on the cosyte 0.0.x ladder", "is on the 0.0.x ladder"), + mutate: (r) => r.replace("is on the Cosyte 0.0.x ladder", "is on the 0.0.x ladder"), }, ]), ); @@ -881,7 +881,7 @@ describe("readme-check: a retired ladder assertion anywhere in the file (AC3)", mutate: (r) => r.replace( "Because the fixture needs a section here.", - "This package is on the cosyte 0.0.x ladder.", + "This package is on the Cosyte 0.0.x ladder.", ), }, ]), @@ -900,7 +900,7 @@ describe("readme-check: a retired ladder assertion anywhere in the file (AC3)", mutate: (r) => r.replace( "Because the fixture needs a section here.", - "Every package follows the cosyte ladder: **`0.0.x` until first alpha**.", + "Every package follows the Cosyte ladder: **`0.0.x` until first alpha**.", ), }), ); @@ -920,7 +920,7 @@ describe("readme-check: a retired ladder assertion anywhere in the file (AC3)", mutate: (r) => r.replace( "Because the fixture needs a section here.", - "This package is on the cosyte 0.0.x ladder.", + "This package is on the Cosyte 0.0.x ladder.", ), }, ]), diff --git a/test/release-0-1-0-plan.test.ts b/test/release-0-1-0-plan.test.ts index db8ce49..b690872 100644 --- a/test/release-0-1-0-plan.test.ts +++ b/test/release-0-1-0-plan.test.ts @@ -90,7 +90,7 @@ const CHANGELOG_DUMP_MARKERS = [ * A line asserting that a package stays on the retired pre-alpha ladder. * * Both orders are matched because the repository wrote it both ways ("stays on the - * `0.0.x`-until-first-alpha ladder" and "follows the cosyte ladder: `0.0.x` until first alpha"). + * `0.0.x`-until-first-alpha ladder" and "follows the Cosyte ladder: `0.0.x` until first alpha"). * The window is deliberately bounded to one line: a version token and the word "ladder" sixty * characters apart on the same line is an assertion; the same two words in different paragraphs is * not, and a whole-file test would have to exempt every document that mentions the retirement. @@ -207,7 +207,7 @@ interface ChangesetFile { * Read the pending changesets. * * The frontmatter reader is the one-pair-per-line form `scripts/changeset-guard.mjs` documents as - * the only shape changesets itself writes and the only shape any cosyte repo has committed. A case + * the only shape changesets itself writes and the only shape any Cosyte repo has committed. A case * below cross-checks it against `parseChangeset` from `scripts/release-notes.mjs`, so this local * copy cannot be quietly wrong about which packages a file bumps. * @@ -827,7 +827,7 @@ describe("the repository states one version policy", () => { ).toBe(true); expect( LADDER_ASSERTION.test( - "Every package follows the cosyte ladder: **`0.0.x` until first alpha**.", + "Every package follows the Cosyte ladder: **`0.0.x` until first alpha**.", ), ).toBe(true); expect(LADDER_ASSERTION.test("this keeps each package on the `0.0.x` ladder")).toBe(true); diff --git a/vitest.config.ts b/vitest.config.ts index d58a31a..6b72df4 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "vitest/config"; // Plain config: this repo ships configs, not library source, so there is nothing to gate coverage on. -// The smoke tests in test/ assert each exported config is valid and encodes the cosyte standard. +// The smoke tests in test/ assert each exported config is valid and encodes the Cosyte standard. export default defineConfig({ test: { include: ["test/**/*.test.ts"],