@doxbrix/doxloop 0.1.4 → 0.2.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 (357) hide show
  1. package/CHANGELOG.md +1153 -0
  2. package/README.md +422 -226
  3. package/assets/doxbrix-preview.css +77 -15
  4. package/contracts/agent-events-v1.schema.json +1 -0
  5. package/contracts/coverage-v1.schema.json +59 -0
  6. package/contracts/drift-v1.schema.json +1 -0
  7. package/contracts/evaluation-v1.schema.json +62 -0
  8. package/contracts/quality-codes-v1.json +1 -0
  9. package/contracts/quality-report-v1.schema.json +1 -0
  10. package/contracts/validation-v1.schema.json +1 -0
  11. package/dist/agent-failure.d.ts +36 -0
  12. package/dist/agent-failure.js +98 -0
  13. package/dist/agent-isolation.d.ts +17 -0
  14. package/dist/agent-isolation.js +94 -0
  15. package/dist/agent-log.d.ts +197 -0
  16. package/dist/agent-log.js +1094 -0
  17. package/dist/agent-process.d.ts +63 -0
  18. package/dist/agent-process.js +128 -0
  19. package/dist/agent-reply.d.ts +47 -0
  20. package/dist/agent-reply.js +315 -0
  21. package/dist/agents.d.ts +40 -4
  22. package/dist/agents.js +115 -11
  23. package/dist/api-coverage.d.ts +11 -0
  24. package/dist/api-coverage.js +72 -0
  25. package/dist/application-probe.d.ts +28 -0
  26. package/dist/application-probe.js +93 -0
  27. package/dist/application-url.d.ts +14 -0
  28. package/dist/application-url.js +26 -0
  29. package/dist/args.js +15 -0
  30. package/dist/artifact-deploy.d.ts +9 -0
  31. package/dist/artifact-deploy.js +28 -8
  32. package/dist/assets.d.ts +72 -0
  33. package/dist/assets.js +382 -0
  34. package/dist/auth.d.ts +10 -0
  35. package/dist/auth.js +38 -9
  36. package/dist/author.d.ts +206 -4
  37. package/dist/author.js +1650 -52
  38. package/dist/authoring-batches.d.ts +190 -0
  39. package/dist/authoring-batches.js +489 -0
  40. package/dist/authoring-postpass.d.ts +79 -0
  41. package/dist/authoring-postpass.js +1289 -0
  42. package/dist/authoring-progress.d.ts +95 -0
  43. package/dist/authoring-progress.js +269 -0
  44. package/dist/autosync.d.ts +56 -0
  45. package/dist/autosync.js +442 -0
  46. package/dist/batch-artifacts.d.ts +81 -0
  47. package/dist/batch-artifacts.js +412 -0
  48. package/dist/batch-limits.d.ts +37 -0
  49. package/dist/batch-limits.js +80 -0
  50. package/dist/branding.d.ts +41 -0
  51. package/dist/branding.js +229 -0
  52. package/dist/bundle-upload.d.ts +26 -0
  53. package/dist/bundle-upload.js +99 -0
  54. package/dist/capture-auth.d.ts +95 -0
  55. package/dist/capture-auth.js +204 -0
  56. package/dist/capture.d.ts +48 -0
  57. package/dist/capture.js +20 -1
  58. package/dist/cli.js +839 -32
  59. package/dist/content-links.d.ts +10 -0
  60. package/dist/content-links.js +49 -0
  61. package/dist/contract-validation.d.ts +4 -0
  62. package/dist/contract-validation.js +25 -0
  63. package/dist/coverage-actions.d.ts +8 -0
  64. package/dist/coverage-actions.js +71 -0
  65. package/dist/coverage-resolutions.d.ts +16 -0
  66. package/dist/coverage-resolutions.js +58 -0
  67. package/dist/db.d.ts +37 -0
  68. package/dist/db.js +288 -0
  69. package/dist/demo.d.ts +12 -0
  70. package/dist/demo.js +122 -0
  71. package/dist/deploy-credentials.d.ts +7 -0
  72. package/dist/deploy-credentials.js +76 -0
  73. package/dist/deploy-targets/github-pages.d.ts +3 -0
  74. package/dist/deploy-targets/github-pages.js +100 -0
  75. package/dist/deploy-targets/index.d.ts +8 -0
  76. package/dist/deploy-targets/index.js +78 -0
  77. package/dist/deploy-targets/netlify.d.ts +3 -0
  78. package/dist/deploy-targets/netlify.js +49 -0
  79. package/dist/deploy-targets/types.d.ts +32 -0
  80. package/dist/deploy-targets/types.js +2 -0
  81. package/dist/deploy-targets/vercel.d.ts +3 -0
  82. package/dist/deploy-targets/vercel.js +95 -0
  83. package/dist/deploy.d.ts +9 -0
  84. package/dist/deploy.js +87 -13
  85. package/dist/deterministic-capture.d.ts +90 -0
  86. package/dist/deterministic-capture.js +435 -0
  87. package/dist/direct-edit.d.ts +40 -0
  88. package/dist/direct-edit.js +159 -0
  89. package/dist/docs-crawl.d.ts +86 -0
  90. package/dist/docs-crawl.js +536 -0
  91. package/dist/docs-site.d.ts +49 -0
  92. package/dist/docs-site.js +233 -0
  93. package/dist/doctor.js +8 -0
  94. package/dist/documentation-collections.d.ts +23 -0
  95. package/dist/documentation-collections.js +191 -0
  96. package/dist/documentation-plan.d.ts +253 -0
  97. package/dist/documentation-plan.js +2563 -0
  98. package/dist/doxbrix-build.d.ts +19 -0
  99. package/dist/doxbrix-build.js +167 -0
  100. package/dist/doxbrix-markdown.d.ts +9 -0
  101. package/dist/doxbrix-markdown.js +115 -14
  102. package/dist/drift.d.ts +10 -0
  103. package/dist/drift.js +164 -0
  104. package/dist/evaluation.d.ts +46 -0
  105. package/dist/evaluation.js +113 -0
  106. package/dist/evidence-pack.d.ts +47 -0
  107. package/dist/evidence-pack.js +358 -0
  108. package/dist/evidence.d.ts +25 -0
  109. package/dist/evidence.js +175 -0
  110. package/dist/fs.d.ts +8 -2
  111. package/dist/fs.js +41 -11
  112. package/dist/generator-api.d.ts +89 -0
  113. package/dist/generator-preflight.d.ts +27 -0
  114. package/dist/generator-preflight.js +105 -0
  115. package/dist/generator-runtime.d.ts +7 -0
  116. package/dist/generator-runtime.js +17 -1
  117. package/dist/generators.d.ts +24 -2
  118. package/dist/generators.js +54 -1
  119. package/dist/git-delivery.d.ts +17 -0
  120. package/dist/git-delivery.js +123 -0
  121. package/dist/globs.d.ts +16 -0
  122. package/dist/globs.js +65 -0
  123. package/dist/glossary.d.ts +26 -0
  124. package/dist/glossary.js +179 -0
  125. package/dist/history.d.ts +106 -0
  126. package/dist/history.js +600 -0
  127. package/dist/html-markdown.d.ts +46 -0
  128. package/dist/html-markdown.js +423 -0
  129. package/dist/interactive.js +16 -15
  130. package/dist/job-events.d.ts +74 -0
  131. package/dist/job-events.js +377 -0
  132. package/dist/keep-awake.d.ts +50 -0
  133. package/dist/keep-awake.js +123 -0
  134. package/dist/local-source-snapshot.d.ts +20 -0
  135. package/dist/local-source-snapshot.js +61 -0
  136. package/dist/mintlify-detect.d.ts +3 -0
  137. package/dist/mintlify-detect.js +18 -0
  138. package/dist/mintlify-import.d.ts +75 -0
  139. package/dist/mintlify-import.js +190 -0
  140. package/dist/navigation.d.ts +98 -0
  141. package/dist/navigation.js +310 -0
  142. package/dist/openapi.d.ts +60 -0
  143. package/dist/openapi.js +439 -0
  144. package/dist/page-editor-bridge.d.ts +3 -0
  145. package/dist/page-editor-bridge.js +109 -0
  146. package/dist/page-editor-preview.d.ts +10 -0
  147. package/dist/page-editor-preview.js +55 -0
  148. package/dist/page-extension.d.ts +9 -0
  149. package/dist/page-extension.js +15 -0
  150. package/dist/page-metadata.d.ts +28 -0
  151. package/dist/page-metadata.js +166 -0
  152. package/dist/page-operations.d.ts +34 -0
  153. package/dist/page-operations.js +215 -0
  154. package/dist/page-routes.d.ts +4 -0
  155. package/dist/page-routes.js +61 -0
  156. package/dist/pages.d.ts +20 -0
  157. package/dist/pages.js +184 -0
  158. package/dist/plan-generator.d.ts +3 -0
  159. package/dist/plan-generator.js +21 -0
  160. package/dist/plan-navigation.d.ts +11 -0
  161. package/dist/plan-navigation.js +30 -0
  162. package/dist/planning-captures.d.ts +20 -0
  163. package/dist/planning-captures.js +143 -0
  164. package/dist/planning-research.d.ts +135 -0
  165. package/dist/planning-research.js +472 -0
  166. package/dist/planning-triage.d.ts +23 -0
  167. package/dist/planning-triage.js +131 -0
  168. package/dist/preview.d.ts +24 -0
  169. package/dist/preview.js +280 -29
  170. package/dist/project-detect.d.ts +36 -0
  171. package/dist/project-detect.js +251 -0
  172. package/dist/project-import.d.ts +54 -0
  173. package/dist/project-import.js +157 -0
  174. package/dist/project-lock.d.ts +6 -0
  175. package/dist/project-lock.js +96 -0
  176. package/dist/project-registry.d.ts +25 -0
  177. package/dist/project-registry.js +79 -0
  178. package/dist/project.d.ts +35 -3
  179. package/dist/project.js +388 -38
  180. package/dist/prompts.d.ts +9 -0
  181. package/dist/prompts.js +33 -4
  182. package/dist/proposal-replay.d.ts +32 -0
  183. package/dist/proposal-replay.js +99 -0
  184. package/dist/quality-claims.d.ts +8 -0
  185. package/dist/quality-claims.js +168 -0
  186. package/dist/quality-config.d.ts +5 -0
  187. package/dist/quality-config.js +84 -0
  188. package/dist/quality-contract.d.ts +37 -0
  189. package/dist/quality-contract.js +46 -0
  190. package/dist/quality-examples.d.ts +4 -0
  191. package/dist/quality-examples.js +233 -0
  192. package/dist/quality-gates.d.ts +16 -0
  193. package/dist/quality-gates.js +192 -0
  194. package/dist/quality-links.d.ts +7 -0
  195. package/dist/quality-links.js +149 -0
  196. package/dist/quality-lint.d.ts +6 -0
  197. package/dist/quality-lint.js +124 -0
  198. package/dist/quality-rendered.d.ts +11 -0
  199. package/dist/quality-rendered.js +222 -0
  200. package/dist/quality-schema.d.ts +3 -0
  201. package/dist/quality-schema.js +71 -0
  202. package/dist/release-notes.d.ts +44 -0
  203. package/dist/release-notes.js +183 -0
  204. package/dist/remote-monitor.d.ts +16 -0
  205. package/dist/remote-monitor.js +74 -0
  206. package/dist/remote-source.d.ts +34 -0
  207. package/dist/remote-source.js +426 -0
  208. package/dist/review-diff.d.ts +82 -0
  209. package/dist/review-diff.js +400 -0
  210. package/dist/review-learning.d.ts +11 -0
  211. package/dist/review-learning.js +60 -0
  212. package/dist/review-render.d.ts +38 -0
  213. package/dist/review-render.js +224 -0
  214. package/dist/review-report.d.ts +9 -0
  215. package/dist/review-report.js +89 -0
  216. package/dist/review-ui.d.ts +14 -0
  217. package/dist/review-ui.js +1248 -0
  218. package/dist/schedule.d.ts +78 -0
  219. package/dist/schedule.js +480 -0
  220. package/dist/screen-capture-provider.d.ts +52 -0
  221. package/dist/screen-capture-provider.js +218 -0
  222. package/dist/screenshot-workflow.d.ts +167 -0
  223. package/dist/screenshot-workflow.js +1237 -0
  224. package/dist/settings.d.ts +1 -1
  225. package/dist/settings.js +95 -7
  226. package/dist/site-export.d.ts +18 -0
  227. package/dist/site-export.js +87 -0
  228. package/dist/source-connectors.d.ts +33 -0
  229. package/dist/source-connectors.js +268 -0
  230. package/dist/source-discovery.d.ts +132 -0
  231. package/dist/source-discovery.js +823 -0
  232. package/dist/source-intelligence.d.ts +9 -0
  233. package/dist/source-intelligence.js +306 -0
  234. package/dist/sync-review.d.ts +28 -0
  235. package/dist/sync-review.js +264 -0
  236. package/dist/sync-runs.d.ts +192 -0
  237. package/dist/sync-runs.js +2244 -0
  238. package/dist/sync.d.ts +35 -0
  239. package/dist/sync.js +298 -32
  240. package/dist/text-diff.d.ts +9 -0
  241. package/dist/text-diff.js +59 -0
  242. package/dist/types.d.ts +946 -1
  243. package/dist/ui/assets/doxloop-logo-light-De7Nx7j7.png +0 -0
  244. package/dist/ui/assets/index-BHBYU2aG.css +1 -0
  245. package/dist/ui/assets/index-Cq3RPQiC.js +33 -0
  246. package/dist/ui/index.html +18 -0
  247. package/dist/ui-server.d.ts +83 -0
  248. package/dist/ui-server.js +3532 -0
  249. package/dist/usage-budget.d.ts +28 -0
  250. package/dist/usage-budget.js +90 -0
  251. package/dist/validation.d.ts +25 -1
  252. package/dist/validation.js +312 -26
  253. package/dist/workspace-tools.d.ts +54 -0
  254. package/dist/workspace-tools.js +123 -0
  255. package/docs/agent-compatibility.md +50 -28
  256. package/docs/ci-and-automation.md +105 -66
  257. package/docs/doxbrix-http-api.md +8 -1
  258. package/docs/existing-documentation.md +80 -0
  259. package/docs/generation-performance.md +108 -0
  260. package/docs/generator-authoring.md +68 -5
  261. package/docs/generator-selection.md +50 -13
  262. package/docs/mintlify-import.md +71 -0
  263. package/docs/openapi-security.md +25 -0
  264. package/docs/project-format.md +331 -36
  265. package/docs/release-quality.md +158 -0
  266. package/docs/releasing.md +72 -0
  267. package/docs/review-workflows.md +51 -0
  268. package/docs/security-model.md +102 -39
  269. package/docs/troubleshooting.md +226 -93
  270. package/package.json +46 -15
  271. package/scripts/test-auto-screenshot.mjs +172 -0
  272. package/skills/doxloop-authoring/SKILL.md +242 -361
  273. package/skills/doxloop-authoring/references/existing-documentation.md +94 -0
  274. package/skills/doxloop-authoring/references/navigation-architecture.md +18 -7
  275. package/skills/doxloop-authoring/references/page-depth.md +169 -0
  276. package/skills/doxloop-authoring/references/project-format.md +106 -7
  277. package/skills/doxloop-authoring/references/quality.md +10 -0
  278. package/skills/doxloop-authoring/references/screenshot-manifest.md +113 -0
  279. package/skills/doxloop-authoring/references/screenshots.md +149 -235
  280. package/skills/doxloop-authoring/references/workflows.md +76 -0
  281. package/skills/doxloop-doxbrix/SKILL.md +38 -22
  282. package/skills/doxloop-doxbrix/references/api-endpoints.md +15 -14
  283. package/skills/doxloop-doxbrix/references/components.md +30 -3
  284. package/skills/doxloop-doxbrix/references/manifest.md +3 -2
  285. package/vendor/doxbrix-import/LICENSE +202 -0
  286. package/vendor/doxbrix-import/README.md +17 -0
  287. package/vendor/doxbrix-import/UPSTREAM.json +47 -0
  288. package/vendor/doxbrix-import/dist/docs/frontmatter.d.ts +13 -0
  289. package/vendor/doxbrix-import/dist/docs/frontmatter.js +83 -0
  290. package/vendor/doxbrix-import/dist/docs/import.d.ts +21 -0
  291. package/vendor/doxbrix-import/dist/docs/import.js +147 -0
  292. package/vendor/doxbrix-import/dist/docs/manifest.d.ts +163 -0
  293. package/vendor/doxbrix-import/dist/docs/manifest.js +64 -0
  294. package/vendor/doxbrix-import/dist/docs/project.d.ts +25 -0
  295. package/vendor/doxbrix-import/dist/docs/project.js +77 -0
  296. package/vendor/doxbrix-import/dist/docs/starter.d.ts +4 -0
  297. package/vendor/doxbrix-import/dist/docs/starter.js +11 -0
  298. package/vendor/doxbrix-import/dist/importer.d.ts +227 -0
  299. package/vendor/doxbrix-import/dist/importer.js +1567 -0
  300. package/vendor/doxbrix-import/dist/mintlify-openapi.d.ts +37 -0
  301. package/vendor/doxbrix-import/dist/mintlify-openapi.js +305 -0
  302. package/vendor/doxbrix-import/dist/safe-path.d.ts +9 -0
  303. package/vendor/doxbrix-import/dist/safe-path.js +47 -0
  304. package/dist/agents.d.ts.map +0 -1
  305. package/dist/agents.js.map +0 -1
  306. package/dist/args.d.ts.map +0 -1
  307. package/dist/args.js.map +0 -1
  308. package/dist/artifact-deploy.d.ts.map +0 -1
  309. package/dist/artifact-deploy.js.map +0 -1
  310. package/dist/auth.d.ts.map +0 -1
  311. package/dist/auth.js.map +0 -1
  312. package/dist/author.d.ts.map +0 -1
  313. package/dist/author.js.map +0 -1
  314. package/dist/capture.d.ts.map +0 -1
  315. package/dist/capture.js.map +0 -1
  316. package/dist/cli.d.ts.map +0 -1
  317. package/dist/cli.js.map +0 -1
  318. package/dist/deploy.d.ts.map +0 -1
  319. package/dist/deploy.js.map +0 -1
  320. package/dist/deployment-visibility.d.ts.map +0 -1
  321. package/dist/deployment-visibility.js.map +0 -1
  322. package/dist/doctor.d.ts.map +0 -1
  323. package/dist/doctor.js.map +0 -1
  324. package/dist/doxbrix-markdown.d.ts.map +0 -1
  325. package/dist/doxbrix-markdown.js.map +0 -1
  326. package/dist/errors.d.ts.map +0 -1
  327. package/dist/errors.js.map +0 -1
  328. package/dist/fs.d.ts.map +0 -1
  329. package/dist/fs.js.map +0 -1
  330. package/dist/generator-api.d.ts.map +0 -1
  331. package/dist/generator-api.js.map +0 -1
  332. package/dist/generator-manager.d.ts.map +0 -1
  333. package/dist/generator-manager.js.map +0 -1
  334. package/dist/generator-runtime.d.ts.map +0 -1
  335. package/dist/generator-runtime.js.map +0 -1
  336. package/dist/generators.d.ts.map +0 -1
  337. package/dist/generators.js.map +0 -1
  338. package/dist/interactive.d.ts.map +0 -1
  339. package/dist/interactive.js.map +0 -1
  340. package/dist/preview.d.ts.map +0 -1
  341. package/dist/preview.js.map +0 -1
  342. package/dist/progress.d.ts.map +0 -1
  343. package/dist/progress.js.map +0 -1
  344. package/dist/project.d.ts.map +0 -1
  345. package/dist/project.js.map +0 -1
  346. package/dist/prompts.d.ts.map +0 -1
  347. package/dist/prompts.js.map +0 -1
  348. package/dist/settings.d.ts.map +0 -1
  349. package/dist/settings.js.map +0 -1
  350. package/dist/sync.d.ts.map +0 -1
  351. package/dist/sync.js.map +0 -1
  352. package/dist/types.d.ts.map +0 -1
  353. package/dist/types.js.map +0 -1
  354. package/dist/validation.d.ts.map +0 -1
  355. package/dist/validation.js.map +0 -1
  356. package/dist/version.d.ts.map +0 -1
  357. package/dist/version.js.map +0 -1
