This experiment uses an Obsidian .base file to describe database-like views over the sandbox’s own notes. Its filter selects Markdown files, formulas calculate area, relative modification time and tag count, and four views request two tables, a list and cards. The native fixture produces its own HTML page; the Markdown explanation is a different route and is not itself evidence that the fixture was rendered.

Exact configuration from /home/loca/dev/quartz-sandbox/sandbox/engine/quartz.config.yaml, lines 176–181:

  - source: "@quartz-community/bases-page"
    enabled: true
    options:
      defaultViewType: table
      linkResolution: shortest
    order: 50

linkResolution: shortest matches the real crawl-links setting markdownLinkResolution: shortest at line 116. The page-type override below is copied from lines 404–407 of the same configuration, nested under layout.byPageType:

    bases:
      exclude:
        - table-of-contents
        - reader-mode

The actual native fixture /home/loca/dev/quartz-sandbox/sandbox/vault/experiments/sandbox-notes.base, lines 1–66, is reproduced unchanged in full rather than combining shortened fragments into a fabricated example:

filters:
  and:
    - file.ext == "md"
formulas:
  area: |
    if(file.inFolder("experiments"), "experiment",
    if(file.inFolder("config"), "configuration",
    if(file.inFolder("plugins"), "plugins", "entry")))
  updated: file.mtime.relative()
  tag_count: file.tags.length()
properties:
  title:
    displayName: Page
  note.description:
    displayName: Description
  formula.area:
    displayName: Area
  formula.updated:
    displayName: Updated
  formula.tag_count:
    displayName: Tags
views:
  - type: table
    name: Every sandbox page
    groupBy:
      property: formula.area
      direction: ASC
    order:
      - file.name
      - title
      - formula.area
      - formula.updated
    sort:
      - property: formula.area
        direction: ASC
      - property: file.name
        direction: ASC
    columnSize:
      file.name: 240
      note.title: 280
      formula.area: 150
  - type: table
    name: Experiments only
    filters:
      and:
        - file.inFolder("experiments")
    order:
      - file.name
      - title
      - formula.tag_count
      - formula.updated
    sort:
      - property: file.name
        direction: ASC
  - type: list
    name: Recently updated
    order:
      - file.name
      - formula.updated
    limit: 10
  - type: cards
    name: Cards
    order:
      - title
      - formula.area
    limit: 24

The source explanation at /home/loca/dev/quartz-sandbox/sandbox/vault/experiments/bases-native-page.md describes build-time formula evaluation and materialized view HTML rather than browser-side live queries. The literal view name Recently updated is not a measured ordering guarantee: that view has a ten-item limit but no explicit sort in this fixture. The recorded marker check does not evaluate the formula cells, row ordering or limits.

What the rendered output proves

The prior capture in /home/loca/dev/quartz-sandbox/evidence/2026-09-15-quartz-migration-f1fd35c3/sandbox-experiments.json classifies this experiment as Native Bases page. Its proof_route is /experiments/sandbox-notes.base.html, corresponding to the live generated Bases page. Its exact proof_markers are bases_table: 2 and bases_tabs: 1.

The browser capture records title sandbox-notes — Quartz Sandbox, 74600 bytes, and those two table markers plus one tab-container marker. It also records graph_container: 1, global_graph_container: 1, explorer_content: 1, nav_files_container: 1, search_button: 1, and search_container: 1. These distinguish emitted native page content and surrounding site chrome; they do not count four successful tab interactions.

The separate explanatory page, at /experiments/bases-native-page.html, was captured with title Native Bases Pages — Quartz Sandbox, 48382 bytes, reading_stats: 1, reading_words: "327", and reading_minutes: "2". Its prose and code examples are not a replacement for the .base.html proof route.

These are prior Chrome DOM captures against dist-1789511778 on the temporary loopback origin http://127.0.0.1:51963, not fresh checks of the public URLs. The receipt records Chrome exit 0 for all 22 captured routes, all_routes_raw_wikilinks: 0 and all_routes_internal_broken_class: 0. DOM presence does not establish tab switching, correct sorting, cell-link navigation, card/list usability, or JavaScript-disabled behavior. The source explanation says unlisted notes are excluded from Bases views; the receipt does not include a dedicated Bases-row absence assertion, so that is not claimed here as a measured result. Likewise, the layout exclusions are configuration, not separately counted absence assertions.

Safe for the shared engine?

Recorded assessment: safe_for_shared_engine: false.

Receipt reason, verbatim:

The expression engine and four build-time view renderers add build cost and a second link-resolution surface.

This is a recorded assessment, not deployment authority. Even a true verdict does NOT authorize a shared-engine change: any requirement to change /home/loca/dev/quartz/quartz must be reported as a BLOCKER, not an action. This experiment remains isolated rather than adding the expression engine, view renderers or layout overrides to the engine serving 51 wikis.

Try it in the sandbox

The sandbox-only rebuild command is:

cd /home/loca/dev/quartz-sandbox/sandbox && ./build.sh

The real wrapper /home/loca/dev/quartz-sandbox/sandbox/build.sh pins the isolated engine to commit 3dff48b5df6d84c9544a5ae19c8f2cbb01dc44e5 and rejects an engine outside the sandbox project. It takes a nonblocking .build.lock, runs npm run install-plugins BEFORE bootstrap-cli.mjs build, and passes --directory pointing to sandbox/vault and --output pointing to a fresh timestamped sandbox/dist-<epoch>. It checks that index.html exists before atomically swapping current. The origin sees the new release on the next request without a restart. The wrapper uses umask 022 and retains the new release plus two prior timestamped releases.

Recorded runtime invocation from sandbox-runtime.json, reference only:

PATH=/usr/bin:/bin PORT=51947 SANDBOX_ROOT=/home/loca/dev/quartz-sandbox/sandbox/current NODE_ENV=production /usr/bin/node /home/loca/dev/quartz-sandbox/sandbox/serve.mjs

The production service already owns port 51947. Do NOT start a second process or restart the service. The runtime receipt records an earlier manual-origin exercise; it is not an instruction to recreate that process. No sandbox rebuild or service change was performed to author this documentation.

index