@c4a/context-cli 0.7.12 → 0.7.13

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "protocol": "context.indexer.cli-release-manifest/v1",
3
3
  "package": "@c4a/context-cli",
4
- "version": "0.7.12",
4
+ "version": "0.7.13",
5
5
  "issuer": "context4ai/context",
6
6
  "bundles": [
7
7
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c4a/context-cli",
3
- "version": "0.7.12",
3
+ "version": "0.7.13",
4
4
  "type": "module",
5
5
  "description": "Local runtime and Agent integration for traceable knowledge production",
6
6
  "license": "MIT",
@@ -24,17 +24,17 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@c4a/agent-graph": "0.3.0",
27
- "@c4a/context": "0.7.12",
28
- "@c4a/extract": "0.7.12",
29
- "@c4a/extract-contract": "0.7.12",
30
- "@c4a/extract-go": "0.7.12",
31
- "@c4a/extract-mdx": "0.7.12",
32
- "@c4a/extract-proto": "0.7.12",
33
- "@c4a/extract-rush": "0.7.12",
34
- "@c4a/extract-sql": "0.7.12",
35
- "@c4a/extract-style": "0.7.12",
36
- "@c4a/extract-thrift": "0.7.12",
37
- "@c4a/extract-ts": "0.7.12",
27
+ "@c4a/context": "0.7.13",
28
+ "@c4a/extract": "0.7.13",
29
+ "@c4a/extract-contract": "0.7.13",
30
+ "@c4a/extract-go": "0.7.13",
31
+ "@c4a/extract-mdx": "0.7.13",
32
+ "@c4a/extract-proto": "0.7.13",
33
+ "@c4a/extract-rush": "0.7.13",
34
+ "@c4a/extract-sql": "0.7.13",
35
+ "@c4a/extract-style": "0.7.13",
36
+ "@c4a/extract-thrift": "0.7.13",
37
+ "@c4a/extract-ts": "0.7.13",
38
38
  "commander": "^11.0.0",
39
39
  "fast-xml-parser": "^5.10.1",
40
40
  "handlebars": "^4.7.8",
@@ -4545,7 +4545,18 @@ var init_packageSite = __esm(() => {
4545
4545
  description: exports_external.string().optional(),
4546
4546
  lang: exports_external.string().min(1).default("en-US"),
4547
4547
  base: exports_external.string().regex(/^\/(?:[a-zA-Z0-9_-]+\/)*$/, "Use / or a slash-delimited deployment path, such as /docs/").default("/"),
4548
- home: packageSiteHomeSchema.optional()
4548
+ home: packageSiteHomeSchema.optional(),
4549
+ extensions: exports_external.object({
4550
+ root: exports_external.string().regex(/^src\/(?:[a-zA-Z0-9_-]+\/)*[a-zA-Z0-9_-]+$/).default("src/site"),
4551
+ slots: exports_external.object({
4552
+ banner: exports_external.union([exports_external.string().min(1), exports_external.literal(false)]).optional(),
4553
+ knowledge: exports_external.union([exports_external.string().min(1), exports_external.literal(false)]).optional(),
4554
+ resources: exports_external.union([exports_external.string().min(1), exports_external.literal(false)]).optional(),
4555
+ footer: exports_external.union([exports_external.string().min(1), exports_external.literal(false)]).optional(),
4556
+ floating: exports_external.union([exports_external.string().min(1), exports_external.literal(false)]).optional()
4557
+ }).strict().optional(),
4558
+ pages: exports_external.record(exports_external.string().regex(/^[a-zA-Z0-9_-]+$/), exports_external.string().min(1)).optional()
4559
+ }).strict().optional()
4549
4560
  }).strict();
4550
4561
  });
4551
4562
 
package/plugins/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.12
1
+ 0.7.13
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "c4a",
3
3
  "description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
