@panaversity/ksor 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/package.json +1 -1
- package/templates/scaffold/Dockerfile +6 -4
- package/templates/scaffold/dockerignore +28 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# @panaversity/ksor
|
|
2
2
|
|
|
3
|
+
## 0.0.26
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b90de22: Bound the container image: `.dockerignore` now denies everything and allows only
|
|
8
|
+
what the door needs.
|
|
9
|
+
|
|
10
|
+
The previous shape listed what to exclude, which cannot bound an image — it can
|
|
11
|
+
only exclude what someone thought of. A build output, a cache, a vendored
|
|
12
|
+
dependency or a backup directory in the project root all rode in, and the failure
|
|
13
|
+
arrived as a container registry rejecting the push (`PAYLOAD_TOO_LARGE`) rather
|
|
14
|
+
than as anything about the file that was added.
|
|
15
|
+
|
|
16
|
+
Now: `*`, then `!package.json`, `!instance.md`, and `system/gateways/` — this
|
|
17
|
+
door's own MCP registration. Everything else stays out, including the corpus (the
|
|
18
|
+
door serves from Postgres), the website (a separately hosted surface), and every
|
|
19
|
+
`.env` (a DSN baked into a layer is published to anyone who can pull the image).
|
|
20
|
+
|
|
21
|
+
The container acceptance job now reports the built image's size and fails past a
|
|
22
|
+
ceiling, so an allow-list that stops bounding it goes red here rather than at
|
|
23
|
+
someone's deploy.
|
|
24
|
+
|
|
25
|
+
## 0.0.25
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- ed2dce0: Fix the container serving the DEFAULT tool surface while the repository said
|
|
30
|
+
otherwise.
|
|
31
|
+
|
|
32
|
+
`.dockerignore` excluded all of `system/` — correct when that directory held only
|
|
33
|
+
the website, and wrong the moment the door's own registration moved into
|
|
34
|
+
`system/gateways/`. The file never reached the image, so a record that had
|
|
35
|
+
renamed its tools, dropped one, or written what it covers was deployed serving
|
|
36
|
+
none of it. Nothing went red: the door booted, `/health` was green, searches
|
|
37
|
+
returned cited hits, and only `tools/list` betrayed it.
|
|
38
|
+
|
|
39
|
+
It now excludes `system/site/`, and the Dockerfile copies the project rather than
|
|
40
|
+
naming files one at a time — which is how the door came to ship without the very
|
|
41
|
+
file that shapes its tool surface.
|
|
42
|
+
|
|
43
|
+
The container acceptance job now writes a customized registration before building
|
|
44
|
+
the image and asserts the served tool is the one that file names. Found by
|
|
45
|
+
deploying and looking at `tools/list`, which is the only thing that would have.
|
|
46
|
+
|
|
3
47
|
## 0.0.24
|
|
4
48
|
|
|
5
49
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panaversity/ksor",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"description": "Knowledge System of Record — compile governed markdown into a static site for people and an MCP server for AI agents, with citations and measured abstention.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"abstention",
|
|
@@ -22,10 +22,12 @@ WORKDIR /app
|
|
|
22
22
|
COPY package.json ./
|
|
23
23
|
RUN npm install --omit=dev --no-audit --no-fund
|
|
24
24
|
|
|
25
|
-
# The record's identity
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
|
|
25
|
+
# The record's identity, configuration, and its MCP registration
|
|
26
|
+
# (system/gateways/). What is deliberately ABSENT is decided in .dockerignore —
|
|
27
|
+
# the corpus, the website and every secret — rather than by listing files here:
|
|
28
|
+
# naming them one at a time is how the door came to ship without the very file
|
|
29
|
+
# that shapes its tool surface (found live).
|
|
30
|
+
COPY . ./
|
|
29
31
|
|
|
30
32
|
# Most container hosts inject PORT; 80 is a sane default when nothing does.
|
|
31
33
|
ENV PORT=80
|
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
#
|
|
1
|
+
# DENY EVERYTHING, then allow exactly what the door needs.
|
|
2
|
+
#
|
|
3
|
+
# The inverse — listing what to exclude — cannot bound the image, because it can
|
|
4
|
+
# only exclude what someone thought of. A build output, a cache, a backup
|
|
5
|
+
# directory or a vendored dependency in the project root all end up inside, and
|
|
6
|
+
# the failure arrives as a registry rejecting the push rather than as anything
|
|
7
|
+
# about the file you added (found live: PAYLOAD_TOO_LARGE).
|
|
8
|
+
#
|
|
9
|
+
# So: nothing ships unless it is named here.
|
|
10
|
+
*
|
|
2
11
|
|
|
3
|
-
#
|
|
4
|
-
|
|
5
|
-
.env
|
|
6
|
-
.env.*
|
|
7
|
-
!.env.example
|
|
12
|
+
# The manifest, which pins @panaversity/ksor and is what `npm install` reads.
|
|
13
|
+
!package.json
|
|
8
14
|
|
|
9
|
-
# The
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
knowledge/
|
|
15
|
+
# The record's identity and configuration. Its prose is the MCP server's
|
|
16
|
+
# instructions, so the door genuinely needs the file.
|
|
17
|
+
!instance.md
|
|
13
18
|
|
|
14
|
-
#
|
|
15
|
-
|
|
19
|
+
# This door's own MCP registration — what its tools are called, what it says it
|
|
20
|
+
# covers, and which of them exist. Excluding it makes the container serve the
|
|
21
|
+
# default surface while your repository says otherwise.
|
|
22
|
+
!system
|
|
23
|
+
system/*
|
|
24
|
+
!system/gateways
|
|
16
25
|
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
.
|
|
20
|
-
.
|
|
21
|
-
.
|
|
22
|
-
.
|
|
23
|
-
.
|
|
24
|
-
*.log
|
|
25
|
-
.DS_Store
|
|
26
|
-
.ksor-denylist.json
|
|
26
|
+
# Deliberately NOT here, and each for a reason:
|
|
27
|
+
# .env configuration arrives from the environment at run time; a DSN
|
|
28
|
+
# baked into a layer is published to anyone who can pull it.
|
|
29
|
+
# knowledge/ the door serves from Postgres. Copying the corpus in would
|
|
30
|
+
# suggest the container reads it, and it never does.
|
|
31
|
+
# system/site/ the other surface, built and hosted separately.
|
|
32
|
+
# node_modules/ installed inside the image, from the manifest above.
|