Skip to content

Organizing fibers

Three surfaces carry structure: status says whether something is a todo, containment says what belongs inside what, and wikilinks say how ideas connect in prose. They work independently. Each does one job.

Statuses

Add a status only when you want one. Most fibers never need one.

Icon Status Meaning
· untracked No status key at all. A note, a reference doc, a container.
open Tracked, not started.
active In progress.
closed Done, outcome captured.

Fibers default to untracked, and untracked ranks no lower than the rest. A durable reference fiber holds no todo, and giving it a status only adds noise to felt ls.

felt edit damping-prior -s active
felt edit damping-prior -s closed -o "Gaussian prior at 2.5 Mpc/h; flat prior biased the fit low."

Closing stamps closed-at. Write the outcome at the same moment — see Outcomes below.

felt ls shows open and active by default. Any filter — a query, -t, -n — widens automatically to all statuses, so a search finds closed work without your having to ask twice.

felt ls                       # open and active
felt ls -s closed             # only closed
felt ls -s all                # everything
felt ls "covariance"          # search, all statuses

Containment

The filesystem carries the hierarchy. A fiber nested inside another fiber's directory belongs to it. Nesting the directory records the containment; nothing else needs to stay in sync.

felt tree
felt tree bao-analysis --depth 2

Reshape with nest and unnest. Both move the whole subtree and rewrite ids and dependency references as they go.

felt nest damping-prior bao-analysis     # → bao-analysis/damping-prior
felt unnest bao-analysis/damping-prior   # → damping-prior

felt add also resolves the leading segment of a slug against existing fibers. If project/launch exists, then:

felt add launch/log "Launch log"    # lands at project/launch/log

--top-level opts out and creates at the root. An ambiguous leading segment — the same basename in several subtrees — aborts and lists the candidates rather than picking one.

Containers should not be todos

Keep open/active meaning todo. Mark a container fiber that holds children untracked or closed; the work lives in the leaves. An active container sits in felt ls forever and teaches you to ignore the list.

Connect fibers in prose with [[wikilink]] in the body. felt uses the Obsidian format deliberately: a .felt/ directory opens directly as an Obsidian vault, with backlinks and graph view working out of the box.

The jackknife estimate disagrees with [[analytic-covariance]] below ℓ=300,
which is what pushed us to [[bao-analysis/damping-prior|the tighter prior]].

Supported forms: [[slug]], [[slug|label]], [[slug#fragment]], and [[slug#fragment|label]]. Ordinary markdown links to files are also checked.

felt computes reverse citations on demand:

felt show analytic-covariance --citations
felt show analytic-covariance -d summary   # lede + citations + consumers

A link earns its place by doing work inside a sentence — naming what the other fiber is, why it matters here, where to go next.

Avoid a "Related" list at the bottom of a fiber. It usually signals a relationship you have not thought through yet. Fold those links into the prose where they belong, or drop the ones that were never earning their keep.

Outcomes teach

The outcome field states the conclusion in one line. felt show displays it at every detail level from compact up, and it headlines a Shuttle kanban card. Readers meet this sentence most often, so write it well.

An outcome that says "done" has failed. Say what was learned, decided, or measured, in a sentence that stands alone:

# no
outcome: Finished the covariance work.

# yes
outcome: Jackknife over 200 patches beats the analytic model below l=300; the
  analytic version underestimates the diagonal by ~15% there.

Include what you decided not to do. Nobody reconstructs that part six months later.

For anything longer than a sentence, edit the file directly with a |- block scalar:

outcome: |-
  Jackknife wins below l=300. Above that the two agree to 2%.

  Rejected: analytic-only (biased low), and the full mock suite (too slow
  to regenerate per systematics variation).

felt edit -o "…" goes through the shell, which mangles multiline content and quotes. The block scalar takes the content literally, so paragraphs, lists, and embeds round-trip cleanly.