Fountain-Store.git · FCIS_KIT.md
Fountain-Store.git / FCIS_KIT.md
revision 6583a4274428bd31c6ccca1431125dfced5d076e · complete file
# FCIS-KIT Declaration — Fountain-Store
Declared under [FCIS-KIT](https://github.com/Fountain-Coach/.github/blob/main/docs/FCIS-KIT-Standard.md) v1.0,
requirement **FCIS-KIT-01**.
```
FCIS-KIT:
owns:
- FountainStore: embedded ACID store — LSM engine, MVCC snapshots, WAL, secondary indexes,
and the change feed (StoreChange / changes()) added in v0.3.0
- FountainFTS: full-text search index over stored documents
- FountainVector: HNSW vector index over stored documents
- FountainStoreHTTP: admin/HTTP surface over the store
consumes:
- kit: swift-secretstore
mode: semver
requirement: from "0.1.0"
third-party-exceptions:
- package: swift-nio
capability: the HTTP server transport under FountainStoreHTTP
why-not-owned: Apple-maintained networking infrastructure; an owned reimplementation would be a
server transport project, not a store
accepted-by: pre-existing at adoption of FCIS-KIT (2026-08-02)
- package: swift-crypto
capability: hashing and checksums (WAL/SSTable block CRC, manifest integrity)
why-not-owned: Apple-maintained cryptographic primitives; Hard Rule 1 forbids FFI, and this is the
pure-Swift route to them
accepted-by: pre-existing at adoption of FCIS-KIT (2026-08-02)
```
## Notes on the seams
**The change feed is generic by construction** (FCIS-KIT-03). `StoreChange` carries
`(collection, id, sequence, kind)` and nothing else — it names *what changed*, never the value, and it knows
nothing of any consumer's vocabulary. A consumer maps `collection`/`id` back into its own domain on its own side
of the boundary. See `Sources/FountainStore/ChangeFeed.swift`.
**Consumers bind to seams, not to internals.** The public surface is `FountainStore`, `Collection<C>`, `Index<C>`,
`Snapshot`, `StoreChange` and the admin service. Nothing in this repository imports or is shaped by a consumer.
## Release history under this standard
| version | seam | notes |
| --- | --- | --- |
| v0.3.0 | `changes()` added; `Collection.put`/`delete`/`batch` routed through one transactional commit | First release cut under FCIS-KIT. Breaking behaviour: the `sequence:` parameter on `put`/`delete` is ignored — [release notes](https://github.com/Fountain-Coach/Fountain-Store/releases/tag/v0.3.0) |
Releases before v0.3.0 were tags without GitHub releases; FCIS-KIT-07 applies from v0.3.0 onward.
## Open compliance items
- Tags `v0.2.0-beta.1` through `v0.2.4` have no GitHub release and no notes naming their seams. They are
historical; FCIS-KIT-07 is not applied retroactively, and this is recorded rather than backfilled.