knosky 0.6.3 → 0.7.0

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +149 -93
  2. package/CREDITS.md +14 -14
  3. package/LICENSE.md +76 -76
  4. package/LIMITATIONS.md +33 -23
  5. package/PRIVACY.md +30 -30
  6. package/README.md +170 -117
  7. package/SECURITY.md +78 -46
  8. package/action/post-comment.mjs +94 -89
  9. package/action.yml +62 -62
  10. package/bin/knosky.mjs +279 -105
  11. package/core/CONTRACT.md +70 -70
  12. package/core/append-only-checkpoint.mjs +215 -0
  13. package/core/audit-writer.mjs +317 -0
  14. package/core/benchmark-results.mjs +225 -225
  15. package/core/bundle.mjs +178 -178
  16. package/core/churn.mjs +23 -23
  17. package/core/ci.mjs +268 -268
  18. package/core/comparison.mjs +189 -189
  19. package/core/config.mjs +189 -189
  20. package/core/constants.mjs +13 -13
  21. package/core/contract.mjs +123 -123
  22. package/core/cross-repo.mjs +111 -111
  23. package/core/decision-codes.mjs +92 -0
  24. package/core/destination.mjs +161 -161
  25. package/core/district-classification.mjs +111 -0
  26. package/core/doctor-scorecard.mjs +369 -0
  27. package/core/domain-store.mjs +347 -0
  28. package/core/edges.mjs +43 -43
  29. package/core/escalate.mjs +68 -68
  30. package/core/freshness.mjs +198 -194
  31. package/core/fs-indexer.mjs +218 -218
  32. package/core/key-store.mjs +348 -348
  33. package/core/layout.mjs +46 -46
  34. package/core/ledger.mjs +176 -141
  35. package/core/local-ipc-identity.mjs +500 -0
  36. package/core/lod.mjs +155 -155
  37. package/core/mode-b.mjs +410 -0
  38. package/core/multi-model-benchmark.mjs +405 -405
  39. package/core/net-lockdown.mjs +421 -0
  40. package/core/onboarding.mjs +223 -223
  41. package/core/operator-auth.mjs +317 -0
  42. package/core/overlays.mjs +45 -45
  43. package/core/policy-lattice.mjs +142 -0
  44. package/core/pr-comment.mjs +198 -198
  45. package/core/protocol-spec.mjs +460 -460
  46. package/core/provenance.mjs +320 -0
  47. package/core/retrieve.mjs +63 -63
  48. package/core/route.mjs +304 -304
  49. package/core/schema.mjs +275 -275
  50. package/core/signing-tiers.mjs +1265 -0
  51. package/core/swarm-bench.mjs +106 -0
  52. package/core/swarm-coordinator.mjs +867 -0
  53. package/core/trust-root-rekey.mjs +410 -0
  54. package/mcp/server.mjs +264 -108
  55. package/package.json +56 -46
  56. package/renderer/art/kenney/buildingTiles_sheet.xml +130 -130
  57. package/renderer/art/kenney/cityDetails_sheet.xml +12 -12
  58. package/renderer/art/kenney/landscapeTiles_sheet.xml +129 -129
  59. package/renderer/art/kenney/sheet_allCars.xml +545 -545
  60. package/renderer/build-rich.mjs +43 -43
  61. package/renderer/city.template.html +808 -808
  62. package/ssot/decision-codes.json +133 -0
  63. package/ssot/ladder-l0-l3.md +232 -0
  64. package/ssot/tool-menu.json +130 -0
