Skip to content

docs(architecture): configuration-over-code page + atom-card page-types#328

Closed
rubenvdlinde wants to merge 3 commits into
betafrom
docs/config-over-code-and-atom-cards
Closed

docs(architecture): configuration-over-code page + atom-card page-types#328
rubenvdlinde wants to merge 3 commits into
betafrom
docs/config-over-code-and-atom-cards

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Summary

  • New page at /docs/architecture/configuration-over-code/ — frames the manifest + schemas contract as the safe sandbox for AI agents and citizen developers. Names the failure modes that the JSON contract collapses (typo → validation error, no JS to execute, bounded blast radius, reversible changes), and links to:
    • Spec-driven development tutorialconduction.nl/academy/spec-driven-development (companion PR on ConductionNL/conduction-website)
    • OpenBuiltconduction.nl/apps/openbuilt (visual app builder; same contract, no JSON editor)
  • Manifest page: "Page types" restructured into atom-aware cards (one per type), mirroring the AtomZones vocabulary from the app-design-principles page. Each card shows the atom composition with present atoms bold and off atoms muted.
  • Sidebar positions bumped so the new page lands at position 3: schemas-and-registers 3→4, customization 4→5.
  • Landing page now has a fifth entry-point tile ("Configuration over code") and an updated lede ("Five entry points" instead of "Four").

Test plan

  • cd docusaurus && npm start — landing page shows five cards in the grid, no MDX/JSX parse errors on the manifest page.
  • /docs/architecture/manifest/ → "Page types" renders as eight cards with atom rows.
  • /docs/architecture/configuration-over-code/ resolves; outbound links render.
  • Sidebar order: App design principles → App manifest → Configuration over code → Schemas and registers → Customising default pages.
  • npm run check:docs still passes.

…-types

- New /docs/architecture/configuration-over-code page framing the
  manifest + schemas contract as the safe sandbox for AI agents and
  citizen developers. Links to the academy tutorial on spec-driven
  development and to conduction.nl/apps/openbuilt.
- Manifest page: "Page types" section restructured from a flat table
  into atom-aware cards (one per type), matching the AtomZones
  vocabulary used on the app-design-principles page. Each card
  shows the atom composition (present/off) plus what fills Main and
  what the Sidebar carries.
- Sidebar positions bumped: schemas-and-registers 3 -> 4,
  customization 4 -> 5, to make room for the new page at position 3.
- Landing page: 5th entry-point tile "Configuration over code" added,
  eyebrow text updated from "Four entry points" to "Five entry points".
- overview.md: replace the Mermaid 3-layer graph with three stacked
  cn-domain-tree hex diagrams (Your app / @conduction/nextcloud-vue /
  @nextcloud/vue), middle trunk in orange to mark the layer this site
  documents. Side-effect import of @conduction/docusaurus-preset/diagrams,
  wrapped in BrowserOnly for SSR safety.
- configuration-over-code.md: rewrite the "Spec-driven development"
  section around OpenSpec (the real Hydra method): humans write specs +
  ADRs, AI implements to them; org-wide vs per-app ADR tiers; the
  /opsx-explore and /opsx-apply skills; ADR-031 declarative business
  logic with n8n/Windmill via WorkflowEngineInterface; the quality +
  gatekeeping harness. Was incorrectly framed as the JSON-manifest
  authoring workflow.
The top-level `import '@conduction/docusaurus-preset/diagrams'` defined
web-component classes extending HTMLElement at module-eval during static
site generation, where HTMLElement is undefined. Drop the top-level
import; require() the diagrams module inside the BrowserOnly render
function so it only runs in the browser.
@rubenvdlinde
Copy link
Copy Markdown
Contributor Author

Superseded by #331, which targets development (the org branch-protection rule rejects feature→beta). Same docs changes, rebuilt on development. Closing this one.

# Configuration over code

The point of `@conduction/nextcloud-vue` + OpenRegister isn't "less Vue to write". It's **less code, full stop**. Every page, every form, every list, every dashboard tile that a Conduction app ships is meant to be a row in a JSON file, not a `.vue` file in a `src/` tree.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 configuration-over-code.md is placed at sidebar_position: 3 — collides with schemas-and-registers.md before its position bump

