Skip to content

docs: dev-setup guide, markdown CI, and behaviour specs - #25

Closed
Godbrand0 wants to merge 1 commit into
StelFlow-labs:mainfrom
Godbrand0:docs/dev-setup-ci-lint-and-behaviour-specs
Closed

docs: dev-setup guide, markdown CI, and behaviour specs#25
Godbrand0 wants to merge 1 commit into
StelFlow-labs:mainfrom
Godbrand0:docs/dev-setup-ci-lint-and-behaviour-specs

Conversation

@Godbrand0

@Godbrand0 Godbrand0 commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

What this changes

Bundles three independent, small doc/tooling issues onto one branch:

Closes #15, closes #14, closes #8.

Why

All three are groundwork issues with no code dependency on each other, small enough individually that three separate reviews would be more overhead than value, but related enough (all "docs + CI for docs" work) that reviewing them together makes sense.

On #15 — honesty gap, flagged rather than hidden

This machine already had rustup, the stable toolchain, and stellar-cli installed from earlier project work, so two things in the doc are not verified in this pass and are called out explicitly in the doc's own "What wasn't verified here" section instead of being faked:

  1. A timed, from-empty cargo install --locked stellar-cli run.
  2. stellar keys generate --network testnet --fund and stellar network settings --network testnet against live testnet.

Everything else in the doc (rustc/cargo/stellar/node/pnpm versions, rustup target add wasm32v1-none actually downloading and installing, pnpm install against the new package.json) is real output from commands actually run during this PR, not transcribed from documentation. I'd rather ship this with an honest gap flagged than claim a false full pass — happy to have someone confirm the two flagged steps and I'll fold the real output in, or a maintainer can close that gap directly.

On #14 — the external-link tradeoff

Chose schedule-only, non-blocking for external links (link-check-external, weekly cron + workflow_dispatch), and offline, blocking for internal links/anchors (link-check-internal, every PR). Rate limits and transient 5xx on third-party hosts would fail builds for reasons unrelated to the PR under review; internal link/anchor breakage is squarely this repo's fault and worth blocking on. I ran prettier --write once across the existing docs to get the format-check job to a passing baseline — that diff is purely mechanical (table column alignment, *emphasis*_emphasis_ marker style) and reworded no prose. Actions are pinned to commit SHAs, not tags.

On #8 — the useful part

27 scenarios across all four entry points, each with an explicit Given <caller> authorization precondition, and deposit == withdrawn + refunded + remaining_in_contract asserted on every state-changing scenario. Five cases the current docs don't determine are marked UNDECIDED and collected at the end — most notably whether cancel() is even callable once a stream has reached end, and double-approval of an already-met milestone.

Test plan

  • pnpm run docs:lint — clean across all tracked markdown
  • pnpm run docs:format:check — clean across all tracked markdown
  • lychee.toml validated as well-formed TOML; internal-link job config reviewed by hand for the anchor-checking cases docs/architecture.md and docs/concepts.md cross-reference
  • A maintainer (or CI, once this merges) runs link-check-internal for real against the PR — I didn't have a local lychee binary in this pass to run the deliberate-broken-anchor check the issue asks for; the config is written to catch it (include_fragments = true, offline mode still validates local anchors) but that specific demonstration is unverified here
  • Someone confirms the two testnet/install-timing gaps flagged in docs/dev-setup.md

…s#15, StelFlow-labs#14, StelFlow-labs#8)

Three independent doc/tooling issues bundled onto one branch:

- docs/dev-setup.md: a verified path from empty toolchain to working
  Rust/wasm32v1-none/stellar-cli/Node/pnpm setup, with real command output
  from this machine. Two steps (a from-empty stellar-cli install timing,
  and live testnet identity funding) are explicitly flagged as not run in
  this pass rather than faked. CONTRIBUTING.md now points here instead of
  duplicating the setup steps.

- .github/workflows/docs.yml: markdownlint-cli2 + Prettier + lychee for
  markdown, gated on PRs touching docs. Internal link/anchor checking runs
  offline and blocks the PR; external link checking is schedule-only and
  never fails the build, since third-party outages aren't the PR's fault.
  Actions are pinned to commit SHAs. Ran prettier --write once across the
  existing docs to establish a passing baseline (mechanical formatting only
  — table alignment and emphasis-marker style — no prose was reworded).

- docs/specs/behaviour.md: Given/When/Then scenarios for create_stream,
  withdraw, cancel, and approve_milestone, including the awkward cases
  (double withdrawal in one ledger, indivisible totals, degenerate
  durations, milestone-vs-cancel interaction) with the deposit ==
  withdrawn + refunded + remaining invariant asserted on every
  state-changing scenario. Cases the docs don't decide are marked
  UNDECIDED and listed together at the end.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Godbrand0

Copy link
Copy Markdown
Contributor Author

Splitting this into one PR per issue instead — easier to review and merge independently:

Closing this one in favor of those three.

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

Labels

None yet

Projects

None yet

1 participant