@@ -0,0 +1,133 @@
1
+ {
2
+ "$schema_comment": "KnoSky DEC-108 / R3-D closed decision-code freeze. Identical list on protocol page, README, wiki, fixtures.",
3
+ "id": "knosky-decision-codes",
4
+ "version": "1.0.0",
5
+ "status": "draft-freeze",
6
+ "dec": ["DEC-108", "DEC-106"],
7
+ "last_updated": "2026-07-19",
8
+ "lattice_note": "policy-lattice.mjs uses DENY > ALLOW > NOT_APPLICABLE for rule combine. Protocol decision_code on the wire extends that with reason-specific DENY_* and Mode A label.",
9
+ "codes": [
10
+ {
11
+ "code": "ALLOW",
12
+ "http_analogy": 200,
13
+ "mode": "B",
14
+ "authorizing": true,
15
+ "metadata_disclosed": true,
16
+ "meaning": "Route/list/bundle returned under policy; audit receipt present.",
17
+ "client_hint": "Proceed using pointers; still open live files for truth."
18
+ },
19
+ {
20
+ "code": "DENY",
21
+ "http_analogy": 403,
22
+ "mode": "B",
23
+ "authorizing": false,
24
+ "metadata_disclosed": false,
25
+ "meaning": "No route; generic policy or authorization denial without subclass.",
26
+ "client_hint": "No authorized path; do not probe for hidden structure."
27
+ },
28
+ {
29
+ "code": "DENY_IDENTITY",
30
+ "http_analogy": 401,
31
+ "mode": "B",
32
+ "authorizing": false,
33
+ "metadata_disclosed": false,
34
+ "meaning": "Missing, unknown, expired/revoked lease, or spoofed agent identity.",
35
+ "client_hint": "Register/bind agent + valid lease before governed calls."
36
+ },
37
+ {
38
+ "code": "DENY_POLICY",
39
+ "http_analogy": 403,
40
+ "mode": "B",
41
+ "authorizing": false,
42
+ "metadata_disclosed": false,
43
+ "meaning": "Policy missing, invalid, unsigned when required, or explicit policy DENY.",
44
+ "client_hint": "Fix domain policy/governance; re-run kc_policy_check."
45
+ },
46
+ {
47
+ "code": "DENY_AUDIT",
48
+ "http_analogy": 503,
49
+ "mode": "B",
50
+ "authorizing": false,
51
+ "metadata_disclosed": false,
52
+ "meaning": "Ledger write or verify failed; fail closed — no ALLOW payload.",
53
+ "client_hint": "Check disk/permissions for audit ledger; retry later."
54
+ },
55
+ {
56
+ "code": "DENY_FRESHNESS",
57
+ "http_analogy": 409,
58
+ "mode": "B",
59
+ "authorizing": false,
60
+ "metadata_disclosed": false,
61
+ "meaning": "Map or evidence stale when freshness required.",
62
+ "client_hint": "Re-index / refresh map rev; retry."
63
+ },
64
+ {
65
+ "code": "DENY_EVIDENCE",
66
+ "http_analogy": 403,
67
+ "mode": "B",
68
+ "authorizing": false,
69
+ "metadata_disclosed": false,
70
+ "meaning": "Required security evidence failed (e.g. lockdown/evidence profile requirement).",
71
+ "client_hint": "Run knosky doctor; satisfy profile evidence or choose a lower claim profile."
72
+ },
73
+ {
74
+ "code": "ERROR_INVALID_INPUT",
75
+ "http_analogy": 400,
76
+ "mode": ["A", "B"],
77
+ "authorizing": false,
78
+ "metadata_disclosed": false,
79
+ "meaning": "Bad arguments / schema validation failure.",
80
+ "client_hint": "Fix tool arguments; see validation details (non-oracle)."
81
+ },
82
+ {
83
+ "code": "ERROR_INDEX",
84
+ "http_analogy": 500,
85
+ "mode": ["A", "B"],
86
+ "authorizing": false,
87
+ "metadata_disclosed": false,
88
+ "meaning": "City/index load missing or corrupt.",
89
+ "client_hint": "Build or repair local map index."
90
+ },
91
+ {
92
+ "code": "ADVISORY_UNAUTH",
93
+ "http_analogy": 200,
94
+ "mode": "A",
95
+ "authorizing": false,
96
+ "metadata_disclosed": true,
97
+ "meaning": "Explicit Mode A non-governed advisory navigation. Not authorized, not policy-certified, not swarm-safe.",
98
+ "client_hint": "Treat as structural tips only; verify before acting; do not claim governance.",
99
+ "aliases_rejected": ["ALLOW", "authorized", "swarm-safe"]
100
+ }
101
+ ],
102
+ "closed_set": [
103
+ "ALLOW",
104
+ "DENY",
105
+ "DENY_IDENTITY",
106
+ "DENY_POLICY",
107
+ "DENY_AUDIT",
108
+ "DENY_FRESHNESS",
109
+ "DENY_EVIDENCE",
110
+ "ERROR_INVALID_INPUT",
111
+ "ERROR_INDEX",
112
+ "ADVISORY_UNAUTH"
113
+ ],
114
+ "rules": [
115
+ "No open-string decision codes on the wire.",
116
+ "Mode B terminal ALLOW requires receipt_id.",
117
+ "All DENY_* and DENY must set metadata_disclosed=false for restricted data.",
118
+ "ADVISORY_UNAUTH must appear on Mode A route responses.",
119
+ "Pack smoke fixtures snapshot this closed_set.",
120
+ "CI gate: unknown code in responses fails release."
121
+ ],
122
+ "safe_deny_package": {
123
+ "required_fields": ["decision_code", "mode", "metadata_disclosed"],
124
+ "optional_fields": ["receipt_id", "next_action", "request_id"],
125
+ "forbidden_on_deny": [
126
+ "restricted path lists",
127
+ "blocked district node dumps",
128
+ "other agents lease inventories",
129
+ "file bodies",
130
+ "secrets"
131
+ ]
132
+ }
133
+ }
@@ -0,0 +1,232 @@
1
+ # KnoSky Guarantee Ladder L0–L3 (SSOT)
2
+
3
+ ```yaml
4
+ ---
5
+ id: knosky-ladder-l0-l3
6
+ version: 1.0.0
7
+ status: draft-freeze
8
+ dec: DEC-110
9
+ last_updated: 2026-07-19
10
+ consumers:
11
+ - README.md / SECURITY.md / PRIVACY.md
12
+ - knosky.com /trust and /product
13
+ - knosky.wiki govern/ladder
14
+ - knosky doctor claim_ceiling
15
+ - pack onboarding blurbs
16
+ ---
17
+ ```
18
+
19
+ ## Purpose
20
+
21
+ Public, checkable promises for installers and agents. **Never claim a higher level than `knosky doctor` reports for that install.**
22
+
23
+ Related freezes:
24
+
25
+ - Tool menu → `tool-menu.json` (DEC-108)
26
+ - Decision codes → `decision-codes.json` (DEC-108 / DEC-106)
27
+ - Architecture → DOC-02; threat model → DOC-05
28
+
29
+ ---
30
+
31
+ ## Ladder at a glance
32
+
33
+ | Level | Name | One-line promise | Mode |
34
+ | :---: | :--- | :--- | :--- |
35
+ | **L0** | Local map | Index and navigate locally; **no KnoSky upload by default** | Map / Mode A |
36
+ | **L1** | Share-safe artifact | Artifact suitable to share only after **fail-closed secret controls** | Share tooling |
37
+ | **L2** | Governed evaluator | **Mode B**: identity + policy + audit receipt (or safe DENY) before authorized routes | Mode B |
38
+ | **L3** | Swarm domain | **Full coordinator** on Mode B: leases, quotas, backpressure, claims, fairness, multi-agent audit, anti-probe, ops heatmap, benchmarks | Mode B + L3 |
39
+
40
+ ---
41
+
42
+ ## L0 — Local map
43
+
44
+ ### Promise
45
+
46
+ - Runs on the operator machine / domain.
47
+ - Builds a **map of pointers and short projections**, not a body store (DEC-107).
48
+ - Core path does **not** require a KnoSky account or always-on telemetry (DEC-114).
49
+
50
+ ### You may say
51
+
52
+ - “Local map”, “citations”, “where to look first”, “MCP map tools”
53
+
54
+ ### You must not say
55
+
56
+ - “Authorized”, “policy-enforced”, “swarm-safe”, “zero data risk”
57
+
58
+ ### Checks (doctor / tests)
59
+
60
+ - Index builds without required egress
61
+ - CONTRACT allowlist: no bodies in index
62
+ - Tier 0 tools available
63
+
64
+ ---
65
+
66
+ ## L1 — Share-safe artifact
67
+
68
+ ### Promise
69
+
70
+ - Share/export path runs **secret-like detection** and **fails closed** on hits (explicit operator override only).
71
+ - Absolute roots stripped to basename by default.
72
+ - Operator still reviews before publishing (honest residual risk).
73
+
74
+ ### You may say
75
+
76
+ - “Share-safe city/bundle”, “failed closed on secrets”, “review before share”
77
+
78
+ ### You must not say
79
+
80
+ - “Guaranteed free of all secrets forever”, “safe for any public unauth multi-tenant host without review”
81
+
82
+ ### Checks
83
+
84
+ - Seeded secret fixture fails share-safe build
85
+ - Safety report emitted
86
+ - Demo corpus uses share-safe artifacts only
87
+
88
+ ---
89
+
90
+ ## L2 — Governed evaluator (Mode B)
91
+
92
+ ### Promise
93
+
94
+ Any claim of **authorized / governed / policy-checked** routing requires:
95
+
96
+ 1. Bound **identity** (authoritative agent; lease store pattern — no payload spoof)
97
+ 2. **Policy lattice** decision + district classification → authorized subgraph
98
+ 3. **Audit receipt** written (metadata-only) before ALLOW payload
99
+ 4. Otherwise **DENY_*** with **no restricted metadata**
100
+
101
+ Decision codes: see `decision-codes.json` (`ALLOW`, `DENY_*`, errors). Mode A may still exist **only** if labeled `ADVISORY_UNAUTH`.
102
+
103
+ ### You may say
104
+
105
+ - “Governed route”, “authorized subgraph”, “policy-checked”, “audit-backed decision”
106
+
107
+ ### You must not say
108
+
109
+ - That plain advisory MCP (today’s unlabeled path) is L2
110
+ - “Kernel no-egress proven on Windows” when doctor reports unsupported (F0.5 honesty)
111
+
112
+ ### Checks
113
+
114
+ - Anonymous governed call → `DENY_IDENTITY`
115
+ - Audit failure → `DENY_AUDIT` and no route body
116
+ - Policy deny does not leak restricted paths
117
+ - Doctor `mode_b_ready` green
118
+ - Menu SSOT matches binary
119
+
120
+ ### Platform honesty
121
+
122
+ | Platform | Lockdown |
123
+ | :--- | :--- |
124
+ | Linux | Real enforcement path when tools present |
125
+ | macOS | Partial / network-oriented |
126
+ | Windows | Doctor must report **unsupported/inactive** until packaging proves otherwise |
127
+
128
+ ---
129
+
130
+ ## L3 — Swarm domain (full coordinator)
131
+
132
+ ### Promise (DEC-113 — Wave 1 floor is **full**, not label-only)
133
+
134
+ On top of green L2:
135
+
136
+ | Capability | Required |
137
+ | :--- | :---: |
138
+ | Distinct agent identities | YES |
139
+ | Route leases (issue/renew/expire/bind) | YES |
140
+ | Quotas | YES |
141
+ | Backpressure | YES |
142
+ | File/district claims (traffic, not VCS locks) | YES |
143
+ | Fairness / conflict rules | YES |
144
+ | Multi-agent audit stream | YES |
145
+ | Operator swarm dashboard / heatmap | YES |
146
+ | Anti-probe defenses | YES |
147
+ | Swarm benchmarks | YES |
148
+
149
+ ### You may say
150
+
151
+ - “Swarm-coordinated”, “lease-governed multi-agent routing”, “domain swarm-safe under policy”
152
+
153
+ ### You must not say
154
+
155
+ - “Swarm-safe” when only the lease helper exists
156
+ - Multi-tenant **cloud** swarm isolation (DEC-109 non-goal)
157
+ - Preview-only labeling as the Wave 1 floor (would need **new DEC** to thin)
158
+
159
+ ### Checks
160
+
161
+ - Doctor `l3_ready` green
162
+ - Lease reuse / spoof denials
163
+ - Coordinator down + `require_route_lease` → fail closed
164
+ - Swarm benchmarks in release gate set
165
+ - Claims lint blocks L3 marketing if doctor ceiling < L3
166
+
167
+ ### Prerequisite law
168
+
169
+ ```text
170
+ L3 ⊆ requires L2 Mode B identity + policy + audit
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Claim ceiling algorithm (normative)
176
+
177
+ ```text
178
+ ceiling = L0
179
+ if share_safe_controls_green: ceiling = max(ceiling, L1)
180
+ if mode_b_composition_green and doctor.mode_b_ready: ceiling = max(ceiling, L2)
181
+ if full_l3_modules_green and doctor.l3_ready: ceiling = max(ceiling, L3)
182
+ if windows and claim needs kernel_lockdown_evidence: do not raise L2 badge on lockdown_is_proven
183
+ public_copy.claim_level must be <= ceiling
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Adoption profiles (language only; detailed FR in DOC-01)
189
+
190
+ | Profile | Typical ceiling intent |
191
+ | :--- | :--- |
192
+ | Solo | L0–L1 fast path; explicit Mode A OK |
193
+ | Team | L2 Mode B default for governed tools |
194
+ | Regulated | L2+ with evidence requirements; security profile; Windows honesty loud |
195
+
196
+ ---
197
+
198
+ ## Metrics relationship (DEC-114)
199
+
200
+ Ladder honesty is independent of adoption metrics:
201
+
202
+ - **No always-on telemetry** at any L
203
+ - Opt-in counters default **OFF**
204
+ - Public benchmarks may support proof without elevating ladder by slogans alone
205
+
206
+ ---
207
+
208
+ ## Banned overclaim phrases (claims lint seeds)
209
+
210
+ Do not use without matching doctor ceiling + evidence:
211
+
212
+ - zero-risk / zero data risk
213
+ - fully understands your codebase
214
+ - SOC2 certified (unless true externally)
215
+ - multi-tenant SaaS isolation (W1)
216
+ - swarm-safe (unless L3 green)
217
+ - authorized / policy-enforced (unless L2 green)
218
+ - Windows kernel no-egress guaranteed (unless doctor proves)
219
+
220
+ ---
221
+
222
+ ## Change control
223
+
224
+ | Version | Date | Notes |
225
+ | :--- | :--- | :--- |
226
+ | 1.0.0 | 2026-07-19 | Initial SSOT freeze draft for Wave 1 surfaces |
227
+
228
+ Edits require DEC-110 revisit or superseding DEC; bump version; regenerate README/wiki/com renders.
229
+
230
+ ---
231
+
232
+ *SSOT ladder — bind all public L0–L3 language to this file.*
@@ -0,0 +1,130 @@
1
+ {
2
+ "$schema_comment": "KnoSky DEC-108 tool menu SSOT — Wave 1 freeze. README = wiki = site = binary must match.",
3
+ "id": "knosky-tool-menu",
4
+ "version": "1.0.0",
5
+ "status": "draft-freeze",
6
+ "dec": "DEC-108",
7
+ "last_updated": "2026-07-19",
8
+ "profiles": {
9
+ "coding": {
10
+ "description": "Default agent packs (Hermes, Claude Code, Cursor, Codex CLI, VS Code MCP). No audit ledger tools.",
11
+ "includes_tiers": ["tier0_map", "tier1_governed"]
12
+ },
13
+ "security": {
14
+ "description": "Operator / security / CI verify profile. Includes coding tools plus audit tools.",
15
+ "includes_tiers": ["tier0_map", "tier1_governed", "security_audit"]
16
+ },
17
+ "advisory": {
18
+ "description": "Explicit non-authorizing exploration. Mode A labels required. Must not be marketed as governed.",
19
+ "includes_tiers": ["tier0_map"],
20
+ "allows_mode_a_route": true
21
+ }
22
+ },
23
+ "tiers": {
24
+ "tier0_map": {
25
+ "name": "Tier 0 map",
26
+ "authorizing": false,
27
+ "label_when_no_policy": "non-authorizing map",
28
+ "tools": [
29
+ {
30
+ "name": "kc_search",
31
+ "summary": "Search map nodes by text/metadata over the city index.",
32
+ "mode_default": "A",
33
+ "profiles": ["coding", "security", "advisory"]
34
+ },
35
+ {
36
+ "name": "kc_get_node",
37
+ "summary": "Fetch a single node projection by id.",
38
+ "mode_default": "A",
39
+ "profiles": ["coding", "security", "advisory"]
40
+ },
41
+ {
42
+ "name": "kc_list_categories",
43
+ "summary": "List category/district manifest entries.",
44
+ "mode_default": "A",
45
+ "profiles": ["coding", "security", "advisory"]
46
+ },
47
+ {
48
+ "name": "kc_get_provenance",
49
+ "summary": "Return provenance pointers for a node (live SoT refs).",
50
+ "mode_default": "A",
51
+ "profiles": ["coding", "security", "advisory"]
52
+ },
53
+ {
54
+ "name": "kc_related",
55
+ "summary": "Related nodes via map edges (tests/docs/neighbors).",
56
+ "mode_default": "A",
57
+ "profiles": ["coding", "security", "advisory"]
58
+ }
59
+ ]
60
+ },
61
+ "tier1_governed": {
62
+ "name": "Tier 1 governed",
63
+ "authorizing": true,
64
+ "requires_mode_b_for_allow": true,
65
+ "tools": [
66
+ {
67
+ "name": "kc_route",
68
+ "summary": "Route GPS toward a destination. Dual-mode: Mode B ALLOW/DENY_* with receipt, or labeled Mode A ADVISORY_UNAUTH.",
69
+ "mode_default": "B",
70
+ "dual_mode": true,
71
+ "profiles": ["coding", "security"],
72
+ "advisory_profile": "advisory",
73
+ "decision_codes_used": true
74
+ },
75
+ {
76
+ "name": "kc_bundle",
77
+ "summary": "Build share-oriented intent-manifest/bundle under same gates + fail-closed secret scan.",
78
+ "mode_default": "B",
79
+ "profiles": ["coding", "security"],
80
+ "decision_codes_used": true
81
+ },
82
+ {
83
+ "name": "kc_policy_check",
84
+ "summary": "Dry-run policy decision + reasons without full route body.",
85
+ "mode_default": "B",
86
+ "profiles": ["coding", "security"],
87
+ "decision_codes_used": true
88
+ }
89
+ ]
90
+ },
91
+ "security_audit": {
92
+ "name": "Security profile only",
93
+ "authorizing": false,
94
+ "profiles_only": ["security"],
95
+ "tools": [
96
+ {
97
+ "name": "kc_audit_query",
98
+ "summary": "Query local route/swarm decision audit events (metadata-only).",
99
+ "mode_default": "B",
100
+ "profiles": ["security"],
101
+ "forbidden_profiles": ["coding", "advisory"]
102
+ },
103
+ {
104
+ "name": "kc_audit_verify",
105
+ "summary": "Verify audit chain / receipt integrity.",
106
+ "mode_default": "B",
107
+ "profiles": ["security"],
108
+ "forbidden_profiles": ["coding", "advisory"]
109
+ }
110
+ ]
111
+ }
112
+ },
113
+ "pack_matrix": {
114
+ "P0": ["hermes", "claude-code", "cursor", "codex-cli"],
115
+ "P1": ["vscode-mcp", "greptile-recipe", "gha-pr-gps"],
116
+ "default_profile_for_packs": "coding",
117
+ "must_not_include_on_coding_packs": ["kc_audit_query", "kc_audit_verify"]
118
+ },
119
+ "release_gates": [
120
+ "AR-03: README tool list == wiki tool list == knosky.com protocol summary == this file == mcp registerTool names",
121
+ "Mode A tools/responses must carry ADVISORY_UNAUTH when non-governed",
122
+ "Mode B ALLOW requires identity + policy + audit receipt",
123
+ "Decision codes closed set from decision-codes.json"
124
+ ],
125
+ "non_goals": [
126
+ "Multi-tenant SaaS tool surface",
127
+ "Audit tools on default coding packs",
128
+ "Wave 2 native app exclusive tools as W1 dependencies"
129
+ ]
130
+ }