configuration-over-code.md sets sidebar_position: 3. The PR also bumps schemas-and-registers.md from 3 → 4 and customization.md from 4 → 5, so the final order is 1 (overview), 2 (manifest), 3 (config-over-code), 4 (schemas-and-registers), 5 (customization). Within a single commit/build this is fine because both files are applied together — but the positional intent should be documented here. No action needed; just confirming it is consistent.


The end state of the configuration-over-code shift is that you don't author either file by hand. **OpenBuilt** is the visual app builder we're building on top of the manifest contract: drag schemas in, point and click the navigation, preview the chassis, publish — no JSON editor, no terminal, no Vue, no review.

→ [OpenBuilt — visual app builder](https://conduction.nl/apps/openbuilt)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 External links in configuration-over-code.md are not verified to be live

Two external URLs are introduced:

  • https://conduction.nl/academy/spec-driven-development (referenced twice)
  • https://conduction.nl/apps/openbuilt

Neither could be verified as live at review time. If these pages do not yet exist, readers will hit 404s. Consider linking to a coming soon anchor or using a placeholder note until the URLs are live.

Copy link
Copy Markdown

@WilcoLouwerse WilcoLouwerse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: REQUEST_CHANGES — two blockers: (1) branch-protection / check-branch is REQUIRED and failing (same pattern as #236 — source branch name likely doesn't satisfy the convention); (2) unescaped apostrophes (library's, platform's) inside a single-quoted JS string in docusaurus/src/pages/index.js:297 terminate the string literal early and will break the Docusaurus build. Fix: switch to double quotes or a template literal. All internal docs cross-links resolve and MDX/JSX safety is otherwise correct.

Inline comments:

Additional findings:

🔴 Required CI check failing: branch-protection / check-branch

The branch-protection / check-branch required check is failing, which blocks merging. This is the same pattern seen on other PRs targeting beta — the branch name (docs/config-over-code-and-atom-cards) likely does not satisfy the branch-naming convention enforced by the check. The PR author should confirm the target branch is correct or rename the source branch to match the convention. No code change in this PR can fix a branch-naming gate.

🟢 All internal cross-links resolve on beta

All internal doc links introduced in the PR were verified against the beta branch tree:

  • ./manifest.md
  • ./schemas-and-registers.md
  • ./app-design-principles.md ✓ (exists on beta)
  • /docs/utilities/composables/use-app-manifest
  • All eight CnXxxPage component links (/docs/components/cn-*-page) ✓

🟢 MDX safety in manifest.md — inline style props are valid JSX

The new atom-card grid in manifest.md uses <div style={{ ... }}> JSX-style inline styles with double-brace syntax, which is correct for MDX. No unescaped { characters, no raw HTML attributes that would be rejected by the MDX parser. The @docusaurus/BrowserOnly usage in overview.md is also correct: the custom-element tags (<cn-domain-tree>, <cn-hex>) are wrapped inside BrowserOnly to avoid SSR issues with non-registered web components.

🟢 JSDoc ratchet failure in Code Quality is pre-existing and unrelated to this PR

The Frontend Quality / JSDoc completeness ratchet step has been failing consistently on all recent beta PRs (at least 5 consecutive SHAs before this one). It is a repo-wide pre-existing issue not introduced by this docs-only change and should not block this PR independently.

🟡 Unescaped apostrophes break JS string literal in index.js

The new CARDS entry in docusaurus/src/pages/index.js uses a single-quoted string for body, but the value contains two bare apostrophes: library's and platform's. These terminate the string literal early, causing a JavaScript syntax/parse error that will break the Docusaurus build.

Fix: either escape the apostrophes (library\'s, platform\'s) or switch the string delimiter to a template literal or double quotes:

body:
  "Every page, form, list, and dashboard is a row in a JSON file — not a .vue file. That makes the same contract safe for AI agents and citizen developers to author, because the runtime stays the library's and the sandbox stays the platform's.",

(intended for docusaurus/src/pages/index.js:297)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants