{"id":1308,"date":"2026-02-15T20:14:30","date_gmt":"2026-02-15T20:14:30","guid":{"rendered":"https:\/\/docs.ai.drawconclusions.org\/?page_id=1308"},"modified":"2026-02-24T12:45:55","modified_gmt":"2026-02-24T12:45:55","slug":"devdocs","status":"publish","type":"page","link":"https:\/\/docs.ai.drawconclusions.org\/?page_id=1308","title":{"rendered":"DevDocs"},"content":{"rendered":"<h2>Goal<\/h2>\n<p>Goal: publish documentation through WordPress at <code>https:\/\/docs.ai.drawconclusions.org<\/code> from the sources in <code>docs\/devdocs\/<\/code> (via a prepared bulk payload file). Domains are sourced from <code>server\/var_www\/config.xml<\/code> (source of truth).<\/p>\n<h2>Structure (Multidimensional)<\/h2>\n<h2>Structure<\/h2>\n<p>WordPress should expose multiple entry points and pages, organized by these dimensions:<\/p>\n<ul>\n<li>Devices: local, do-droplet, git-server<\/li>\n<li>Docker containers<\/li>\n<li>Installed software (git, docker, etc.)<\/li>\n<li>App components (fe, be, database)<\/li>\n<li>Individual documentation files (one page per file)<\/li>\n<\/ul>\n<h2>Cross-Linking (Duplication Is Expected)<\/h2>\n<h2>Crosslinking<\/h2>\n<p>Each dimension page must include the information relevant to it, even if that duplicates content found elsewhere. Example: a page about &quot;deployment&quot; should also mention Git, and the Git page should also mention deployment. At minimum, include a link between related pages.<\/p>\n<h2>Output<\/h2>\n<p>DevDocs are WordPress pages served at <code>https:\/\/docs.ai.drawconclusions.org<\/code>. WordPress data (config, themes, plugins) is stored in <code>server\/var_www\/devdocs_wp\/<\/code> (server path: <code>\/var\/www\/devdocs_wp<\/code>). DevDocs content is authored in <code>docs\/devdocs\/<\/code> and transformed into a prepared payload file at <code>server\/var_www\/devdocs_wp\/wp_bulk_payload.json<\/code> (server path: <code>\/var\/www\/devdocs_wp\/wp_bulk_payload.json<\/code>). Publish via <code>python3 scripts_local\/publish_devdocs.py<\/code>.<\/p>\n<h2>Permalinks (Page IDs)<\/h2>\n<h2>Permalinks<\/h2>\n<ul>\n<li>WordPress permalinks must use page IDs (e.g., <code>\/?page_id=123<\/code>).<\/li>\n<li>This prevents URL changes when pages move in the hierarchy.<\/li>\n<li>Internal doc links should use page-id permalinks.<\/li>\n<\/ul>\n<h2>DevDocs vs rulebook<\/h2>\n<h2>Rulebook<\/h2>\n<ul>\n<li><code>docs\/rulebook\/<\/code> is the primary authority for rules\/contracts.<\/li>\n<li><code>docs\/devdocs\/<\/code> is the source of truth for documentation content.<\/li>\n<li>The prepared WordPress payload is stored at <code>\/var\/www\/devdocs_wp\/wp_bulk_payload.json<\/code> and is imported by the WordPress plugin.<\/li>\n<li><code>server\/var_www\/devdocs_wp\/<\/code> stores the WordPress data (config, themes, plugins) that powers DevDocs.<\/li>\n<li>Changes must be made in <code>docs\/devdocs\/<\/code>, then published via <code>python3 scripts_local\/publish_devdocs.py<\/code>.<\/li>\n<\/ul>\n<h2>Docs Freshness<\/h2>\n<h2>Flag<\/h2>\n<ul>\n<li>The previous Docusaurus-based build and freshness flag are removed.<\/li>\n<li>WordPress sync uses a hash manifest to update changed pages only (publish via <code>python3 scripts_local\/publish_devdocs.py<\/code>).<\/li>\n<\/ul>\n<h2>Categories<\/h2>\n<ul>\n<li>Pages are tagged with <code>doc_category<\/code> taxonomy based on slug rules.<\/li>\n<li>Categories show in the right-hand column and link to category listing pages.<\/li>\n<\/ul>\n<h2>Doc Layers<\/h2>\n<h2>Layers<\/h2>\n<ul>\n<li>Pages (except Home) should be tagged with the <code>doc_layer<\/code> taxonomy.<\/li>\n<li>Layer terms use the <code>DEVELOPERDOCS_ID<\/code> slug of the layer root page (for example, the top section pages set <code>LAYER: &lt;their DEVELOPERDOCS_ID&gt;<\/code> and all children inherit that layer).<\/li>\n<\/ul>\n<h2>Sidebar Navigation<\/h2>\n<h2>Sidebar<\/h2>\n<ul>\n<li>Breadcrumbs show the page path up to Home.<\/li>\n<li>Right sidebar includes Categories and Children sections.<\/li>\n<\/ul>\n<h2>UX Helpers<\/h2>\n<h2>Ux<\/h2>\n<ul>\n<li>Back-to-top button appears when scrolling down (plugin: Codex Back To Top).<\/li>\n<li>Collapsible Table of Contents appears when a page has multiple headings.<\/li>\n<li>Top menu includes a default WordPress search bar at the far right (after the theme toggle).<\/li>\n<\/ul>\n<h2>Workflows<\/h2>\n<ul>\n<li>Workflow docs live in <code>workflows.md<\/code> and link to feature + test pages.<\/li>\n<\/ul>\n<h2>Transition Plan<\/h2>\n<h2>Plan<\/h2>\n<ul>\n<li>The detailed migration plan lives in <code>transition_plan_devdocs.md<\/code>.<\/li>\n<p>fixme<\/p>\n<\/ul>\n<h2>Islands<\/h2>\n<ul>\n<li>Islands group features into navigational sections (see <code>islands.md<\/code>).<\/li>\n<\/ul>\n<h2>Three-Layer Rule (Concept \u2192 Architecture \u2192 Implementation)<\/h2>\n<h2>Layer<\/h2>\n<ul>\n<li>Every subject must be documented in three layers:<\/li>\n<p>1) Concept (non-technical, user-facing meaning) 2) Architecture (technical overview, system-level design) 3) Implementation Notes (deep practical build details)<\/p>\n<li>Each Concept page must link to its Architecture page.<\/li>\n<li>Each Architecture page must link to its Implementation Notes page.<\/li>\n<li>Each Implementation Notes page must link back to Architecture and list relevant tables\/services\/routes\/files.<\/li>\n<li>This is a general rule for DevDocs and should be applied going forward.<\/li>\n<li>For rulebook: use this structure only when it best fits Codex understanding (apply selectively).<\/li>\n<\/ul>\n<h2>Security<\/h2>\n<ul>\n<li>WordPress uses the Codex WP security plugin to reduce self-disclosure and disable XML-RPC.<\/li>\n<\/ul>\n<p class=\"developerdocs-id-search\" aria-hidden=\"true\">DeveloperDoc ID: dd_id_8f1b217e50<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Goal Goal: publish documentation through WordPress at https:\/\/docs.ai.drawconclusions.org from the sources in docs\/devdocs\/ (via a prepared bulk payload file). Domains are sourced from server\/var_www\/config.xml (source of truth). Structure (Multidimensional) Structure WordPress should expose multiple entry points and pages, organized by these dimensions: Devices: local, do-droplet, git-server Docker containers Installed software (git, docker, etc.) App components [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1312,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"doc_category":[],"doc_layer":[29],"class_list":["post-1308","page","type-page","status-publish","hentry","layer-dd_id_251cc20e41"],"_links":{"self":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1308"}],"version-history":[{"count":9,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1308\/revisions"}],"predecessor-version":[{"id":3825,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1308\/revisions\/3825"}],"up":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1312"}],"wp:attachment":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1308"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_category&post=1308"},{"taxonomy":"doc_layer","embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_layer&post=1308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}