Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 8 additions & 7 deletions .github/workflows/update-directory.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: update-directory

# Keeps the generated surfaces current: the directory in README.md, MAP.md, and the research-watch
# INDEX.md. On a pull request from this repo, it regenerates all three and commits the result back to
# Keeps the generated surfaces current: the directory in README.md, MAP.md, catalog.json, and the
# research-watch INDEX.md. On a pull request from this repo, it regenerates them and commits the result back to
# the PR branch, so a contributor who adds an experiment does not have to remember to run the
# generators. The `directory-current`, `map-current`, and `research-index-current` checks in
# generators. The `directory-current`, `map-current`, `catalog-current`, and `research-index-current` checks in
# ci/reproduce.json are the safety net: on fork PRs (where this job cannot push) a stale file fails CI,
# and the contributor runs the generator themselves.

Expand Down Expand Up @@ -34,21 +34,22 @@ jobs:
python-version: "3.12"

# The generators use only the standard library, so no dependency install is needed.
- name: Regenerate the directory, the map, and the research index
- name: Regenerate the directory, the map, the catalog, and the research index
run: |
python tools/build_index.py
python tools/build_map.py
python tools/build_catalog.py
python org_frontier/research/build_research_index.py
python org_frontier/research/build_cards_index.py

- name: Commit if any generated surface changed
run: |
if git diff --quiet -- README.md MAP.md org_frontier/research/INDEX.md org_frontier/research/*/literature/REFERENCES.md; then
if git diff --quiet -- README.md MAP.md catalog.json org_frontier/research/INDEX.md org_frontier/research/*/literature/REFERENCES.md; then
echo "Directory, map, research index, and reference-card indexes already current."
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add README.md MAP.md org_frontier/research/INDEX.md org_frontier/research/*/literature/REFERENCES.md
git commit -m "docs: regenerate README directory, MAP, research index, and reference-card indexes [skip ci]"
git add README.md MAP.md catalog.json org_frontier/research/INDEX.md org_frontier/research/*/literature/REFERENCES.md
git commit -m "docs: regenerate README directory, MAP, catalog, research index, and reference-card indexes [skip ci]"
git push origin HEAD:${{ github.head_ref }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ spaces/

# APA Summit 2027 phygital calls: the editors' PDFs, page copies and extracted text stay local
submissions/phygital_*/cfp/source/
submissions/exetasis_sovereignty/cfp/source/

# Calls-for-papers raw pages for every submission arm (public repo; refetchable)
submissions/*/cfp/source/
38 changes: 27 additions & 11 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ points back here for the shared rules.
2. **[`MAP.md`](MAP.md)** — the one-screen index: instrument, computational lab, empirical arms,
submissions, machinery, live counts. Generated, always current.
3. **[`OVERVIEW.md`](OVERVIEW.md)** — what the lab argues and where it actually stands. Then this file
for the operating rules.
for the operating rules. **[`OPEN_QUESTIONS.md`](OPEN_QUESTIONS.md)** is the registry of open threads,
and `python tools/build_catalog.py --find "<keywords>"` places a question against everything already
asked.

The repository is large (hundreds of directories and dozens of READMEs). `MAP.md` and the generated directory in
`README.md` are the cheap ways in. Reach for a README in the specific subtree only once the map has
Expand Down Expand Up @@ -56,12 +58,16 @@ pip install -r requirements.txt # pulls PyPhi + phyid from git: n
```

Run everything from the repo root so `org_frontier.*` and `foundations.*` resolve. Confirm the instrument
before trusting any result — the control probes assert that a known form reproduces its known verdict:
before trusting any result — the controls assert that a known form reproduces its known verdict:

```bash
python ci/reproduce.py # re-derive every registered number; the instrument control is core
python -m org_frontier.classifier.validate # must print "Instrument validated" (about two seconds)
python ci/reproduce.py instrument-controls # the same gate as CI runs it
```

`python ci/reproduce.py` with no arguments is the full manifest (hundreds of checks, some of them
minutes each); that is the nightly job, not the confirm step.

For large cheap-feature panels, the lab-default **margin cascade** screens with a Probe-131 RF and
calls exact Φ only on the top **B=10%** most uncertain forms (OOF `|p−0.5|`, recomputed per panel):

Expand All @@ -76,14 +82,15 @@ See [`org_frontier/cascade/README.md`](org_frontier/cascade/README.md). Do not f

## Verify before you land

Three generators keep the navigable surface current, each with a `--check` that CI gates. Run the ones
your change touched, then confirm all three are clean:
Four generators keep the navigable surface current, each with a `--check` that CI gates. Run the ones
your change touched, then confirm all four are clean:

```bash
python tools/build_index.py --check # the README directory
python tools/build_map.py --check # MAP.md
python tools/build_catalog.py --check # catalog.json, the searchable index
python org_frontier/research/build_research_index.py --check # the research watch index
python ci/reproduce.py # every number reproduces from its script
python ci/reproduce.py <check-name> … # the numbers your change registered
```

If a `--check` reports stale, run the same command without `--check` to regenerate, then commit the
Expand All @@ -99,7 +106,8 @@ shortest version:
| Adding… | Lands under | Start from |
|---|---|---|
| a probe | `org_frontier/probes/probe_<slug>.py` | the global numbering in `org_frontier/probes/PROBES.md` |
| a full question | `org_frontier/questions/q<NN>_<slug>/` | `org_frontier/protocol/template/` or the pipeline |
| a full question | `org_frontier/questions/q<NN>_<slug>/` | `python tools/build_catalog.py --find …`, then `python -m org_frontier.protocol.new_question` |
| an open thread | wherever its row in `OPEN_QUESTIONS.md` points | set the row to `claimed` in the same PR |
| a qualitative study | `org_frontier/qualitative/<slug>/` | `org_frontier/qualitative/template/` |
| a recurrence experiment | `org_frontier/recurrence/` | `crqa.py` and the existing Φ harnesses |
| a survey study | `org_frontier/survey/<study>/` | the arm and its first study in `org_frontier/survey/README.md` |
Expand All @@ -122,16 +130,24 @@ gh pr create --base contrib --title "…" --body "…"
# CI green → merge into contrib → open the contrib→main promotion PR → merge → delete the branch
```

From a fork, `origin` is the fork: add this repository as `upstream`, branch off `upstream/contrib`,
and open the PR with `--repo rogerSuperBuilderAlpha/algorithmacy-lab` (the recipe is in
[`GETTING_STARTED.md`](GETTING_STARTED.md#8-open-a-pull-request)). The `update-directory` job cannot push
to a fork, so regenerate the indexes locally before pushing.

## Definition of done — the gate before opening a PR

- The instrument was validated on a known control before any comparison.
- Numbers come from a committed script and are registered in `ci/reproduce.json`; `python ci/reproduce.py`
passes locally.
- All three index `--check`s are clean (`build_index.py`, `build_map.py`, `build_research_index.py`).
- Hypotheses were fixed before computing, and nulls and refutations are reported as results.
- All four index `--check`s are clean (`build_index.py`, `build_map.py`, `build_catalog.py`,
`build_research_index.py`).
- Hypotheses were fixed before computing (`python ci/precommit_audit.py origin/contrib..HEAD` shows the
order), and nulls and refutations are reported as results.
- Every result states the validation gap: it is evidence about the model, not about a real organization.
- Prose follows the house style in [`CLAUDE.md`](CLAUDE.md) — no first person, plain declarative
sentences, and the de-slop self-check passed.
- Prose follows the house style in [`CLAUDE.md`](CLAUDE.md), its current rules: claim-first paragraphs,
named agents in active voice, first person only for authorial labor, no emphasis-marker openers, and
the flow self-check passed.
- Citations resolve to real DOIs / arXiv IDs / stable URLs; nothing is fabricated to fill a gap.
- The git target was confirmed with `git rev-parse --show-toplevel` before committing.

Expand Down
18 changes: 11 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,11 @@ input to a verdict.
strict numeric order, so there is no scaffolder for a plain probe number — take the next free one as the
current maximum plus one:
`grep -oE '^\| [0-9]+' org_frontier/probes/PROBES.md | grep -oE '[0-9]+' | sort -n | tail -1`.
- A full question goes through the pipeline and lands under `org_frontier/questions/q<NN>_<slug>/`. Copy
[`org_frontier/protocol/template/`](org_frontier/protocol/template/), or run the orchestration.
- A full question goes through the pipeline and lands under `org_frontier/questions/q<NN>_<slug>/`. Place
it first with `python tools/build_catalog.py --find "<keywords>"` (the nearest prior questions, probes,
and studies), then scaffold it with `python -m org_frontier.protocol.new_question --slug <slug>`, which
copies [`org_frontier/protocol/template/`](org_frontier/protocol/template/) and names the probe stub.
Open threads waiting for someone are in [`OPEN_QUESTIONS.md`](OPEN_QUESTIONS.md).
- Reuse the shared infrastructure rather than rebuilding it: `org_frontier/classifier/`,
`org_frontier/probes/lib.py`, `org_frontier/probes/_info.py`, `foundations/proxy_audit/exact_phi.py`.

Expand Down Expand Up @@ -114,15 +117,16 @@ and leaves it to the nightly job.
A contribution that registers no number — a qualitative or survey study — still triggers the `core`
instrument control on the per-PR gate, and that control needs a working PyPhi environment (Python 3.10+).
CI runs it for you on every PR, so a contributor without a compute environment verifies locally with the
three index `--check`s (`build_index.py`, `build_map.py`, `build_research_index.py`) and lets CI run the
control. The study stands on `directory-current`: once `python tools/build_index.py` indexes it, the gate
four index `--check`s (`build_index.py`, `build_map.py`, `build_catalog.py`, `build_research_index.py`)
and lets CI run the control. The study stands on `directory-current`: once `python tools/build_index.py` indexes it, the gate
confirms it is listed.

## Prose

All prose follows the house style in [`CLAUDE.md`](CLAUDE.md): no first person, plain declarative
sentences, section titles as short noun phrases, and a de-slop pass (cut the antithesis machine,
self-narration of rigor, and metronomic openers). Citations resolve to real sources.
All prose follows the house style in [`CLAUDE.md`](CLAUDE.md), its current rules: claim-first paragraphs,
named agents in active voice, first person only for authorial labor (I searched, I coded), no sentence
commenting on the paper's own rigor, no emphasis-marker openers, section titles as short noun phrases, and
the flow self-check run on each paragraph. Citations resolve to real sources.

## Git and the two repositories

Expand Down
55 changes: 42 additions & 13 deletions GETTING_STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,13 @@ every probe you write repeats it.
## 3. Run an existing experiment

```bash
python -m org_frontier.probes.probe_conjunctive_law
python -m org_frontier.probes.probe_control # Probe 7, about two seconds
```

A "probe" is one script that tests one hypothesis with exact Φ and prints a verdict. The log of
A "probe" is one script that tests one hypothesis with exact Φ and prints a verdict. Probe 7 tests the
thesis's own clause: a mediator that follows one party alone reads dyadic, mutual veto and either-forces
read triadic. Exact Φ grows fast with node count, so check a probe's FINDINGS or docstring for its
runtime before running it; `probe_conjunctive_law` goes to seven nodes and takes about nine minutes. The log of
every probe run is `org_frontier/probes/PROBES.md`; the worked end-to-end question is
`org_frontier/questions/q43_thompson_interdependence/`. Read one of each before writing your own.

Expand All @@ -75,20 +78,37 @@ The shared API lives in `org_frontier/classifier/classifier.py` (`classify_rules
`max_phi_float`), and `foundations/proxy_audit/exact_phi.py` (`exact_big_phi`, `reachable_states`).
Exact Φ is feasible up to roughly 10–12 nodes; keep forms small.

## 5. Scaffold a new question
## 5. Place your question, then scaffold it

The lab has asked many questions already, and the protocol's first stage is to place a new one against
them. Search the generated catalog with your question's keywords:

```bash
python tools/build_catalog.py --find "majority quorum mediator"
```

It prints the nearest prior questions, probes, studies, and open threads, each with its one-line
finding and reproduce command. If a row answers your question, cite it and stress it instead of
re-asking. If a row answers a neighbor, your study is the residual. If nothing is close, scaffold it.
If you have no question of your own yet, [`OPEN_QUESTIONS.md`](OPEN_QUESTIONS.md) lists what is
waiting for someone, with what each thread needs and its first command; set a row to `claimed` in the
pull request that takes it.

```bash
python -m org_frontier.protocol.new_question --slug your_slug \
--question "Your one-line research question"
```

This copies `org_frontier/protocol/template/` to `org_frontier/questions/q<NN>_<slug>/`, fills in
the next free question number and probe number, and prints the next steps. Read
This copies `org_frontier/protocol/template/` to `org_frontier/questions/q<NN>_<slug>/`, names the
probe stub `probe_<slug>.py`, creates `results/` and `literature/`, fills in the next free question
number and probe number, and prints the next steps. Read
`org_frontier/protocol/RESEARCH_PROTOCOL.md` for what each artifact (`review.md`, `hypotheses.md`,
`methods.md`, the `probe_*.py` scripts, `FINDINGS.md`, `paper.md`) must contain.

The one rule that makes the record credible: **commit `hypotheses.md` before you compute the
results.** The git history is the evidence that the claims were fixed first.
results.** The git history is the evidence that the claims were fixed first;
`python ci/precommit_audit.py origin/contrib..HEAD` reports the order for every question directory
your branch touches.

For qualitative research — reading a real coordination setting against the priors through interviews,
observation, or document work — start instead from
Expand Down Expand Up @@ -131,31 +151,40 @@ python ci/reproduce.py your-check-name # one check
python ci/reproduce.py # the full manifest
```

## 7. Refresh the README directory
## 7. Refresh the generated indexes

The README carries a generated directory of every question, study, essay, and review
(`tools/build_index.py`). Regenerate it so your work shows up:
(`tools/build_index.py`), and `catalog.json` is the searchable index the placement step reads.
Regenerate both so your work shows up:

```bash
python tools/build_index.py
python tools/build_catalog.py
```

A pull request from this repo regenerates it automatically; the `directory-current` CI check
fails if it is stale, so run it before pushing (it commits a one-line change to README.md).
A pull request from this repo regenerates them automatically; a pull request from a fork cannot, and
the `directory-current` and `catalog-current` CI checks fail if either is stale, so run both before
pushing.

## 8. Open a pull request

Work lands through `contrib`, never `main` directly. Read `REPO_LAYOUT.md` first if you have not —
this tree nests a second, private git repo under `dissertation/`, and the directory you run git
from decides which repo you touch.

Working from a fork, add this repository as `upstream` once, then branch off its `contrib`:

```bash
git checkout contrib && git pull
git checkout -b study/your-slug
gh repo fork rogerSuperBuilderAlpha/algorithmacy-lab --clone # or fork on GitHub and clone yours
cd algorithmacy-lab # --clone already adds `upstream`; a hand-made clone needs `git remote add upstream https://github.com/rogerSuperBuilderAlpha/algorithmacy-lab.git`
git fetch upstream contrib
git checkout -b study/your-slug upstream/contrib
git add <your files> && git commit -m "..." # hypotheses committed before results
git push -u origin study/your-slug
gh pr create --base contrib
gh pr create --repo rogerSuperBuilderAlpha/algorithmacy-lab --base contrib
```

With write access to this repository, `origin` is `upstream` and the first two lines are not needed.

`PUBLISHING.md` describes the four-pass review your PR will get (reproduction, pre-commitment
audit, argument, prose) and `CONTRIBUTING.md` covers house style.
3 changes: 3 additions & 0 deletions MAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Start here. The full directory lives in [`README.md`](README.md); the operating
| [`AGENTS.md`](AGENTS.md) | Operating manual for agents: map, run/verify, git rule, land flow, done-checklist |
| [`README.md`](README.md) | What the lab is, the thesis, setup, and the full generated directory |
| [`OVERVIEW.md`](OVERVIEW.md) | Five-minute orientation: the argument, where it stands, where to contribute |
| [`OPEN_QUESTIONS.md`](OPEN_QUESTIONS.md) | The open threads with a status column: what is waiting for someone, and what each needs |
| [`GETTING_STARTED.md`](GETTING_STARTED.md) | Hands-on: environment → confirm the instrument → scaffold → register → PR |
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Code, probe, study, and house-style conventions a submission must meet |
| [`REPO_LAYOUT.md`](REPO_LAYOUT.md) | The two-repo git trap: this repo vs the nested private dissertation |
Expand Down Expand Up @@ -87,6 +88,7 @@ Run the relevant generator after adding content, then verify with its `--check`.
|---|---|---|
| [`tools/build_index.py`](tools/build_index.py) | `python tools/build_index.py` | the generated directory in README.md |
| [`tools/build_map.py`](tools/build_map.py) | `python tools/build_map.py` | this file, MAP.md |
| [`tools/build_catalog.py`](tools/build_catalog.py) | `python tools/build_catalog.py` | catalog.json — the searchable index of questions, probes, studies, and open threads (`--find`) |
| [`org_frontier/research/build_research_index.py`](org_frontier/research/build_research_index.py) | `python org_frontier/research/build_research_index.py` | the research watch INDEX.md |
| [`ci/reproduce.py`](ci/reproduce.py) | `python ci/reproduce.py` | every registered number in ci/reproduce.json |

Expand All @@ -101,3 +103,4 @@ Run the relevant generator after adding content, then verify with its `--check`.
| 9 | foundations experiments | `foundations/*/` with a `FINDINGS.md` |
| 10 | literature reviews | `org_frontier/reviews/*/` with a `FINDINGS.md` |
| 773 | watch entries (program-level) | `org_frontier/research/*/literature/references.bib` |
| 15 | open threads | `OPEN_QUESTIONS.md` rows with status `open` |
Loading
Loading