4
- "version": "0.7.12",
4
+ "version": "0.7.13",
5
5
  "author": {
6
6
  "name": "c4a"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c4a",
3
- "version": "0.7.12",
3
+ "version": "0.7.13",
4
4
  "description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
5
5
  "author": { "name": "c4a" },
6
6
  "homepage": "https://github.com/context4ai/c4a",
@@ -10,7 +10,7 @@
10
10
  "skills": "./skills/",
11
11
  "interface": {
12
12
  "displayName": "C4A Context",
13
- "shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.12",
13
+ "shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.13",
14
14
  "longDescription": "Create a Context workspace and use agent-guided next steps to register sources, run extraction, review candidates, build package outputs, and verify health without silently mutating source repositories.",
15
15
  "developerName": "c4a",
16
16
  "category": "Productivity",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "c4a",
3
3
  "displayName": "C4A Context",
4
- "version": "0.7.12",
4
+ "version": "0.7.13",
5
5
  "description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
6
6
  "author": {
7
7
  "name": "Context4AI",
@@ -135,7 +135,7 @@ nodes:
135
135
  reasonCode: route.capture.pending-target
136
136
  action: actions/capture-next.yaml
137
137
  satisfiedBy:
138
- - path: capture.complete
138
+ - path: capture.route_satisfied
139
139
  equals: true
140
140
  resources:
141
141
  required:
@@ -224,6 +224,7 @@ nodes:
224
224
  - resources/views/package-current.yaml
225
225
  recommended:
226
226
  - resources/manuals/guides/package-outputs.md
227
+ - resources/manuals/guides/page-customization.md
227
228
  - resources/manuals/reference/package-templates.md
228
229
  - resources/manuals/reference/template-variables.md
229
230
 
@@ -241,6 +242,7 @@ nodes:
241
242
  - resources/views/package-current.yaml
242
243
  recommended:
243
244
  - resources/manuals/guides/package-outputs.md
245
+ - resources/manuals/guides/page-customization.md
244
246
  - resources/manuals/reference/project-api.md
245
247
  - resources/manuals/reference/package-templates.md
246
248
  - resources/manuals/reference/template-variables.md
@@ -2,7 +2,7 @@
2
2
  "schema": "agent-graph.bundle.v1",
3
3
  "provider": {
4
4
  "id": "c4a/context",
5
- "version": "0.7.12"
5
+ "version": "0.7.13"
6
6
  },
7
7
  "providerManifest": "provider.yaml",
8
8
  "graphs": [
@@ -14,7 +14,7 @@
14
14
  {
15
15
  "id": "workspace",
16
16
  "path": "graphs/workspace.yaml",
17
- "digest": "sha256:43eba7c45070fc2fec9c1f86af8e6190c49ebef8b729cb444701011dca8780be"
17
+ "digest": "sha256:2904eb61889037ffdcdf878c807187f9acf807a9409111ee4de4c5b703b15d5d"
18
18
  }
19
19
  ],
20
20
  "actions": [
@@ -188,17 +188,22 @@
188
188
  {
189
189
  "id": "context.sdk.package-outputs",
190
190
  "path": "resources/manuals/guides/package-outputs.md",
191
- "digest": "sha256:a8c66facc2ad175324796e2478d6ca50e0c83b5d49eec0251d8548c3717a062b"
191
+ "digest": "sha256:31d1159d9c591755c1f7560928c230a86a84a33f0bd86d1866d4eb94078c075f"
192
192
  },
193
193
  {
194
194
  "id": "context.sdk.package-templates",
195
195
  "path": "resources/manuals/reference/package-templates.md",
196
196
  "digest": "sha256:8d512d232ea5157717eca73357a213ab2449d83cf98bec217621aff79eda0216"
197
197
  },
198
+ {
199
+ "id": "context.sdk.page-customization",
200
+ "path": "resources/manuals/guides/page-customization.md",
201
+ "digest": "sha256:57695bbbe3223c3c695029747856baae9e230059848e8f37506f908e843f9b0e"
202
+ },
198
203
  {
199
204
  "id": "context.sdk.project-api",
200
205
  "path": "resources/manuals/reference/project-api.md",
201
- "digest": "sha256:6225dc08f1a4362eee72e0fba4d8639d20d535818766d8a6b181396ebbb94f3f"
206
+ "digest": "sha256:a65131d5cd351d8353f5028303ab1d75447f5d0c09496fd8ec83bb5d76adfd78"
202
207
  },
203
208
  {
204
209
  "id": "context.sdk.template-variables",
@@ -278,12 +283,12 @@
278
283
  {
279
284
  "id": "procedure.close-and-build",
280
285
  "path": "resources/procedures/close-and-build.md",
281
- "digest": "sha256:c2f39abc2867e73a529ded2e475276738f62a4b61811b7792a49d6e358865a74"
286
+ "digest": "sha256:4025f98f95ac0c1818d2be3d6c33e556bd462b0510fd88227587d490ae01aa4c"
282
287
  },
283
288
  {
284
289
  "id": "procedure.document-capture",
285
290
  "path": "resources/procedures/document-capture.md",
286
- "digest": "sha256:46a8231e92fcb19db7918938970ace8b4e4c22153fa8cbf0bb8100275bfbbfcf"
291
+ "digest": "sha256:f09100425c2b89a126c35c4490b0644519a4eee214114f2f0f52b6ea20467a04"
287
292
  },
288
293
  {
289
294
  "id": "procedure.homogeneous-source-review",
@@ -293,7 +298,7 @@
293
298
  {
294
299
  "id": "procedure.knowledge-maintenance",
295
300
  "path": "resources/procedures/knowledge-maintenance.md",
296
- "digest": "sha256:42fc008c8b25df86b7a1e26d521003bc8e3a69cf16948365e93c41f896c0c315"
301
+ "digest": "sha256:f2cc36cb2425cf0ac96a2ea4f114ed5ce872c3711b82bdc25fdc71e42a2849b7"
297
302
  },
298
303
  {
299
304
  "id": "procedure.knowledge-review",
@@ -303,7 +308,7 @@
303
308
  {
304
309
  "id": "procedure.knowledge-updates",
305
310
  "path": "resources/procedures/knowledge-updates.md",
306
- "digest": "sha256:f26726fc3264337200608e73f9ac20397016d6e3319ae8def6bf2a768630ae96"
311
+ "digest": "sha256:f43943fdf9265e5181c2e8cf3753d981fc9f59a44ee11b5beac404ec481344ea"
307
312
  },
308
313
  {
309
314
  "id": "procedure.note",
@@ -328,7 +333,7 @@
328
333
  {
329
334
  "id": "procedure.production-stage-files",
330
335
  "path": "resources/procedures/production-stage-files.md",
331
- "digest": "sha256:c5ff9e138ecd3f90d04ac834a82b2764f583da105ca23e3e07dfb816349d6c32"
336
+ "digest": "sha256:d093acf81a07b85cfe2a78e71f7ab301fa8c72e3edac3f5de990b1ff7eaf12f0"
332
337
  },
333
338
  {
334
339
  "id": "procedure.project-configuration",
@@ -561,11 +566,11 @@
561
566
  },
562
567
  {
563
568
  "path": "graphs/workspace.yaml",
564
- "digest": "sha256:43eba7c45070fc2fec9c1f86af8e6190c49ebef8b729cb444701011dca8780be"
569
+ "digest": "sha256:2904eb61889037ffdcdf878c807187f9acf807a9409111ee4de4c5b703b15d5d"
565
570
  },
566
571
  {
567
572
  "path": "provider.yaml",
568
- "digest": "sha256:9916bad3dd3172994e821c3e8b9e28fedeb1f833edaa5182512f18f43901bd4e"
573
+ "digest": "sha256:74fa6ece89e6d9f654ea0fa3b988488883f3b55b747e436db0eb31a420e66f78"
569
574
  },
570
575
  {
571
576
  "path": "resources/contracts/indexer-provider-guide.yaml",
@@ -621,7 +626,7 @@
621
626
  },
622
627
  {
623
628
  "path": "resources/manuals/guides/knowledge-updates.md",
624
- "digest": "sha256:18f9088eaab56ed92b5c131136de7f5527ece738a6bef3a605608d220f62ec28"
629
+ "digest": "sha256:fe8c9e4dbe7413bce3c2007bf230f1312fca31de69d434d0c41171a27e1a68f5"
625
630
  },
626
631
  {
627
632
  "path": "resources/manuals/guides/lark-resources.md",
@@ -637,7 +642,11 @@
637
642
  },
638
643
  {
639
644
  "path": "resources/manuals/guides/package-outputs.md",
640
- "digest": "sha256:a8c66facc2ad175324796e2478d6ca50e0c83b5d49eec0251d8548c3717a062b"
645
+ "digest": "sha256:31d1159d9c591755c1f7560928c230a86a84a33f0bd86d1866d4eb94078c075f"
646
+ },
647
+ {
648
+ "path": "resources/manuals/guides/page-customization.md",
649
+ "digest": "sha256:57695bbbe3223c3c695029747856baae9e230059848e8f37506f908e843f9b0e"
641
650
  },
642
651
  {
643
652
  "path": "resources/manuals/guides/sessions.md",
@@ -665,7 +674,7 @@
665
674
  },
666
675
  {
667
676
  "path": "resources/manuals/reference/project-api.md",
668
- "digest": "sha256:6225dc08f1a4362eee72e0fba4d8639d20d535818766d8a6b181396ebbb94f3f"
677
+ "digest": "sha256:a65131d5cd351d8353f5028303ab1d75447f5d0c09496fd8ec83bb5d76adfd78"
669
678
  },
670
679
  {
671
680
  "path": "resources/manuals/reference/template-variables.md",
@@ -677,11 +686,11 @@
677
686
  },
678
687
  {
679
688
  "path": "resources/procedures/close-and-build.md",
680
- "digest": "sha256:c2f39abc2867e73a529ded2e475276738f62a4b61811b7792a49d6e358865a74"
689
+ "digest": "sha256:4025f98f95ac0c1818d2be3d6c33e556bd462b0510fd88227587d490ae01aa4c"
681
690
  },
682
691
  {
683
692
  "path": "resources/procedures/document-capture.md",
684
- "digest": "sha256:46a8231e92fcb19db7918938970ace8b4e4c22153fa8cbf0bb8100275bfbbfcf"
693
+ "digest": "sha256:f09100425c2b89a126c35c4490b0644519a4eee214114f2f0f52b6ea20467a04"
685
694
  },
686
695
  {
687
696
  "path": "resources/procedures/homogeneous-source-review.md",
@@ -689,7 +698,7 @@
689
698
  },
690
699
  {
691
700
  "path": "resources/procedures/knowledge-maintenance.md",
692
- "digest": "sha256:42fc008c8b25df86b7a1e26d521003bc8e3a69cf16948365e93c41f896c0c315"
701
+ "digest": "sha256:f2cc36cb2425cf0ac96a2ea4f114ed5ce872c3711b82bdc25fdc71e42a2849b7"
693
702
  },
694
703
  {
695
704
  "path": "resources/procedures/knowledge-review.md",
@@ -697,7 +706,7 @@
697
706
  },
698
707
  {
699
708
  "path": "resources/procedures/knowledge-updates.md",
700
- "digest": "sha256:f26726fc3264337200608e73f9ac20397016d6e3319ae8def6bf2a768630ae96"
709
+ "digest": "sha256:f43943fdf9265e5181c2e8cf3753d981fc9f59a44ee11b5beac404ec481344ea"
701
710
  },
702
711
  {
703
712
  "path": "resources/procedures/note.md",
@@ -717,7 +726,7 @@
717
726
  },
718
727
  {
719
728
  "path": "resources/procedures/production-stage-files.md",
720
- "digest": "sha256:c5ff9e138ecd3f90d04ac834a82b2764f583da105ca23e3e07dfb816349d6c32"
729
+ "digest": "sha256:d093acf81a07b85cfe2a78e71f7ab301fa8c72e3edac3f5de990b1ff7eaf12f0"
721
730
  },
722
731
  {
723
732
  "path": "resources/procedures/project-configuration.md",
@@ -833,7 +842,7 @@
833
842
  },
834
843
  {
835
844
  "path": "skills/record-workspace-version/SKILL.md",
836
- "digest": "sha256:c0e7415b362123deddcc1af61374cd50e5069e3b6db1dda516a21671734a1b1f"
845
+ "digest": "sha256:695b6b384a94743de08451f447bc8a135b6a7446dfab8e9b52ae16de54fd2903"
837
846
  },
838
847
  {
839
848
  "path": "skills/recover-workspace/SKILL.md",
@@ -853,12 +862,12 @@
853
862
  },
854
863
  {
855
864
  "path": "skills/work-production-stage/SKILL.md",
856
- "digest": "sha256:d2ba49a86ba49f312a0e7b817164a8d41596aa18f7e20b41036d90946760a5ce"
865
+ "digest": "sha256:5bb250f42d5d28243daca30427b5fd9db52127460862748fc36935f0e0d0f754"
857
866
  }
858
867
  ],
859
868
  "graphDependencies": {
860
869
  "indexer": [],
861
870
  "workspace": []
862
871
  },
863
- "digest": "sha256:e459da141751e9328d5d1b284f07abb54ae60c939eb964784cb94e5571170b03"
872
+ "digest": "sha256:cac0ab245b580f8a5adb9c4d03b55702d36559079adc7442a650087c91b0adca"
864
873
  }
@@ -1,6 +1,6 @@
1
1
  schema: agent-graph.provider.v1
2
2
  id: c4a/context
3
- version: 0.7.12
3
+ version: 0.7.13
4
4
  name: Context workflow
5
5
  description: Internal work contract for Context knowledge workspaces.
6
6
  graphs:
@@ -107,12 +107,11 @@ configuration/template approval, before the final build. The record response
107
107
  returns the next workspace Route, so no extra status call is needed. Build retries
108
108
  reuse the recorded version when formal content is unchanged. If build preparation
109
109
  or rendering fails and formal corrections are needed, `version inspect` returns
110
- `reusable_version` for the current entry only while it has no successful build or
111
- publication receipt. Submit that same version with the complete iteration's title,
112
- changes and triggers, including the repair; this replaces the pending changelog
113
- entry rather than appending another version. Do not submit only the repair and
114
- lose the original delivery description. Once built or published, the version is
115
- sealed and further formal changes require an increase. Intermediate batches
110
+ `reusable_version` for an untagged current entry. Before amending, read the
111
+ publication target's remote version using the distribution skill. An unpublished
112
+ preview may reuse its version with the complete iteration's title, changes and
113
+ triggers; preserve the original delivery description. Published content requires
114
+ an increasing version. A local build alone does not seal a version. Intermediate batches
116
115
  do not each receive a version.
117
116
 
118
117
  The workspace AGENTS.md and version-writing instructions require each entry's
@@ -149,19 +148,23 @@ are `initial`, `note`, `sessions`, `mr`, `module`, `document`, `navigation`,
149
148
  `repair`, `dist`, and `other`. Agent-written fields describe the actual diff and
150
149
  conversation; they must not expose credentials, raw transcripts or private IDs.
151
150
 
152
- The CLI writes `changelog.yaml`, generated `CHANGELOG.md`, `package.json` and the
153
- `.context-version.json` content baseline together. Keep these formal files with
154
- the workspace; do not hand-edit generated baselines. Git-managed and unignored
155
- new files are compared (without Git, non-runtime workspace files are compared).
156
- Version metadata itself, `dist`, `.tmp` and dependencies do not cause changes.
157
-
158
- Successful builds record version and per-package hashes in `.context-builds.json`.
159
- They do not increase versions. Before publishing, `context version publish-check
160
- --format json` compares against `.context-published.json`. A same-version changed
161
- output requires a patch using `version inspect --publish` and a `dist` trigger,
162
- then a rebuild. Record `version published --hash <checked-hash> --receipt
163
- <successful-publication-reference> --format json` only after external success.
164
- No command commits, tags or uploads automatically.
151
+ The CLI updates `package.json`, `changelog.yaml` and generated `CHANGELOG.md` together.
152
+ `context version inspect --base <commit-or-tag> --format json` compares the actual
153
+ workspace files with Git, including untracked files. Without an explicit base it
154
+ uses the current version's `v<version>` tag when available, otherwise HEAD; HEAD
155
+ is not proof of publication. Review article bodies, assets, structure, navigation
156
+ and templates, not structure alone. Without Git, inspection reports local files.
157
+ A disposable `.tmp` checkpoint suppresses repeated recording in an uncommitted
158
+ iteration. Losing it does not lose knowledge or prove a new publication.
159
+
160
+ There are no root-level Context version/build/publication receipts to maintain.
161
+ Build freshness uses the existing local package cache. The CLI does not seal a
162
+ version merely because a preview was built. Before reusing a version, check the
163
+ actual publication target and Git tags; a published version requires an increase.
164
+ Publication belongs to the installed distribution tool. Record remote receipts
165
+ in its configuration or the existing work summary, separately for each target.
166
+ A successful authorized commit/tag identifies the delivered source; never create
167
+ one automatically, and never treat Git success as platform publication success.
165
168
 
166
169
  Website history is available at `changelog.html`: cards are newest first, the
167
170
  latest three expanded and older cards collapsed. The History button beside the
@@ -197,6 +200,66 @@ coverage by mechanically placing every new page under an unrelated catch-all.
197
200
  Build reports missing bindings for the Agent to resolve; it does not classify
198
201
  content. Moving a menu entry does not change the article URL.
199
202
 
203
+ ### Reader tasks, names and reading order
204
+
205
+ Read the affected articles' bodies before changing their categories or titles.
206
+ Titles and outlines help locate material; they do not settle its main reader task.
207
+ During initial planning, keep names and placement provisional until the relevant
208
+ material supports them. Classify by the question the page primarily answers and
209
+ its intended reader, rather than its collection, source path or isolated words:
210
+
211
+ | Main reader task | Organizing emphasis |
212
+ | --- | --- |
213
+ | Understand a business process | Participants, rules, decisions and lifecycle |
214
+ | Understand an implementation | Components, data changes, calls and failure handling |
215
+ | Integrate or use a capability | Prerequisites, setup, contracts and usage |
216
+ | Diagnose or recover from a problem | Symptoms, checks, causes, actions and verification |
217
+
218
+ These distinctions guide placement, not a required set of top-level directories.
219
+ A page explaining retry scheduling and persistence belongs with its implementation;
220
+ a page explaining how to recover a stalled worker serves troubleshooting. The word
221
+ "retry" alone decides neither. Choose a primary home for a mixed page and link
222
+ related tasks without duplicating the same overview across categories.
223
+
224
+ Give each directory a concrete shared subject or reader task. At every parent,
225
+ keep its children either all directories or all articles. Place an overview in
226
+ the appropriate article group when the parent contains directories. Avoid empty
227
+ category scaffolding and chains of single-article directories that add no useful
228
+ choice. A residual "Other" group, when warranted, comes last; it must not absorb
229
+ articles whose purpose fits an existing group. Do not invent a fixed depth,
230
+ number of categories or page quota to make the tree look uniform.
231
+
232
+ Keep directory and article titles concise and specific to their actual subject.
233
+ Name the object and useful task, rather than enumerating every section heading.
234
+ For example, prefer "Client authentication" to "Client tokens, configuration,
235
+ requests, refresh and errors" when those sections all explain authentication.
236
+ Retain a platform or product name only when it distinguishes otherwise ambiguous
237
+ topics. Keep an existing accurate title when it already works; a necessary
238
+ technical name need not be shortened just to meet a word count.
239
+
240
+ The Agent manually arranges siblings for reading: a useful overview, prerequisites,
241
+ the main tasks or process sequence, then later maintenance and reference material
242
+ where applicable. Use a numbered list or ordered outline to review that proposal,
243
+ then assign explicit, distinct `order` values among siblings in the knowledge-map
244
+ adjustment, for example 10, 20 and 30. The list is an editing plan; persisted
245
+ `order` values determine navigation. Reordering YAML/JSON entries or changing the
246
+ plan's list order alone does not change the site. Paths, internal keys, alphabetical
247
+ order and source-file order are not substitutes for a reader sequence. Keep order
248
+ numbers out of titles. This navigation order is separate from the order in which
249
+ workers write their drafts.
250
+
251
+ For a long or compound page, inspect its content before suggesting a split or
252
+ merge. Keep one coherent task together, and separate independently useful tasks
253
+ only when their supported content warrants it. A long title or many headings
254
+ alone is insufficient. Preserve useful detail and links, and retain article IDs,
255
+ paths and unaffected sections when the reader task is unchanged. A navigation-only
256
+ change does not require a prose rewrite or file migration; changing its label does
257
+ not silently rename the approved article. Needed title or content revisions use
258
+ the existing revision and Review flow. Splits and merges use ordinary article
259
+ tasks, link repair and any explicit retirement after replacement content is
260
+ delivered. These are Agent editorial decisions, not new CLI checks or approval
261
+ gates.
262
+
200
263
  ## Edit one section or review part of a batch
201
264
 
202
265
  The current approved-revision Route accepts either full `markdown` or explicit
@@ -31,6 +31,10 @@ change that silently enables websites for existing packages.
31
31
 
32
32
  ### Static documentation website
33
33
 
34
+ For business pages, homepage slots and a bottom-right chat/bot widget, read
35
+ [Page Content Customization](./page-customization.md). Presentation sources live
36
+ under `src/site/`; keep generated knowledge separate.
37
+
34
38
  To include the default browser-readable site, enable `site` on the same
35
39
  package. The normal `context build` produces both the Agent KB and a standalone
36
40
  `dist/<base>-site/` directory containing `index.html`, article HTML,
@@ -0,0 +1,93 @@
1
+ ---
2
+ id: context.sdk.page-customization
3
+ kind: procedure
4
+ mediaType: text/markdown
5
+ ---
6
+
7
+ # Page content customization
8
+
9
+ Keep trusted website code in `src/site/`. It is presentation code, not captured
10
+ material or approved knowledge. Configure it in the existing `kbPackage.site`:
11
+
12
+ ```ts
13
+ site: {
14
+ title: "Engineering handbook",
15
+ extensions: {
16
+ root: "src/site",
17
+ slots: {
18
+ banner: "components/Banner.vue",
19
+ floating: "components/Chat.vue",
20
+ },
21
+ pages: { support: "pages/support.md" },
22
+ },
23
+ }
24
+ ```
25
+
26
+ Paths are relative to `root`. The directory can contain Vue components, CSS,
27
+ Markdown and imported assets. Use relative imports within this directory;
28
+ declare external dependencies in the workspace package manifest. Do not put
29
+ credentials or private configuration in frontend files. Hidden files,
30
+ `node_modules` and `dist` are not copied; symlinks are rejected.
31
+
32
+ ## Homepage and floating slots
33
+
34
+ | Slot | Default | Customization |
35
+ | --- | --- | --- |
36
+ | `banner` | Existing homepage hero and actions | Replace with a component |
37
+ | `knowledge` | Knowledge-map card group | Replace with a component |
38
+ | `resources` | Resource card group | Replace with a component |
39
+ | `footer` | Existing homepage footer | Replace with a component |
40
+ | `floating` | Empty | Client-only component fixed at the bottom right on all pages |
41
+
42
+ Omit a slot to retain its default; set it to `false` to hide it. A component
43
+ replaces only its slot, not the global navigation, language switch or article
44
+ provenance. Components can use VitePress `useData()` and `useRoute()` for theme,
45
+ page and route information. Import scoped CSS from components for local styling.
46
+
47
+ The floating component owns its button, chat/bot panel and open/close behavior.
48
+ Keep its panel within the viewport and preserve keyboard focus and close controls.
49
+ Load expensive chat SDKs when opened. Its component import is client-only, but
50
+ other components must support static rendering: use `onMounted` for browser APIs.
51
+ The static website supplies no chat backend or secret storage; use an authorized
52
+ business service for authentication and requests. A service failure must not
53
+ prevent reading the handbook.
54
+
55
+ ## Custom pages and navigation
56
+
57
+ Each `pages` key becomes `/custom/<key>.html` under the configured site base.
58
+ A page is trusted Markdown and may import Vue components, for example:
59
+
60
+ ```md
61
+ # Support
62
+
63
+ <script setup>
64
+ import SupportPanel from '../components/SupportPanel.vue'
65
+ </script>
66
+
67
+ <SupportPanel />
68
+ ```
69
+
70
+ Place it using the existing knowledge-map entry structure, with
71
+ `target: { artifact_ref: "site:support" }`. Set `parent`, `title` and `order`
72
+ as for other directory entries; do not create a second menu configuration.
73
+ The `site:` namespace is reserved for website pages; do not use `section_key`
74
+ on these targets. Undeclared targets fail website building with a diagnostic.
75
+ Pages without directory entries remain directly accessible. Multiple entries
76
+ can reference one page without duplicating content.
77
+
78
+ These pages are website-only: they are not approved articles and do not enter
79
+ the knowledge package or LLM Docs. Update formal articles through the existing
80
+ knowledge revision workflow, not through a custom page that shadows their URLs.
81
+
82
+ ## Build and delivery
83
+
84
+ Use the existing package build after editing configuration or presentation files;
85
+ site customization does not require capture, Indexer planning or a new review
86
+ gate. Existing authorization for building and deployment still applies.
87
+ Extension files and workspace dependency manifests participate in build
88
+ fingerprints. Build errors preserve previous outputs. Never edit the generated
89
+ `.tmp` website or `dist` as the source of customization.
90
+
91
+ Preview the homepage, custom pages and floating panel on desktop and mobile,
92
+ including a non-root `site.base`, dark mode and keyboard navigation. Publish only
93
+ the resulting website directory, not the source tree or workspace credentials.
@@ -193,6 +193,12 @@ or repository links. Knowledge map is projected from
193
193
  `src/knowledge-map.yaml` independently of KB directories; see
194
194
  [Package Outputs](../guides/package-outputs.md#optional-static-documentation-website).
195
195
 
196
+ `site.extensions` optionally names a trusted `src/site` root, homepage and floating
197
+ `slots`, and custom Markdown `pages`. Place custom pages in the same knowledge map
198
+ with `target.artifact_ref: "site:<page-key>"`. See
199
+ [Page content customization](../guides/page-customization.md) for the configuration
200
+ and the boundary between presentation code and approved knowledge.
201
+
196
202
  ## Knowledge requirements and Indexer Skills
197
203
 
198
204
  When `src/indexers.yaml` is absent, the configuration Route supplies its schema.
@@ -13,17 +13,15 @@ Pass `actor` explicitly when the conversation identifies the triggering user,
13
13
  including a known Lark display name. If Git has no name and the conversation
14
14
  does not identify the user, leave it absent and mention that in the delivery
15
15
  summary; do not infer identity from paths, logins or source authors. Amending
16
- an unbuilt entry preserves its actor unless an explicit replacement is supplied.
16
+ an unpublished entry preserves its actor unless an explicit replacement is supplied.
17
17
  Record after Close and package/template approval, before the final build, so the
18
18
  selected outputs are built with the new version once. Build records hashes without
19
19
  increasing versions. Never count temporary progress or a build retry as a change.
20
20
 
21
- For formal repairs before a successful build, use `version inspect`'s
22
- `reusable_version` when present. Submit the same version and a complete updated
23
- changelog covering the original work plus repairs, not a repair-only replacement.
24
- The CLI updates the pending entry in place. A successful build or publication
25
- seals that version; subsequent changes require an increase. Do not delete build
26
- or publication receipts to reopen history.
21
+ For formal repairs, inspect the current diff and check the publication target
22
+ before reusing an untagged version. An unpublished preview can amend its current
23
+ entry with the complete iteration's changes. Published content requires an
24
+ increasing version. A successful local build does not seal a version.
27
25
 
28
26
  Successful delivery clears completed task drafts. Do not empty `.tmp` or call
29
27
  `task resume` as a finalization step. Retain registered repository checkouts,
@@ -34,14 +32,11 @@ Website rendering must preserve literal code and template examples. Do not revis
34
32
  valid source-grounded JSX or template syntax merely to avoid Vue interpolation;
35
33
  report a rendering defect if the website compiler cannot display it literally.
36
34
 
37
- Before an authorized external publication, run `context version publish-check
38
- --format json`. If `needs_version` is true, inspect with `context version inspect
39
- --publish --format json`, record a patch changelog using a `dist` trigger, and
40
- rebuild. Do not increment again if the workspace version already changed.
41
- If `unchanged` is true, there is no new delivery. Only after a successful external
42
- publication, use `context version published --hash <checked-hash> --receipt
43
- <successful-publication-reference> --format json`. Failure does not advance that
44
- baseline. These commands do not upload, publish or grant publishing authority.
35
+ Before an authorized external publication, use the installed distribution skill
36
+ or tool to read that target's current remote version and confirm the complete
37
+ build directory. Reconcile its version with package.json and changelog.yaml.
38
+ Building a preview does not publish or seal a version. Record the successful
39
+ remote receipt per target; commit/tag only when separately authorized.
45
40
 
46
41
  Close deterministically reconciles approved Markdown and current relationship
47
42
  inputs into `knowledge/structure.yaml`. It compacts repeated machine fields out