@@ -0,0 +1,51 @@
1
+ # Editing, auditing, versions, and review
2
+
3
+ ## Start with an audit
4
+
5
+ Try `doxloop demo` to see the workflow without an agent. After importing an existing site, open **Pages → Audit existing documentation and reader verification → Run read-only audit**, or run:
6
+
7
+ ```sh
8
+ doxloop audit --format json
9
+ ```
10
+
11
+ The audit lists detected configuration, content roots, preview routes, unmapped pages, unverified pages, and source drift. It does not rewrite documentation or advance source baselines. `doxloop audit --backfill-evidence` adds missing evidence entries as unverified, preserving existing associations. This is a reversible metadata write; it cannot discover factual source associations by itself.
12
+
13
+ ## Edit and discuss
14
+
15
+ Search in Pages matches titles, paths, and body text. Expand the text matches and select a section to open the source editor at the matching line. Results are capped at 200; narrow the query for more specific results. The local Doxbrix preview includes **Edit this page in Doxloop** when launched from the control center. Published exports do not contain a link to the local editor.
16
+
17
+ Pages and Review have persistent comments. A review comment can target a whole file or an individual hunk. **Ask agent to address** starts a scoped proposal or revision using that comment. Comments remain open until explicitly resolved; starting a job does not mean the issue was fixed. Comments are local records in `.doxloop/comments.json`, not multi-user identity or notification infrastructure.
18
+
19
+ Select multiple pages and open **Bulk metadata** to preview a shared field change. Each page has an optimistic fingerprint. The batch either saves all pages or restores them all. **Recent direct edits**, under Manage pages, lists reversible page, navigation, branding, asset, metadata, and glossary changes. Undo refuses to overwrite newer edits.
20
+
21
+ In Review, **Review a folder** lists the affected files and accepts or rejects only pending hunks in that folder. Rejection requires a reason. Files edited during generation require individual review before folder acceptance. Already accepted or rejected hunks keep their decisions.
22
+
23
+ ## Versions and languages
24
+
25
+ Open **Pages → Versions and languages** and choose a source collection, version, and locale. Collection creation copies the documentation and assets, adds navigation, and creates unverified evidence entries in one reversible transaction. Copied prose is not a completed translation. **Ask agent to translate copied pages** creates a scoped translation proposal for review.
26
+
27
+ Doxbrix and MkDocs use `editions/<version>/<locale>/` under the content directory, with named navigation sections. Docusaurus uses its native `versioned_docs`, `versioned_sidebars`, `versions.json`, and `i18n/<locale>/docusaurus-plugin-content-docs/` layout. Existing native Docusaurus versions and locale pages appear in Pages, search, direct editing, and scoped agent review.
28
+
29
+ The direct Docusaurus creator supports autogenerated sidebars and literal `i18n.locales` arrays. Custom coded sidebars or dynamic locale configuration require a reviewed native proposal; the creator stops before writing. Multiple docs plugin instances and custom version route overrides need a project-specific compatibility check. Other generators retain their native version and translation tooling. MkDocs collections do not replace a site's existing mike or third-party locale plugin deployment scheme.
30
+
31
+ These conventions follow [Docusaurus versioning](https://docusaurus.io/docs/versioning), [Docusaurus localization](https://docusaurus.io/docs/i18n/tutorial), and [MkDocs navigation configuration](https://www.mkdocs.org/user-guide/configuration/#nav).
32
+
33
+ ## Honest budgets and verification
34
+
35
+ The plan displays page, screenshot, and per-attempt time caps. Planning also respects the time cap. Once at least three comparable completed authoring runs exist, Doxloop displays an observed duration range scaled by changed page count. It is not a guarantee or a dollar quote. Agent billing remains with the selected provider.
36
+
37
+ The audit panel can enable reader verification labels for the built-in Doxbrix reader. Preview and static builds calculate their state from current evidence; a direct factual edit invalidates its evidence. Unknown drift does not appear verified. Native generator templates remain under the site's control.
38
+
39
+ ## Hosted pull-request impact
40
+
41
+ `.github/workflows/documentation-impact.yml` runs a deterministic evidence-map check and maintains one bot comment with the affected pages. It executes only trusted base-branch code with no checkout of the pull request head, agent, or package installation. Configure `DOXLOOP_DOCS_ROOT` if the committed Doxloop project is not at repository root. Sources outside the checkout are explicitly uncheckable. A missing project/evidence map is reported in the job log instead of asserting current documentation.
42
+
43
+ The workflow uses `pull_request_target` so fork pull requests can receive a comment; do not change its checkout to the pull request head. The first installation must reach the base branch before it can run there. Tests: `node --test scripts/docs-impact.test.mjs`.
44
+
45
+ ## Execution and release checks
46
+
47
+ Python examples require a locally pulled digest-pinned image in `DOXLOOP_PYTHON_SANDBOX_IMAGE`. There is no host Python fallback. `node scripts/ci-python-sandbox.mjs` exercises real fixture access, blocked host access, read-only mounts, and blocked network access. CI runs this separately from mocked boundary unit tests.
48
+
49
+ `node scripts/ci-existing-sites.mjs` builds representative existing Docusaurus and MkDocs sites six times each: original, accepted update, undone update, version, locale, and restored original. It checks custom routes, base paths, assets, source preservation, and collection undo. The fixtures are representative sites, not production customer audits.
50
+
51
+ Real-agent evaluation results are written to the Git-ignored `evals/results/` folder. `evals/baseline.json` records the accepted benchmark observation, keyed by mode, agent, model, and fixture. A seeded review score measures defect detection; it is distinct from generation quality. These checks are separate from the unit suite.
@@ -1,7 +1,7 @@
1
1
  # Security model
2
2
 
3
3
  Doxloop separates local authoring from explicit publishing. This document
4
- describes which guarantees the CLI enforces and which behavior depends on the
4
+ describes which guarantees Doxloop enforces and which behaviour depends on the
5
5
  selected coding agent and host environment.
6
6
 
7
7
  ## Trust boundaries
@@ -13,24 +13,39 @@ selected coding agent and host environment.
13
13
  ignore embedded requests that change scope, reveal secrets, weaken safeguards,
14
14
  contact unrelated services, or publish.
15
15
  - Coding agents retain the filesystem permissions granted by their host. The
16
- configured `sources` list is an authoring-policy boundary, not an operating
17
- system sandbox.
18
- - Product sources are read-only evidence. The create and update workflows tell
19
- the agent to write only inside the separate documentation project.
20
- - `doxloop review` launches supported agents in read-only or plan mode.
21
- Create and update require write access to the documentation project.
16
+ configured source list on the **Sources** page is an authoring-policy
17
+ boundary, not an operating system sandbox.
18
+ - Product sources are read-only evidence. Planning runs are read-only. The
19
+ generation workflow tells the agent to write only inside an isolated
20
+ proposal workspace within the documentation project, and nothing reaches the
21
+ real documentation until a reviewer accepts it.
22
+
23
+ ## The control center
24
+
25
+ The control center binds to the loopback address only and is never exposed to
26
+ the network. Project files, tokens, and repository credentials stay on the
27
+ machine; the browser receives project state, proposals, and logs, never
28
+ credentials. Personal access tokens entered for private Git repositories are
29
+ held in memory for the session, forwarded to Doxloop child processes through
30
+ the environment rather than the command line, and never written to the project
31
+ configuration. Authoring jobs are cancellable, proposals stay isolated until
32
+ accepted, and deployment is a separate confirmed action.
22
33
 
23
34
  ## Local files
24
35
 
25
- The documentation `contentDir` must be a relative directory inside the project.
26
- Doxloop rejects project-root, escaping, absolute, and symlinked content
27
- directories. Deployment rejects a content directory that differs from
28
- `.doxloop/project.json` and refuses symlinks anywhere in documentation content.
36
+ The documentation `contentDir` must remain contained by the documentation
37
+ project. New native Doxbrix projects use `contentDir: ""`, so their Markdown,
38
+ MDX, assets, and `docs.json` live at the project root; Doxloop allows that root
39
+ only for the native Doxbrix generator and excludes operational, VCS, dependency,
40
+ and build directories from page discovery and deployment. Legacy native
41
+ projects with `contentDir: "docs"` remain supported. External generators must
42
+ use a non-empty relative content directory. Escaping, absolute, and symlinked
43
+ content directories are rejected, and deployment refuses symlinks anywhere in
44
+ the selected documentation content.
29
45
 
30
- The first-run create flow rejects a documentation project that is the same as,
31
- inside, or contains a configured product source. It also rejects configured
32
- sources that are missing and non-empty output directories before writing project
33
- files.
46
+ The setup wizard rejects a documentation project that is the same as, inside,
47
+ or contains a configured product source. It also rejects configured sources
48
+ that are missing and an output directory that already exists.
34
49
 
35
50
  Do not place credentials, private keys, environment files, internal data, or
36
51
  product source under the documentation content directory.
@@ -40,9 +55,19 @@ product source under the documentation content directory.
40
55
  Authoring and validation do not publish. A coding agent may still have network
41
56
  access according to its own configuration.
42
57
 
43
- Design capture:
58
+ Remote OpenAPI sources follow the [remote OpenAPI safety policy](./openapi-security.md).
59
+ Existing documentation sites are crawled with the same host controls (public
60
+ HTTP(S) only, no embedded credentials, private and loopback ranges refused on
61
+ every redirect), without executing page scripts, honoring `robots.txt`, and
62
+ within page-size and page-count limits; see
63
+ [Rewrite existing documentation](./existing-documentation.md).
64
+ Git repository sources are downloaded as read-only snapshots through the
65
+ provider's read API; Doxloop never clones, fetches, commits, pushes, or changes
66
+ hooks in a source checkout.
44
67
 
45
- - accepts only configured HTTP or HTTPS reference origins;
68
+ Design-reference capture:
69
+
70
+ - accepts only configured public HTTP or HTTPS reference origins;
46
71
  - captures at most three requested pages per origin;
47
72
  - blocks navigation away from the configured origin;
48
73
  - blocks loopback, private, link-local, multicast, and other non-public network
@@ -50,38 +75,76 @@ Design capture:
50
75
  - stores screenshots and measurements under the Git-ignored
51
76
  `.doxloop/cache/reference/`.
52
77
 
53
- For a trusted local documentation reference, set
54
- `DOXLOOP_ALLOW_PRIVATE_REFERENCES=1` for that capture invocation.
55
-
56
78
  Application guide screenshots are separate authoring actions. They run only
57
- when requested, forced with `--screenshots`, or enabled by the optional
58
- `application.screenshots.policy`. The authoring workflow limits navigation to
59
- the configured application surface and requires non-production fixtures or test
79
+ when **Add product screenshots?** is enabled for a run, when the request asks
80
+ for them, or when the screenshot policy under **Settings → Visual evidence** is
81
+ set to automatic. When capture is enabled, Doxloop injects a run-scoped
82
+ Playwright MCP browser into supported Codex and Claude authoring processes; it
83
+ does not modify the user's global agent configuration. The browser runs
84
+ headless with an isolated profile, writes into the proposal workspace, and
85
+ closes with the agent run. The authoring workflow limits navigation to the
86
+ configured application surface and requires non-production fixtures or test
60
87
  accounts, but the selected coding agent and its browser retain the permissions
61
88
  granted by their host. Do not configure a production application, store
62
89
  credentials in `.doxloop/project.json`, or expose customer data for capture.
63
- Use `--no-screenshots` when the authoring environment should not operate an
64
- application.
90
+ Choose **No screenshots** for a run, or set the policy to **Never**, when the
91
+ authoring environment should not operate an application. Plans also require a
92
+ machine-readable capture manifest. Doxloop rejects captures outside the
93
+ approved visual pages, unsafe asset paths, missing or unreadable PNGs, blank or
94
+ duplicate images, unembedded files, and captures that have not completed
95
+ expected-state, privacy, legibility, and meaningfulness review.
65
96
 
66
97
  Doxbrix API requests require HTTPS. HTTP is accepted only for loopback
67
98
  development. Authenticated and device-flow requests refuse redirects.
68
99
 
100
+ Release-quality external-link checks accept only credential-free HTTP or HTTPS
101
+ URLs, validate every redirect destination, and block private, loopback,
102
+ link-local, reserved, or unresolved addresses. Cached responses support
103
+ offline CI. Authentication responses and temporary network/server failures are
104
+ warnings rather than definitive broken-link failures.
105
+
106
+ Executable examples are opt-in. Declared Node files run with explicit
107
+ filesystem permissions and no network permission; Python files run in isolated
108
+ mode with socket creation and process-launch APIs blocked. Both use a minimal
109
+ environment, explicit fixtures, a timeout, no shell, and a temporary workspace
110
+ that is cleaned afterward. OpenAPI request examples are checked against the
111
+ connected contract without contacting an API. Apparent credentials are
112
+ rejected, and runtimes without a portable sandbox remain visibly
113
+ source-verified rather than silently executed.
114
+
115
+ Rendered accessibility and visual checks load generated local HTML and abort
116
+ all browser network requests. Current screenshots and quality reports are
117
+ derived, Git-ignored artifacts; approved visual baselines are separated by
118
+ generator, theme, route, and viewport.
119
+
120
+ Interrupted job checkpoints, raw job logs, proposal-delivery records, and the
121
+ bounded reviewer-preference record are local, owner-readable, Git-ignored
122
+ artifacts. Persisted retry data is accepted only for known Doxloop actions and
123
+ project-contained working directories. Reviewer instructions are length-bound
124
+ and known private-key and provider-token formats are redacted before reuse.
125
+
126
+ **Prepare PR branch** works in a temporary Git worktree and does not switch or
127
+ edit the current checkout. **Push branch** and **Push & create PR** are
128
+ separate explicit actions. Doxloop invokes Git and GitHub CLI with argument
129
+ arrays rather than a shell and does not expose a pasteable shell command built
130
+ from branch names.
131
+
69
132
  ## Credentials and publishing
70
133
 
71
- Prefer `doxloop login` and the device flow. Environment variables avoid placing
72
- tokens in shell history; `--token` is intended for controlled automation.
73
- Stored credentials use user-only file permissions on operating systems that
74
- support them.
75
-
76
- Only `doxloop deploy` publishes. Native projects send a contained documentation
77
- bundle to the Doxbrix API. External generators are built on the user's machine;
78
- Doxloop removes its Doxbrix tokens from the child build environment, scans only
79
- the declared static output, rejects symbolic links/private keys/likely secret
80
- files, omits source maps, and enforces file and expansion limits before packaging.
81
- Deployments are private by default. A saved public deployment or
82
- `doxloop deploy --public` shows a default-no warning that anyone will be able
83
- to access the site. Non-interactive publishing requires explicit saved settings
84
- or `--public` together with `--yes`.
134
+ Sign in from the **Publish** page with **Sign in with browser**, which uses a
135
+ device flow so no token is typed or pasted. Stored credentials use user-only
136
+ file permissions on operating systems that support them, and **Sign out**
137
+ removes the local token.
138
+
139
+ Only **Publish to Doxbrix** publishes. Native projects send a contained
140
+ documentation bundle to the Doxbrix API. External generators are built on the
141
+ user's machine; Doxloop removes its Doxbrix tokens from the child build
142
+ environment, scans only the declared static output, rejects symbolic
143
+ links/private keys/likely secret files, omits source maps, and enforces file
144
+ and expansion limits before packaging. Deployments are private by default. A
145
+ public visibility setting is shown on the Publish page before every deployment,
146
+ with a note that anyone with the URL will be able to open the site. A **Dry
147
+ run** validates and builds without uploading anything.
85
148
 
86
149
  The archive is uploaded directly to one short-lived, single-object S3 URL whose
87
150
  SHA-256 checksum is signed. Doxbrix verifies the object size and checksum before
@@ -1,103 +1,236 @@
1
1
  # Troubleshoot Doxloop
2
2
 
3
- ## Check the complete setup
3
+ ## The control center does not open
4
4
 
5
- Inside an existing documentation project, run:
5
+ Doxloop requires Node.js 22.13 or later. If the browser does not open
6
+ automatically, visit `http://127.0.0.1:4317` yourself. If another process is
7
+ using that port, start Doxloop on a different one:
6
8
 
7
9
  ```bash
8
- doxloop doctor
10
+ doxloop ui --port 4400
9
11
  ```
10
12
 
11
- Before creating a new project, check the proposed sibling directories:
12
-
13
- ```bash
14
- doxloop doctor --source ./my-product --output ./my-docs
15
- ```
16
-
17
- Doctor checks the Node.js version, product-source boundary, selected agent and
18
- authentication, project skills, generator readiness, and documentation
19
- validation, plus the default preview port. It exits with code 1 when a required
20
- check fails.
21
-
22
- ## No supported agent is available
23
-
24
- Install Codex, Claude Code, or Gemini CLI and confirm its executable is on
25
- `PATH`. Alternatively:
26
-
27
- ```bash
28
- doxloop create --print
29
- ```
30
-
31
- Paste the prompt into an agent session opened at the project root.
32
-
33
- ## An installed skill is modified
34
-
35
- Doxloop does not overwrite local skill changes automatically.
36
-
37
- ```bash
38
- doxloop agent status
39
- doxloop agent update
40
- ```
41
-
42
- Review the diff before replacing intentional customizations.
43
-
44
- ## An external generator cannot load
45
-
46
- Install both core and the selected generator package in the documentation
47
- project. Then run:
48
-
49
- ```bash
50
- doxloop generator doctor
51
- ```
52
-
53
- Native generators may also require Python, Ruby, Hugo, or Node dependencies.
54
- The doctor output reports the expected build command.
55
-
56
- ## Create exits but synchronization is not recorded
57
-
58
- Doxloop withholds the baseline when validation fails or the create brief lacks
59
- `primaryAudience` or `priorityOutcomes`. Run `doxloop test`, resolve every
60
- error, and rerun create or update.
61
-
62
- ## Capture blocks a URL
63
-
64
- Capture rejects unconfigured origins, cross-origin navigation, and private
65
- network destinations. Add the intended public origin with `--reference`. For a
66
- trusted local reference only:
67
-
68
- ```bash
69
- DOXLOOP_ALLOW_PRIVATE_REFERENCES=1 doxloop capture http://localhost:3000/
70
- ```
13
+ The control center opens the setup wizard when the current folder is not a
14
+ documentation project, and the workspace when it is. To open an existing
15
+ workspace, start Doxloop inside that documentation folder.
16
+
17
+ ## The wizard rejects the workspace folder
18
+
19
+ Enter a folder name, not a path. The folder is created inside the directory
20
+ where you started Doxloop and must not already exist. A documentation project
21
+ also cannot be the same as, inside, or contain a connected source folder, so
22
+ start Doxloop from the parent folder of your product rather than from inside
23
+ it.
24
+
25
+ ## A source cannot be connected
26
+
27
+ On the **Sources** page, choose **Test connection** to see the exact reason.
28
+ Local folders must exist and be outside the documentation project. Git
29
+ repositories need a reachable URL and branch; private repositories need a
30
+ username and personal access token with read access. OpenAPI URLs must be
31
+ public, credential-free HTTP or HTTPS addresses that return a valid OpenAPI 3.x
32
+ or Swagger 2.0 document; see the
33
+ [remote OpenAPI safety policy](./openapi-security.md). Upload the file instead
34
+ when the specification is not publicly reachable.
35
+
36
+ ## No coding assistant is available
37
+
38
+ Choose Codex, Claude Code, or Gemini in the wizard's **Tools** step or in the
39
+ **Planning agent** field. If it is not installed, Doxloop offers to install
40
+ it. After installation, sign in to the assistant once in a terminal so it can
41
+ run without prompting; Doxloop never stores model API keys.
42
+
43
+ ## A run stops because an installed skill was modified
44
+
45
+ Doxloop refreshes the project-local authoring skills before each run and will
46
+ not overwrite a skill with local edits. The run's **Live activity** log names
47
+ the changed directory under `.agents/skills` or `.claude/skills`. Delete or
48
+ restore that directory and start the run again; Doxloop reinstalls the
49
+ packaged version.
50
+
51
+ ## An external generator cannot build
52
+
53
+ External generators need their adapter package and native toolchain. Choose
54
+ **Preview docs**, or publish: a publish runs the generator's strict build
55
+ first, uploads nothing if it fails, and its log names the failing command. Native generators may
56
+ require Python, Ruby, Hugo, or Node dependencies in addition to the adapter.
57
+
58
+ ## Validation warns that navigation was not verified
59
+
60
+ `navigation-unverified` means the generator's sidebar or menu is produced by
61
+ something Doxloop cannot read statically: a Hugo or Jekyll theme, a MkDocs
62
+ navigation plugin, a Starlight plugin, a VitePress or Starlight sidebar built
63
+ by a function or imported from another file, or a Sphinx `autosummary`
64
+ toctree. It is a warning, not an error, and it replaces the false
65
+ "unnavigated page" errors those sites used to get. Publishing performs the
66
+ generator's strict build first, which confirms every page is reachable. To turn the warning into real checks, list the navigation
67
+ in the generator's own configuration file instead of building it in code.
68
+
69
+ ## The wizard says a generator's tools are missing
70
+
71
+ The **Tools** step checks the runtime the selected generator needs: Node.js
72
+ 20.12 or later with npm, pnpm, or yarn; Python 3.9 or later with the `venv`
73
+ module; the `hugo` binary; or Ruby with Bundler. The project can still be
74
+ created, because the adapter package installs with npm, but **Preview docs**
75
+ and the strict build fail until the tool is installed. Install it, then choose
76
+ **Check again**. The check runs on the machine where `doxloop ui` runs, not on
77
+ the machine whose browser shows the control center.
78
+
79
+ ## A plan cannot be approved
80
+
81
+ **Approve & generate** stays disabled while questions remain under **Needs
82
+ your decision**, while a required screenshot page is missing its starting
83
+ route or capture details, or while screenshots are required and the
84
+ configured application is not reachable. Resolve each item, or change the
85
+ run's screenshot mode to **Automatic** or **No screenshots**.
86
+
87
+ A change to a connected source after the planner read it does not block
88
+ approval. The plan review notes that sources changed, the structure is
89
+ approved as proposed, and generation reads the current sources when it writes
90
+ each page. Choose **Ask the agent to revise** only when the change should
91
+ alter which pages are written.
92
+
93
+ ## A button stays on "Working…"
94
+
95
+ The control center waits at most two minutes for a local request and then
96
+ reports that the server did not respond. If that happens, check the terminal
97
+ where `doxloop ui` is running: a stopped or crashed server needs to be started
98
+ again, and a run that was interrupted can be retried from its last durable
99
+ stage under **Recent activity**.
100
+
101
+ ## Planning stopped after 20 minutes
102
+
103
+ The planner has a time budget so a run that never answers becomes a named
104
+ failure rather than a silent hang. The plan shows **Planning stopped after
105
+ 20 minutes without a plan reply** and can be retried. Raise **Maximum agent
106
+ minutes** under **Monitoring → Advanced watch scope and budgets** when the
107
+ product genuinely needs longer research, or set `DOXLOOP_PLAN_TIMEOUT_MINUTES`
108
+ in the environment that starts `doxloop ui` to change the planning budget
109
+ alone. A planning run that is stopped is ended together with any capture
110
+ browser it opened.
111
+
112
+ ## Stop leaves the workspace changing
113
+
114
+ Stopping a run ends the agent and the capture browser it started within ten
115
+ seconds. If files still change in the run workspace afterwards, the agent
116
+ process was started outside Doxloop's control, for example from a terminal
117
+ where `doxloop create` was run interactively; close that terminal session to
118
+ end it.
119
+
120
+ ## A run fails after the agent already did most of the work
121
+
122
+ A generation run can stop after the pages are written, for example when
123
+ required screenshots were not captured for every guide, when the agent hit its
124
+ time budget, or when validation found a problem. Doxloop keeps that run's
125
+ isolated workspace, so nothing the agent wrote or captured is lost. The plan
126
+ review shows **Continue without starting over** with the choices that apply:
127
+
128
+ - **Resume generation** starts the agent again inside the same workspace with
129
+ a brief of what is already finished: which pages exist, which screenshots
130
+ are verified, and why the previous run stopped. Verified screenshots and
131
+ completed pages are kept; only the unfinished or rejected parts are redone.
132
+ - **Ignore problems & continue** accepts the generated files for review as
133
+ they are. Every screenshot problem is recorded on its manifest step as
134
+ text-only, broken image references are removed from the page, and the
135
+ proposal shows how many problems were ignored so you can judge them before
136
+ publishing.
137
+ - **Retry generating** in the footer starts a new run from the approved plan.
138
+ Use it when the workspace itself is unusable.
139
+
140
+ The same two actions appear on a failed proposal under **Review**. When the
141
+ planner itself fails a planning gate but proposed real pages, the plan review
142
+ offers **Review this plan anyway**, which opens that plan for editing and
143
+ approval with the unmet gate shown as a note.
144
+
145
+ Source code that changed after the run stopped never blocks either
146
+ continuation. The proposal carries a note that sources changed, a resumed agent
147
+ re-checks the pages it touches against the current sources, and the proposal's
148
+ evidence snapshot is refreshed so it can be accepted.
149
+
150
+ ## The run reports a Claude API error
151
+
152
+ Claude's own API request can break off mid-response: the log shows a line such
153
+ as `API Error: Server error mid-response`, `overloaded`, or a rate limit, and
154
+ Claude exits. Nothing in the documentation task caused this, and the agent's
155
+ session is intact, so Doxloop resumes that session in the same workspace after
156
+ a short pause, up to twice per run. The log shows **Resuming the same session
157
+ (attempt 1 of 2)**, and the agent continues with its context, keeping every
158
+ page and screenshot it already produced.
159
+
160
+ The run fails only when every resume fails too. The message then names the
161
+ API error and how many resumes were tried. Use **Resume the run** under
162
+ **Continue without starting over** once the API is available again; it
163
+ starts the agent in the same workspace with a brief of what is finished, so
164
+ completed pages and verified screenshots are not paid for twice. Do not use
165
+ **Retry generating**, which starts a new run from the plan and captures
166
+ everything again.
167
+
168
+ Set `DOXLOOP_AGENT_API_RESUMES` in the environment Doxloop runs in to change
169
+ how many automatic resumes a run gets; `0` disables them.
170
+
171
+ ## Generation finishes but nothing changed
172
+
173
+ Generation never edits the documentation directly. Open **Review** to inspect
174
+ the proposal and accept its changes. The **Home** page shows **Needs your
175
+ review** whenever a proposal is waiting.
176
+
177
+ ## Accepting a change reports a conflict
178
+
179
+ A file was edited outside Doxloop while the proposal was pending. Doxloop
180
+ compares the original fingerprint before writing and stops rather than
181
+ overwriting your edit. Review the current file, then use **Ask agent to
182
+ revise** to regenerate the affected page against the new content, or edit the
183
+ page directly in the proposal.
71
184
 
72
185
  ## Guide screenshots are missing
73
186
 
74
- Application guide screenshots are created during `doxloop create` or
75
- `doxloop update`, not by design-reference capture. Ask for screenshots in the
76
- request or pass `--screenshots`. Configure `application.baseUrl` and, when
77
- Doxloop should start the application, a configured source name plus
78
- `startCommand` in `.doxloop/project.json`.
79
-
80
- If the selected agent has no browser capability, the application is unreachable,
81
- or authentication and safe test data are unavailable, Doxloop keeps the text
82
- guide complete and omits broken image links. Establish a non-production browser
83
- session or local fixture and rerun the affected update. Never provide production
84
- credentials or customer data for screenshot capture.
85
-
86
- ## API requests fail
87
-
88
- Confirm the API URL uses HTTPS, the token starts with `dxb_`, and the endpoint
89
- does not redirect. HTTP is accepted only for loopback development. Prefer
90
- `doxloop login` to refresh credentials.
91
-
92
- ## Preview port is occupied
93
-
94
- Choose another port:
95
-
96
- ```bash
97
- doxloop preview --port 4400 --open
98
- ```
99
-
100
- ## Validation and native builds disagree
101
-
102
- `doxloop test` performs fast project and content checks; the native build is the
103
- final generator parser. Run both and treat either failure as blocking.
187
+ Application screenshots are captured during generation, not during planning.
188
+ Enable them with **Add product screenshots?** on the Create or Update page, or
189
+ set the policy under **Settings → Visual evidence**. Configure the
190
+ **Application base URL**, a **Ready path**, and a safe **Default starting
191
+ route**, then choose **Test application** to confirm the page is reachable.
192
+
193
+ If the selected assistant has no browser capability, the application is
194
+ unreachable, or safe test data is unavailable, Doxloop keeps the text guide
195
+ complete and omits broken image links.
196
+
197
+ When **Test application** reports **Sign-in needed**, open **Application
198
+ sign-in** on the same page. **Sign in with browser** opens a Chrome window where
199
+ you sign in by hand, including MFA or SSO; choose **Save session** once the
200
+ signed-in screen is showing, and every capture run starts with that session
201
+ loaded. For a plain username and password form you can instead save a test
202
+ account's credentials; the agent fills the form by secret name and never sees
203
+ the values. A **saved browser session has expired** message means the
204
+ application no longer accepts the recorded session: sign in with the browser
205
+ again. Both are stored on your computer outside the project, never in the
206
+ repository. Never provide production credentials or customer data for
207
+ screenshot capture.
208
+
209
+ ## Monitoring does not run
210
+
211
+ Open **Sources → Monitoring**. Every source type can be scheduled: a Git
212
+ repository through its provider, a local folder in place. On macOS, Doxloop
213
+ tests the scheduled job in the real scheduler context when you choose **Save
214
+ and install** and reports whether the background process can find the coding
215
+ assistant. Choose **Check now** to run one cycle immediately; a notice reports
216
+ its result and the full log is under **Recent activity** on the Home page.
217
+
218
+ A local folder without Git history reports "no sync baseline" until the first
219
+ accepted update records one. Run **Plan** once so later checks can compare
220
+ the folder's files against that baseline.
221
+
222
+ ## Deployment fails
223
+
224
+ Deployment stops when validation reports errors. Open **Review** to see the
225
+ errors on the affected files, or open the failed publish's log on the
226
+ **Publish** page for the full validation and build output. If Doxbrix does not
227
+ accept the saved sign-in, choose **Sign in again**; the Doxbrix API requires HTTPS and does not
228
+ follow redirects. **Deployment history** on the same page keeps the outcome of
229
+ every attempt.
230
+
231
+ ## Preview shows stale content
232
+
233
+ **Preview docs** serves the accepted documentation, not a pending proposal.
234
+ Use **Preview documentation** on the Review page to see a proposal before you
235
+ accept it. The local preview runs on port 4321; close any other server using
236
+ that port.