Skip to content

fix(examples): 旗艦 e2e chain の README が凍結 Python (.venv/bin/python -m fslc) を権威として教え、逐語 assert がそれを固定している #999

Description

@rizumita

Problem

examples/e2e/README.md teaches the reader to invoke the frozen Python compatibility reference as if it were the product, and a required-tier test pins those exact strings so the wording cannot drift back on its own.

examples/e2e/README.md:32  ./.venv/bin/python -m fslc verify examples/e2e/1_business.fsl --engine induction --deadlock ignore
examples/e2e/README.md:35  ./.venv/bin/python -m fslc verify examples/e2e/2_requirements.fsl --deadlock ignore
examples/e2e/README.md:38  ./.venv/bin/python -m fslc verify examples/e2e/2_requirements.fsl --engine induction --deadlock ignore
examples/e2e/README.md:41  ./.venv/bin/python -m fslc scenarios examples/e2e/2_requirements.fsl --deadlock ignore
examples/e2e/README.md:44  ./.venv/bin/python -m fslc verify examples/e2e/3_design.fsl --engine induction --deadlock ignore

tests/test_e2e_example.py:78-82 asserts those five command strings verbatim.

Why this is a defect

AGENTS.md ("Project and authority") states:

The native Rust workspace under rust/ is the authoritative implementation and distribution surface. The Python package under src/fslc/ is a frozen compatibility reference; do not add product behavior there unless a compatibility change explicitly requires it.

and the generated CLI reference page already says the frozen reference "mirrors a subset for parity tests only — it is not the distribution surface".

So the flagship end-to-end walkthrough — the most likely first thing a new reader runs — documents the non-distribution surface as the way to use FSL. docs/intro/business-layer.{en,ja}.html already prints the same chain as native:

$ fslc verify examples/e2e/1_business.fsl --engine induction
$ fslc verify examples/e2e/2_requirements.fsl --engine induction
$ fslc refine examples/e2e/3_design.fsl examples/e2e/2_requirements.fsl examples/e2e/3_refines_2.fsl --depth 8

The site and the example README now disagree about which binary is authoritative for the same chain.

This is an authority defect, not a spec-weakening one, which is why it is filed separately from #979.

Coupling — the two issues collide in one file

#979 wants the --deadlock ignore flag re-measured and likely removed from these same five lines. This issue wants the invocation moved to native fslc. Both edit examples/e2e/README.md:32-44 and both force tests/test_e2e_example.py:78-82 to move. Doing them in separate passes means rewriting the same five lines and the same test block twice.

Whoever takes either issue should check the other first; they may be cheaper as one change. They are filed separately because the classes differ (suppression-flag teaching vs. authority surface) and because either could be accepted without the other.

Scope question for the assignee

tests/test_e2e_example.py is a Python-driven test whose purpose is partly to exercise the frozen reference. Two readings:

  1. The README should show native fslc and the test should assert the native commands (the test's parity role moves elsewhere, e.g. an existing rust/fslc/tests/ contract).
  2. The test legitimately pins Python invocations for parity, and the README is the only thing that should change — the test then stops being a verbatim mirror of the README.

Reading 2 is smaller but leaves the test asserting strings that no document shows. This needs a decision before implementation; do not pick silently.

Note also that .venv/bin/python embeds an assumption about a developer's local virtualenv layout that the repository does not otherwise require.

Why this is filed rather than fixed

Found while integrating origin/main into site/first-correctness-chain. That branch's surface is docs/intro/; examples/ and tests/ are a different surface, its diff is already 3497 lines, and the scope question above is not the integrating task's call to make.

Acceptance

  • examples/e2e/README.md presents the flagship chain on the authoritative native surface, matching what docs/intro/business-layer.{en,ja}.html prints
  • The scope question above is answered explicitly in the PR, not decided by omission
  • tests/test_e2e_example.py and the README do not disagree about which commands are canonical
  • Every command shown is executed and its produced result recorded, not carried over from the old text

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    ai-discoveredIssues created from scoped follow-up discoverybugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions