Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
16aed47
cortexkit-lease: shared-mode leases (acquire_shared) (#1)
ualtinok Jul 8, 2026
eb1ae99
cortexkit-model-catalog: shared models.dev representation (types + pa…
ualtinok Jul 18, 2026
ca0baa7
cortexkit-model-catalog: reject negative rates at the parse boundary …
ualtinok Jul 18, 2026
980f1ff
cortexkit-model-catalog: round sub-nanodollar precision half-even at …
ualtinok Jul 18, 2026
8067cf8
Add cortexkit-provider-usage: shared wire types for the quota usage.g…
ualtinok Jul 19, 2026
55b1400
cortexkit-provider-usage 0.2.0: add optional apiProvider field (#6)
ualtinok Jul 20, 2026
f725fdc
cortexkit-provider-usage 0.3.0: add optional usedCount + totalCount t…
ualtinok Jul 21, 2026
e132302
provider-usage: add errorClass, a machine-readable reason for a degra…
ualtinok Jul 28, 2026
49bcaa2
store: make the database, its WAL and lease files owner-only (#9)
ualtinok Jul 31, 2026
94486ed
docs: releasing a crate
ualtinok Aug 6, 2026
28f28f4
Say what absence means for every optional field (#10)
ualtinok Aug 7, 2026
48a7ea3
provider-usage: 0.4.1 for the absence documentation
ualtinok Aug 7, 2026
bc88d51
paths: address a project root after it has gone away
ualtinok Aug 8, 2026
12d9ff3
paths: 0.1.1 for the missing-root constructor
ualtinok Aug 8, 2026
b44c47e
paths: say that this canonical form is a cryptographic identity input
ualtinok Aug 9, 2026
aca7a53
own commons: record the owner, the publication state, and one trap
ualtinok Aug 9, 2026
a850151
push-seal: the sealer, reviewed and committed as commons owner
ualtinok Aug 9, 2026
2090a05
push-seal: hand-seal examples, so tonight's milestone needs no new code
ualtinok Aug 9, 2026
1e10ba9
push-seal: say why this crate has no production caller yet
ualtinok Aug 10, 2026
abc1147
push-seal: name the wrong-key hazard where the mispaste happens
ualtinok Aug 10, 2026
cca3031
push-seal: select the sealing key by label, and refuse prose by name
ualtinok Aug 10, 2026
584ffdc
push-seal: accept either separator in a labelled key block
ualtinok Aug 10, 2026
b812d88
Add prepaid balances and credit pools to ProviderUsage
ualtinok Aug 10, 2026
ec9a015
Stop an unknown pool kind from discarding the whole entry
ualtinok Aug 10, 2026
c63efe1
Merge pull request #11 from cortexkit/balance-axis
ualtinok Aug 10, 2026
ffdd06a
model-catalog: read tier thresholds from tier.tier.size, refuse when …
ualtinok Aug 11, 2026
528b680
model-catalog: gate tier dimension on tier.type == "context"; name th…
ualtinok Aug 11, 2026
7fe008f
provider-usage: used_count/total_count docs decoupled — the cap can b…
ualtinok Aug 12, 2026
7d8e415
provider-usage: disclose a reading served through an ongoing failure …
ualtinok Aug 13, 2026
483cad3
docs: lease store density finding parked by decision (BROCA measurement)
ualtinok Aug 14, 2026
d2208ed
docs: bind each lease-density re-open trigger to the seat that can ob…
ualtinok Aug 14, 2026
426d453
feat(model-catalog): PAYG remap format, parser, and conformance vectors
iceteaSA Aug 16, 2026
c82a72c
feat(model-catalog): optional effective_from, distinct from observed
iceteaSA Aug 22, 2026
8be18d6
fix(model-catalog): accept null effective_from, replace a vacuous ass…
iceteaSA Aug 22, 2026
4c8287e
feat(model-catalog): rate_time_banded, an explicit refusal for time-v…
iceteaSA Aug 23, 2026
ae8d7f4
test(model-catalog): every positive vector declares and asserts its p…
iceteaSA Aug 23, 2026
ec38420
fix(model-catalog): required provenance assertions, refuse duplicate …
iceteaSA Aug 24, 2026
4e5bbe3
fix(model-catalog): refuse duplicate keys at every level, not just en…
iceteaSA Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Ownership of record. Git attributes every commit here to the human account, so
# the repository could not answer "who owns this" from its own history -- which
# is how it went unowned while several repos built against it.
#
# Owned by the subc seat: direction, review, releases.
* @ualtinok

# NOT ENCODED HERE, DELIBERATELY: the vault seat holds a standing review
# obligation on cortexkit-store, cortexkit-lease, and cortexkit-paths
# canonicalization. Agent seats are not GitHub accounts, so CODEOWNERS cannot
# express it -- per-path lines naming the same account would look like a routing
# rule while routing nothing. The obligation is stated in README.md, where it is
# honest about being a convention rather than a mechanism.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[workspace]
resolver = "2"
members = ["crates/cortexkit-paths", "crates/cortexkit-lease", "crates/cortexkit-store-types", "crates/cortexkit-store", "crates/cortexkit-store-postgres", "crates/cortexkit-cache-core"]
members = ["crates/cortexkit-paths", "crates/cortexkit-lease", "crates/cortexkit-store-types", "crates/cortexkit-store", "crates/cortexkit-store-postgres", "crates/cortexkit-cache-core", "crates/cortexkit-model-catalog", "crates/cortexkit-provider-usage", "crates/cortexkit-push-seal"]

# cortexkit/commons — neutral home for cross-product CortexKit primitives.
# Shared by subc, AFT, and Magic Context. Each crate is published independently
Expand Down
50 changes: 48 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,59 @@

Neutral home for cross-product [CortexKit](https://github.com/cortexkit) primitives — small, dependency-light building blocks shared across **subc**, **AFT**, and **Magic Context** that belong to no single product.

Each crate is published independently to [crates.io](https://crates.io). Product repos depend on the published version, or on a sibling path-dependency for local development.
## Ownership

Maintained by the **subc** seat: direction, review, and releases.

Two crates carry a standing review obligation to the **claustrum** (vault) seat,
who must be routed any change to:

- `cortexkit-store` / `cortexkit-lease` — they run the only real-daemon test
exercising the single-writer lease across two processes.
- **`cortexkit-paths` canonicalization** — see the warning below.

That is a duty carried, not a veto held.

## Publication is per-crate, and most of these are NOT published

Measured 2026-08-09 against crates.io rather than inferred from release tags:

| state | crates |
|---|---|
| published | `cortexkit-paths` (0.1.1), `cortexkit-provider-usage` (0.4.1) |
| unpublished | the other six — by omission, none sets `publish = false` |

Release tags are **not** the authority on what is published: `provider-usage` has
five versions on crates.io and four tags. Ask the registry.

**Publishing a crate here is close to irreversible** — a version can be yanked but
never removed — and it creates a SECOND DISTRIBUTION PATH. A crate consumed only
by sibling path-dependencies has exactly one; publishing it means a consumer can
resolve a registry version while another repo's sibling checkout floats
elsewhere, and both can end up in one binary. That is already live: `claustrum`
compiles two copies of `cortexkit-paths` at the same version, one path and one
registry, agreeing only because the published bytes currently match.

So: publish only when an external consumer genuinely cannot use a path
dependency, and set `publish = false` explicitly with the reason at the key when
the answer is no.

## Version bumps are the only signal a path-dependency consumer gets

`Cargo.lock` records a path dependency as a bare version string with **no source
and no checksum**, so changed code compiles into every consuming repo with no
lockfile diff and nothing for `--locked` to catch. The version number is the
entire channel.

Bump on any change to observable behaviour or emitted bytes. Not for comments or
tests — a version that moves for prose trains readers to bump reflexively, which
is how it stops meaning anything.

## Crates

| Crate | Description |
|-------|-------------|
| [`cortexkit-paths`](crates/cortexkit-paths) | Path canonicalization → canonical project-root identity (`ProjectRootId`). Dependency-free, `#![forbid(unsafe_code)]`, cross-platform (incl. Windows verbatim/UNC/drive-case normalization). |
| [`cortexkit-paths`](crates/cortexkit-paths) | Path canonicalization → canonical project-root identity (`ProjectRootId`). Dependency-free, `#![forbid(unsafe_code)]`, cross-platform (incl. Windows verbatim/UNC/drive-case normalization). **Its canonical form is a cryptographic identity input** — the vault hashes it to derive the keychain service name holding its master key and the vault id fencing admin MACs. A canonicalization change breaks those and presents as a locked vault over an intact store, never as a path mismatch. The name reads as a path helper; it is not only that. |

## License

Expand Down
Loading