Skip to content

docs: rewrite README in plain English; add architecture and getting-started docs - #56

Open
hseshadr wants to merge 9 commits into
mainfrom
docs/readme-plain-english
Open

hseshadr wants to merge 9 commits into
mainfrom
docs/readme-plain-english

Conversation

@hseshadr

@hseshadr hseshadr commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Light pass on the README, as agreed: the voice and every existing section stay as they are. Three additions:

  1. A Technical docs: line under the intro.
  2. A ## More detail section (just above License) that links every technical doc, one plain line each.
  3. A new docs/GETTING_STARTED.md for developers, linked from the Technical docs line, from ## Contributing / development, and from More detail.

Claim touched: "the README is a true map of the repo's docs." No product behaviour changes.

README first 15 lines, before

# AlmaMesh

Your Vedic (traditional Indian) astrology chart, free and computed in your own browser — no account, no data harvesting.

[![CI](https://github.com/hseshadr/almamesh/actions/workflows/dagger.yml/badge.svg)](https://github.com/hseshadr/almamesh/actions/workflows/dagger.yml)
[![Version](https://img.shields.io/github/v/tag/hseshadr/almamesh?label=version)](CHANGELOG.md)
[![License: MIT](https://img.shields.io/github/license/hseshadr/almamesh)](LICENSE)

**[Live demo](https://almamesh.com)** · [Docs](docs/README.md) · [Quickstart](docs/QUICKSTART.md)

![AlmaMesh home screen: "Your real sky. Computed on your device. Free, forever." with a "Generate my chart — free" button](docs/assets/landing.png)
<sub>Real output of the example below — the home screen `make demo` opens at http://localhost:4173 (the same app runs at almamesh.com).</sub>

## At a glance

README first 15 lines, after

# AlmaMesh

Your Vedic (traditional Indian) astrology chart, free and computed in your own browser — no account, no data harvesting.

[![CI](https://github.com/hseshadr/almamesh/actions/workflows/dagger.yml/badge.svg)](https://github.com/hseshadr/almamesh/actions/workflows/dagger.yml)
[![Version](https://img.shields.io/github/v/tag/hseshadr/almamesh?label=version)](CHANGELOG.md)
[![License: MIT](https://img.shields.io/github/license/hseshadr/almamesh)](LICENSE)

**[Live demo](https://almamesh.com)** · [Docs](docs/README.md) · [Quickstart](docs/QUICKSTART.md)

**Technical docs:** [Architecture](docs/ARCHITECTURE.md) · [Getting started for developers](docs/GETTING_STARTED.md) · [In-browser engine](docs/edgeproc-browser.md) · [Security policy](SECURITY.md)

![AlmaMesh home screen: "Your real sky. Computed on your device. Free, forever." with a "Generate my chart — free" button](docs/assets/landing.png)
<sub>Real output of the example below — the home screen `make demo` opens at http://localhost:4173 (the same app runs at almamesh.com).</sub>

Docs now linked from ## More detail

docs/README.md, docs/QUICKSTART.md, docs/GETTING_STARTED.md (new), docs/ARCHITECTURE.md, docs/architecture/ (interactive map), docs/tech-stack.md, docs/edgeproc-browser.md, docs/code-guidelines.md, docs/dependency-policy.md, docs/CLEVERNESS-DEBT.md, docs/rigor-upgrade-spec.md, docs/feedback-setup.md, docs/deploy/almamesh-com.md, docs/deploy/GO-LIVE-almamesh-com.md, docs/releases/ (v0.4.0, v0.3.0), docs/specs/, docs/design/, docs/superpowers/, backend/docs/predictive-engine-plan.md, frontend/README.md, CHANGELOG.md, CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, THIRD_PARTY_NOTICES.md.

Spec archives (docs/specs, docs/design, docs/superpowers) are linked as folders, not file by file, to keep the list readable.

Test changes (red first)

backend/tests/test_readme_contract.py, 4 new tests, no existing test changed or removed:

  • test_technical_docs_line_sits_in_the_intro: the line exists before "At a glance", starts with Architecture, includes GETTING_STARTED, 3–5 links.
  • test_developer_section_links_getting_started: ## Contributing / development links it and the file exists.
  • test_more_detail_links_every_technical_doc: every top-level docs/*.md, every docs/ subfolder (except assets), and the root docs are linked from More detail. A new doc added later without a README line turns this red.
  • test_more_detail_comes_right_before_the_license.

Red on the old README (4 failed, 8 passed):

E       StopIteration                                   # no Technical docs line
E       AssertionError: assert 'docs/GETTING_STARTED.md' in ['CONTRIBUTING.md']
E       ValueError: substring not found                 # no ## More detail (x2)

Green after: 12 passed. Mutation check: deleting the docs/dependency-policy.md line from More detail gives AssertionError: assert ['docs/dependency-policy.md'] == [].

dagger/src/index.ts: adds CODE_OF_CONDUCT.md and THIRD_PARTY_NOTICES.md to the backend test container's file list, so the existing "every relative link resolves" test can find them in CI.

Local check

What Result
make gate (backend + frontend, same as CI) exit 0, 137 s. Backend 991 passed, coverage 98.37%. Frontend: browser 61, store 465, llm 423, web 1769 passed; build OK
bun test tests/ (Dagger contract tests) 101 pass, 2 fail. The same 2 fail on a clean origin/main locally (120 s / 180 s timeouts in tests that run Dagger itself), so not from this change
Live site https://almamesh.com 200 text/html
GETTING_STARTED commands all run from this fresh clone: uv sync --extra dev, bun install (10 s), make assets (27 s), make build (87 s), preview served the AlmaMesh page, almamesh-chart output, single-file pytest with --no-cov (13 passed), the locale parity red/green walkthrough

Two traps the doc records because I hit them on the fresh clone: make gate without uv sync --extra dev first fails mypy (it picks up a global mypy), and on Node 26 one run hit a stray GSAP requestAnimationFrame error after all 1769 web tests passed (it did not happen on the rerun).

merge-tree vs open PRs

git merge-tree --write-tree origin/<head> HEAD: clean (exit 0, no conflicts) against #165, #166, #167, #168, #169, #170. None of them touch README.md or docs/. This PR can merge before or after any of them. Suggested order: #165 → #170 → #168 → #166 → #167 → #169 (the stack), with this PR at any point.

Proposed GitHub About line (not changed)

Your Vedic (traditional Indian) astrology chart, free and computed in your own browser. No account, no data harvesting.

🤖 Generated with Claude Code

https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a

hseshadr and others added 9 commits September 25, 2026 08:17
Consumers pin central Dagger modules at exact SHAs, and fleet policy
checked that each pin was well-formed but not that it was new enough.
Repos could stay pinned below a mandatory fix (dd19871, #46)
without anyone noticing, which blocked the aml-filter release.

REQUIRED_MINIMUM in fleet_policy.py holds a reviewed floor per central
module, starting with portfolio-foundation -> dd19871. The GitHub reader
compares every floored module revision in a consumer's resolved Dagger
graph against the floor (compare/<floor>...<pin>) and against central
main (compare/<pin>...main). Both must be ahead or identical. Otherwise,
including when there is no common history or the evidence is missing,
the scan reports pin-below-required-minimum and fails.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
The fleet scan only checked repositories listed by hand in
repository_expectations. agentic-saga and agentic-context-service pin
hseshadr/ci modules but were never listed, so no fleet rule ran on them.

- Add both to repository_expectations with the full consumer contract
  (sole Dagger check, conversation resolution, no rollout exception;
  both already declare shared foundation).
- New fleet_coverage module: list every public hseshadr repository, read
  its default-branch dagger.json, and report uncovered-consumer for any
  active repository that pins a github.com/hseshadr/ci module but is
  missing from the list. Listing or config read errors fail closed.
- scan_repository now turns FleetAccessError into an evidence-unreadable
  finding, so one unreadable repository (agentic-context-service has no
  branch protection on main) no longer hides every later result.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
…ger args

Publisher lineage moves out of consumer `run:` steps into two
portfolio-foundation functions. release-lineage and release-provenance fail
unless GitHub's run records show a successful release-candidate.yml dispatch
for exactly the expected SHA, run by this repository's in-progress main
publish.yml, with main containing both commits. That blocks a dispatch on a
tag named `main` from publishing its own bytes. release-provenance also
returns npm's provenance context, built from the publish run record.

The fleet policy accepts that exact leading step (publisher-lineage for
anything weaker) and a consumer publisher loaded at `@${{ github.sha }}`, so
edgeproc-core and privacy-core can publish with no shell step and no
exemption. It also reports dagger-args-expression for `${{ inputs.* }}`,
`${{ github.event.* }}` or `${{ github.head_ref }}` in any dagger-for-github
input the action pastes into bash.

Fixtures that pasted the workflow_run head SHA into args as compliant now
pass it through env; the policy reports the old shape.

Fixes #49

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
Split evidence construction and the repository part of the provenance context
into named helpers (python-quality function-length rule). The provenance JSON
keys are now emitted sorted. Behavior is unchanged; lineage.py stays at 100%
line and branch coverage.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
ci#50 accepted the module-owned lineage step but did not require it, so a
publisher without it (edge-proc, assay) still passed. Every publisher job
must now open with the exact release-lineage / release-provenance call;
its absence, or placing it after the candidate download, is a
`publisher-lineage` finding.

The fleet_policy bridge fixtures and the docs' Python publisher example
asserted lineage-less publishers as compliant; both now carry the step.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
…tarted docs

The README now says what the repo is (shared Dagger modules and a daily
cross-repo check for Harish's own repos), shows how a real consumer pins a
module, and pastes real output from running one. Technical detail moved to
docs/ARCHITECTURE.md; docs/GETTING_STARTED.md walks a new developer from a
fresh clone to a first change, with measured times.

A new README contract test pins the first line, section order, module names,
links to every doc, and a banned-jargon check.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
Brings in #47 -> #48 -> #50 -> #52 so this PR merges last without
conflicts. Their README lines move to the new layout: the consumer list
(now with agentic-context-service and agentic-saga), the uncovered-consumer
failure and the required-minimum pin floor go to docs/ARCHITECTURE.md
"What dagger call fleet checks", with plain one-line versions in the README
intro. Publisher lineage and the dagger-args-expression rule are noted there too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
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.

1 participant