Skip to content

docs: add OpenFNIRS component request - #41

Open
exanova-y wants to merge 2 commits into
plurigrid:mainfrom
exanova-y:request/openfnirs-components
Open

docs: add OpenFNIRS component request#41
exanova-y wants to merge 2 commits into
plurigrid:mainfrom
exanova-y:request/openfnirs-components

Conversation

@exanova-y

@exanova-y exanova-y commented Aug 5, 2026

Copy link
Copy Markdown

Summary

  • request to borrow one assembled and preferably tested fNIRS sensor module
  • request one ECU board
  • request one ST-LINK programming unit and its cables/adapters
  • note that approximately $500 in additional funding would help complete the clone

Validation

  • git diff --check

@zubyul

zubyul commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Built this locally against origin/main (8b466b2). Flagging that this PR currently changes nothing about the site, so there is no way to review it as rendered output.

Why nothing renders

The PR adds exactly one file, assets/hardware-builds/openfnirs/component-request.md. Forester only ingests *.tree files from the directories listed under trees in forest.toml; assets is copied, never parsed. So the built forest on this branch is identical to main — I built both and diffed, and there is no new page.

Markdown in assets/ is fine as a source artifact, but it will never appear on bci.place.

Making it build and be transcluded

Author it as a tree, e.g. trees/req-openfnirs-components.tree:

\title{OpenFNIRS component request}
\taxon{reference}
\author{exanova-y}
\date{2026-08-06}
\import{macros}
\tag{openfnirs}
\tag{hardware}

\p{To support cloning the paper's OpenFNIRS system, requesting:}

\ul{
  \li{One assembled sensor module, preferably tested — 660 nm and 940 nm LEDs, photodiode, op-amp, MOSFETs, passives, connectors}
  \li{One ST-LINK programming unit — USB cable, ribbon cable, adapter leads}
}

\p{Approximately $500 of additional funding would complete the clone.}

Two things to be careful about, both of which have bitten this repo:

  • Write the figure as plain $500, not \$500. Forester treats $ as ordinary literal text and has no \$ command; \$ is a lexer error that aborts the whole build at zero pages. That exact escape is what is currently breaking docs: archive complete Neuromodec 2026 notebook #42.
  • Keep \import{macros} at the top level of the file, never nested inside a \subtree{} — the nix build scopes imports to the subtree they appear in and will fail even when a local build passes.

Then transclude it so it actually joins the site. This forest transcludes its reachable closure into index.tree -> bcf-0001 -> ..., so a tree that nothing transcludes gets a standalone page but never appears in the main read. Main already carries openfnirs material in trees/bcf-0011.tree, trees/bcf-0036.tree, and trees/dev-opennirscap.treedev-opennirscap is the natural parent:

\transclude{req-openfnirs-components}

Checking it compiles

./forester build forest.toml 2>&1 | tee /tmp/build.log
grep -c 'Parse_error' /tmp/build.log        # must be 0
ls output/req-openfnirs-components.xml      # your page must exist

Exit status alone is not enough: a parse error in a single tree is recoverable, so forester drops that tree and still exits 0. Always assert the .xml exists.

Note that \quiver / \tex / \tikz shell out to latex, so build inside nix develop (the flake pins texliveFull) or the run dies at the resource stage with External_error and emits nothing. CI runs nix build .#forest.

To read it, serve over HTTP — the XSLT does not apply over file://:

python3 -m http.server -d output 8080   # open /index.xml

zubyul
zubyul previously approved these changes Aug 8, 2026

@zubyul zubyul left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed locally: both changed Forester pages render successfully.

@zubyul
zubyul dismissed their stale review August 9, 2026 00:09

Withdrawn: this approval was submitted by an interrupted session that misread next as approve; next means skip.

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