From 3eb2284b7ee41290a55cae2617ef83be17fd6185 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:52:02 +0100 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20issue=20sweep=20=E2=80=94=20dead?= =?UTF-8?q?=20Justfile=20recipes,=20stray=20MAINTAINERS,=20stale=20pointer?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Justfile (+ its contractiles copy, kept byte-identical per the RSR template convention): remove every recipe that targets the deleted `interpreters/` tree or a `package.json` that does not exist (build-affinescript, build-typescript, test-typescript, test-interpreters, run-example/-brainfuck/-whitespace/-malbolge, clean-typescript, clean-affinescript, watch, install, install-npm, install-python), drop npm/nodejs from install-provers-*, and drop the dead "Implementation code" stats line. `lint` and `format` are kept as names but now fail loudly instead of reporting a no-op as success (`npm run lint || true` could never fail). Refs #75. - Remove the stray markdown `MAINTAINERS`, which named a different primary maintainer than the canonical `MAINTAINERS.adoc`; `docs/MAINTAINERS.adoc` is already a pointer. humans.txt now cites the root file. Refs #79. - docs/wiki/README.md: replace the stale "Automation TODO" with a description of the wiki-sync workflow that already exists. Refs #80. - LambdaCNO.v: y_not_cno's triage pointer cited a drifted line number (`LambdaCNO.v:356`, now 399/400); cite the triage row by identifier instead. Refs #166. - self-validating/README.adoc: example `cp` paths named `contractiles/self-validating/`, which does not exist. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WRvDivYwLSeVCJUrfjic3f --- .machine_readable/contractiles/Justfile | 104 ++---------------- .machine_readable/self-validating/README.adoc | 6 +- Justfile | 104 ++---------------- MAINTAINERS | 43 -------- docs/wiki/README.md | 6 +- proofs/coq/lambda/LambdaCNO.v | 4 +- www/.well-known/humans.txt | 2 +- 7 files changed, 25 insertions(+), 244 deletions(-) delete mode 100644 MAINTAINERS diff --git a/.machine_readable/contractiles/Justfile b/.machine_readable/contractiles/Justfile index 18e58c0..83d8504 100644 --- a/.machine_readable/contractiles/Justfile +++ b/.machine_readable/contractiles/Justfile @@ -18,11 +18,6 @@ default: build-all: build-coq build-lean build-agda build-isabelle build-mizar build-idris @echo "✓ All builds complete" -# Build AffineScript interpreters -build-affinescript: - @echo "Building AffineScript interpreters..." - cd interpreters/affinescript && npx affinescript build - # Build Coq proofs — all 14 theories (CNO + OND pillars) via coq_makefile build-coq: @echo "Building Coq proofs (14 theories, both pillars)..." @@ -62,12 +57,6 @@ build-idris: @echo "Building Idris 2 ABI..." idris2 --build absolute-zero-abi.ipkg -# Build TypeScript -build-typescript: - @echo "Building TypeScript..." - npm run build - @echo "✓ TypeScript compiled" - # ============================================================================ # Verification Commands # ============================================================================ @@ -132,47 +121,14 @@ verify-idris: build-idris # ============================================================================ # Run all tests -test-all: test-interpreters test-proofs +test-all: test-proofs @echo "✓ All tests passed" -# Test interpreters -test-interpreters: - @echo "Testing Brainfuck interpreter..." - python3 interpreters/brainfuck/brainfuck.py - @echo "" - @echo "Testing Whitespace interpreter..." - python3 interpreters/whitespace/whitespace.py - # Test proofs test-proofs: @echo "Testing proof verification..." just verify-z3 -# Run TypeScript tests (when available) -test-typescript: - npm test - -# ============================================================================ -# Example Execution -# ============================================================================ - -# Run example CNO -run-example LANG FILE: - @echo "Running {{LANG}} example: {{FILE}}" - @just run-{{LANG}} {{FILE}} - -# Run Brainfuck example -run-brainfuck FILE: - python3 interpreters/brainfuck/brainfuck.py examples/brainfuck/{{FILE}} - -# Run Whitespace example -run-whitespace FILE: - python3 interpreters/whitespace/whitespace.py examples/whitespace/{{FILE}} - -# Run Malbolge example (AffineScript) -run-malbolge FILE: - cd interpreters/affinescript && node -e "require('./malbolgeInterpreter.bs.js').execute('$(cat ../../examples/malbolge/{{FILE}})')" - # ============================================================================ # Documentation # ============================================================================ @@ -200,7 +156,7 @@ wiki-sync: # ============================================================================ # Clean all build artifacts -clean: clean-coq clean-lean clean-typescript clean-affinescript +clean: clean-coq clean-lean @echo "✓ All build artifacts cleaned" # Clean Coq artifacts @@ -217,33 +173,19 @@ clean-lean: @echo "Cleaning Lean artifacts..." cd proofs/lean4 && lake clean -# Clean TypeScript artifacts -clean-typescript: - @echo "Cleaning TypeScript artifacts..." - rm -rf node_modules dist - -# Clean AffineScript artifacts -clean-affinescript: - @echo "Cleaning AffineScript artifacts..." - cd interpreters/affinescript && rm -rf lib - # ============================================================================ # Development # ============================================================================ -# Watch TypeScript for changes -watch: - npm run watch - -# Format code +# Format code — no formatter is configured: the AffineScript/TypeScript tree it +# targeted was removed (#75). Fails loudly rather than reporting a no-op as success. format: - @echo "Formatting code..." - cd interpreters/affinescript && npx affinescript format + @echo "format: no formatter configured for this repository (see #75)" >&2; exit 1 -# Lint code +# Lint code — no linter is configured: `npm run lint || true` targeted a package.json +# that does not exist and could never fail (#75). Fails loudly instead. lint: - @echo "Linting TypeScript..." - npm run lint || true + @echo "lint: no linter configured for this repository (see #75)" >&2; exit 1 # ============================================================================ # CI/CD @@ -257,32 +199,6 @@ ci: build-all test-all verify-all # Installation # ============================================================================ -# Install dependencies -install: install-npm install-python - @echo "✓ Dependencies installed" - -# Install npm dependencies -install-npm: - @echo "Installing npm dependencies..." - npm install - -# Install Python dependencies -install-python: - @echo "Installing Python dependencies..." - pip3 install --user pytest hypothesis - -# Install proof assistants (Fedora) -install-provers-fedora: - @echo "Installing proof assistants (Fedora)..." - sudo dnf install -y coq z3 nodejs opam - npm install -g affinescript@11.1 - -# Install proof assistants (Ubuntu) -install-provers-ubuntu: - @echo "Installing proof assistants (Ubuntu)..." - sudo apt install -y coq z3 nodejs npm - npm install -g affinescript@11.1 - # ============================================================================ # Container (Podman/Docker) # ============================================================================ @@ -327,9 +243,6 @@ stats: @echo "Proof code:" @find proofs -name "*.v" -o -name "*.lean" -o -name "*.agda" -o -name "*.thy" -o -name "*.miz" -o -name "*.smt2" | xargs wc -l | tail -1 @echo "" - @echo "Implementation code:" - @find interpreters ts -name "*.res" -o -name "*.py" -o -name "*.ts" | xargs wc -l | tail -1 - @echo "" @echo "Documentation:" @find docs -name "*.md" | xargs wc -l | tail -1 @echo "" @@ -414,7 +327,6 @@ clean-elm: @echo "Cleaning Elm artifacts..." rm -rf elm/dist elm/elm-stuff - # ============================================================================ # ECHIDNA Integration (Neurosymbolic Proof Assistant) # ============================================================================ diff --git a/.machine_readable/self-validating/README.adoc b/.machine_readable/self-validating/README.adoc index bdd6f0c..a7cfd8f 100644 --- a/.machine_readable/self-validating/README.adoc +++ b/.machine_readable/self-validating/README.adoc @@ -79,13 +79,13 @@ Choose the appropriate security level for your use case: [source,bash] ---- # Kennel: Pure configuration -cp contractiles/self-validating/examples/project-metadata.k9.ncl config/metadata.k9.ncl +cp .machine_readable/self-validating/examples/project-metadata.k9.ncl config/metadata.k9.ncl # Yard: Validated configuration -cp contractiles/self-validating/examples/ci-config.k9.ncl .github/ci.k9.ncl +cp .machine_readable/self-validating/examples/ci-config.k9.ncl .github/ci.k9.ncl # Hunt: Full automation -cp contractiles/self-validating/examples/setup-repo.k9.ncl scripts/setup.k9.ncl +cp .machine_readable/self-validating/examples/setup-repo.k9.ncl scripts/setup.k9.ncl ---- === 2. Validate Components diff --git a/Justfile b/Justfile index 18e58c0..83d8504 100644 --- a/Justfile +++ b/Justfile @@ -18,11 +18,6 @@ default: build-all: build-coq build-lean build-agda build-isabelle build-mizar build-idris @echo "✓ All builds complete" -# Build AffineScript interpreters -build-affinescript: - @echo "Building AffineScript interpreters..." - cd interpreters/affinescript && npx affinescript build - # Build Coq proofs — all 14 theories (CNO + OND pillars) via coq_makefile build-coq: @echo "Building Coq proofs (14 theories, both pillars)..." @@ -62,12 +57,6 @@ build-idris: @echo "Building Idris 2 ABI..." idris2 --build absolute-zero-abi.ipkg -# Build TypeScript -build-typescript: - @echo "Building TypeScript..." - npm run build - @echo "✓ TypeScript compiled" - # ============================================================================ # Verification Commands # ============================================================================ @@ -132,47 +121,14 @@ verify-idris: build-idris # ============================================================================ # Run all tests -test-all: test-interpreters test-proofs +test-all: test-proofs @echo "✓ All tests passed" -# Test interpreters -test-interpreters: - @echo "Testing Brainfuck interpreter..." - python3 interpreters/brainfuck/brainfuck.py - @echo "" - @echo "Testing Whitespace interpreter..." - python3 interpreters/whitespace/whitespace.py - # Test proofs test-proofs: @echo "Testing proof verification..." just verify-z3 -# Run TypeScript tests (when available) -test-typescript: - npm test - -# ============================================================================ -# Example Execution -# ============================================================================ - -# Run example CNO -run-example LANG FILE: - @echo "Running {{LANG}} example: {{FILE}}" - @just run-{{LANG}} {{FILE}} - -# Run Brainfuck example -run-brainfuck FILE: - python3 interpreters/brainfuck/brainfuck.py examples/brainfuck/{{FILE}} - -# Run Whitespace example -run-whitespace FILE: - python3 interpreters/whitespace/whitespace.py examples/whitespace/{{FILE}} - -# Run Malbolge example (AffineScript) -run-malbolge FILE: - cd interpreters/affinescript && node -e "require('./malbolgeInterpreter.bs.js').execute('$(cat ../../examples/malbolge/{{FILE}})')" - # ============================================================================ # Documentation # ============================================================================ @@ -200,7 +156,7 @@ wiki-sync: # ============================================================================ # Clean all build artifacts -clean: clean-coq clean-lean clean-typescript clean-affinescript +clean: clean-coq clean-lean @echo "✓ All build artifacts cleaned" # Clean Coq artifacts @@ -217,33 +173,19 @@ clean-lean: @echo "Cleaning Lean artifacts..." cd proofs/lean4 && lake clean -# Clean TypeScript artifacts -clean-typescript: - @echo "Cleaning TypeScript artifacts..." - rm -rf node_modules dist - -# Clean AffineScript artifacts -clean-affinescript: - @echo "Cleaning AffineScript artifacts..." - cd interpreters/affinescript && rm -rf lib - # ============================================================================ # Development # ============================================================================ -# Watch TypeScript for changes -watch: - npm run watch - -# Format code +# Format code — no formatter is configured: the AffineScript/TypeScript tree it +# targeted was removed (#75). Fails loudly rather than reporting a no-op as success. format: - @echo "Formatting code..." - cd interpreters/affinescript && npx affinescript format + @echo "format: no formatter configured for this repository (see #75)" >&2; exit 1 -# Lint code +# Lint code — no linter is configured: `npm run lint || true` targeted a package.json +# that does not exist and could never fail (#75). Fails loudly instead. lint: - @echo "Linting TypeScript..." - npm run lint || true + @echo "lint: no linter configured for this repository (see #75)" >&2; exit 1 # ============================================================================ # CI/CD @@ -257,32 +199,6 @@ ci: build-all test-all verify-all # Installation # ============================================================================ -# Install dependencies -install: install-npm install-python - @echo "✓ Dependencies installed" - -# Install npm dependencies -install-npm: - @echo "Installing npm dependencies..." - npm install - -# Install Python dependencies -install-python: - @echo "Installing Python dependencies..." - pip3 install --user pytest hypothesis - -# Install proof assistants (Fedora) -install-provers-fedora: - @echo "Installing proof assistants (Fedora)..." - sudo dnf install -y coq z3 nodejs opam - npm install -g affinescript@11.1 - -# Install proof assistants (Ubuntu) -install-provers-ubuntu: - @echo "Installing proof assistants (Ubuntu)..." - sudo apt install -y coq z3 nodejs npm - npm install -g affinescript@11.1 - # ============================================================================ # Container (Podman/Docker) # ============================================================================ @@ -327,9 +243,6 @@ stats: @echo "Proof code:" @find proofs -name "*.v" -o -name "*.lean" -o -name "*.agda" -o -name "*.thy" -o -name "*.miz" -o -name "*.smt2" | xargs wc -l | tail -1 @echo "" - @echo "Implementation code:" - @find interpreters ts -name "*.res" -o -name "*.py" -o -name "*.ts" | xargs wc -l | tail -1 - @echo "" @echo "Documentation:" @find docs -name "*.md" | xargs wc -l | tail -1 @echo "" @@ -414,7 +327,6 @@ clean-elm: @echo "Cleaning Elm artifacts..." rm -rf elm/dist elm/elm-stuff - # ============================================================================ # ECHIDNA Integration (Neurosymbolic Proof Assistant) # ============================================================================ diff --git a/MAINTAINERS b/MAINTAINERS deleted file mode 100644 index 37f6411..0000000 --- a/MAINTAINERS +++ /dev/null @@ -1,43 +0,0 @@ -# Maintainers - -This file lists the current maintainers of this project. - -## Active Maintainers - -| Name | GitHub | Role | Since | -|------|--------|------|-------| -| Metadatastician | @metadatastician | Primary | Project Start | - -## Emeritus Maintainers - -None at this time. - -## Becoming a Maintainer - -To become a maintainer: - -1. Demonstrate consistent, high-quality contributions -2. Show understanding of the project's goals and architecture -3. Be active in code reviews and community discussions -4. Be nominated by an existing maintainer -5. Be approved by consensus of existing maintainers - -## Maintainer Responsibilities - -- Reviewing and merging pull requests -- Managing releases -- Triaging issues -- Enforcing code standards -- Mentoring new contributors -- Participating in decision-making - -## Maintainer Expectations - -- Respond to issues and PRs in a timely manner -- Follow the code of conduct -- Be transparent in decision-making -- Communicate clearly and respectfully - ---- - -*Last updated: 2026-07-18* diff --git a/docs/wiki/README.md b/docs/wiki/README.md index 01614e8..3b0edc3 100644 --- a/docs/wiki/README.md +++ b/docs/wiki/README.md @@ -35,9 +35,9 @@ git commit -m "Sync from absolute-zero/docs/wiki@$(cd ../absolute-zero && git re git push ``` -(Automation TODO: a `Justfile` recipe `just wiki-sync` plus a workflow -that runs the above on every push to main. Tracked in -`RSR_COMPLIANCE.adoc`.) +This is automated: `.github/workflows/wiki-sync.yml` runs `scripts/wiki-sync.sh` +on every push to `main` that touches `docs/wiki/`, and `just wiki-sync` runs the +same script locally. The manual steps above remain the fallback. ## Page index diff --git a/proofs/coq/lambda/LambdaCNO.v b/proofs/coq/lambda/LambdaCNO.v index 9b4d158..8b4d846 100644 --- a/proofs/coq/lambda/LambdaCNO.v +++ b/proofs/coq/lambda/LambdaCNO.v @@ -394,8 +394,8 @@ Definition y_combinator : LambdaTerm := full reduction congruence or a coinductive/step-indexed non-termination argument — genuinely out of scope for a contained fix here, not merely tedious. §(c) NECESSARY AXIOM per - docs/proof-debt.adoc (triage: docs/proof-debt-triage.adoc row - LambdaCNO.v:356). *) + docs/proof-debt.adoc (triage: docs/proof-debt-triage.adoc, LambdaCNO.v table, row + [y_not_cno] — cited by identifier, not line, so it cannot drift). *) (* AXIOM: [CLASS-A] y_not_cno: non-termination of Y combinator under arbitrary beta interleavings. *) Axiom y_not_cno : ~ is_lambda_CNO y_combinator. diff --git a/www/.well-known/humans.txt b/www/.well-known/humans.txt index 10b9489..eb63e31 100644 --- a/www/.well-known/humans.txt +++ b/www/.well-known/humans.txt @@ -7,7 +7,7 @@ Contact: developer @ joshuajewell.dev Site: https://github.com/hyperpolymath/absolute-zero /* THANKS */ -Contributors: see git log + docs/MAINTAINERS.adoc +Contributors: see git log + MAINTAINERS.adoc /* SITE */ Last update: 2026-05-25 From 0331f43c793bd222c77cbe7ccfdc16d9fb148adc Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:56:41 +0100 Subject: [PATCH 2/2] docs(cookbook): drop the recipes this PR removed; regenerate the recipe list JUSTFILE-COOKBOOK.adoc: - remove the build-typescript, test-typescript and watch sections; - correct the build-all, test-all and clean dependency lines; - regenerate the appendix recipe list from `just --list` and the dependency graph from the Justfile; - add a banner naming the nine sections that describe recipes the Justfile has not defined since before this PR. COOKBOOK.adoc: drop the test-typescript and watch-typescript lines. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WRvDivYwLSeVCJUrfjic3f --- docs/COOKBOOK.adoc | 2 - docs/JUSTFILE-COOKBOOK.adoc | 120 +++++++++++------------------------- 2 files changed, 36 insertions(+), 86 deletions(-) diff --git a/docs/COOKBOOK.adoc b/docs/COOKBOOK.adoc index 4d95661..a462373 100644 --- a/docs/COOKBOOK.adoc +++ b/docs/COOKBOOK.adoc @@ -699,7 +699,6 @@ just verify-z3 # Run Z3 # Test just test-all # All tests -just test-typescript # TypeScript tests # Stats just stats # Lines of code @@ -716,7 +715,6 @@ just clean # Build artifacts just clean-all # Everything # Development -just watch-typescript # Watch mode just ci # Full CI pipeline just check-tools # Check dependencies ---- diff --git a/docs/JUSTFILE-COOKBOOK.adoc b/docs/JUSTFILE-COOKBOOK.adoc index 086c601..60d83d6 100644 --- a/docs/JUSTFILE-COOKBOOK.adoc +++ b/docs/JUSTFILE-COOKBOOK.adoc @@ -13,6 +13,8 @@ v1.0, 2025-11-22 This cookbook documents all `just` recipes in the Absolute Zero project. Every recipe is explained with examples, flags, and common usage patterns. +WARNING: `just --list` is authoritative. The Appendix recipe list and dependency graph were regenerated from it on 2026-10-01. Nine per-recipe sections below describe recipes the Justfile no longer defines: `build-z3`, `check-tools`, `clean-all`, `docs-adoc`, `docs-all`, `docs-proof-stats`, `install-help`, `loc` and `quick-check`. Treat them as historical until this cookbook is rewritten. + === Quick Reference [source,bash] @@ -30,7 +32,7 @@ just ci # Run full CI pipeline Build all proof systems and interpreters. -*Dependencies*: build-affinescript, build-coq, build-lean, build-agda, build-isabelle, build-typescript +*Dependencies*: build-coq, build-lean, build-agda, build-isabelle, build-mizar, build-idris [source,bash] ---- @@ -38,12 +40,12 @@ just build-all ---- *What it does*: -1. Builds AffineScript interpreters -2. Compiles Coq proofs -3. Compiles Lean 4 proofs -4. Compiles Agda proofs -5. Builds Isabelle/HOL proofs -6. Compiles TypeScript (deprecated, will be removed) +1. Compiles Coq proofs +2. Compiles Lean 4 proofs +3. Compiles Agda proofs +4. Builds Isabelle/HOL proofs +5. Checks Mizar proofs +6. Builds the Idris2 ABI *Exit codes*: - `0`: All builds successful @@ -139,20 +141,6 @@ just verify-z3 z3 -T:60 proofs/z3/cno_properties.smt2 # 60 second timeout ---- -=== build-typescript - -⚠️ **DEPRECATED**: Will be removed. Use Deno instead. - -[source,bash] ----- -just build-typescript ----- - -*Migration path*: -- Replace with `deno task build` -- Port TypeScript files to Deno -- Remove `ts/` directory - == Verification Recipes === verify-all @@ -252,7 +240,7 @@ just verify-z3 Run all tests (unit, integration, proofs). -*Dependencies*: test-interpreters, test-proofs +*Dependencies*: test-proofs [source,bash] ---- @@ -260,25 +248,7 @@ just test-all ---- *Test suites*: -1. Interpreter tests (Brainfuck, Whitespace, Malbolge) -2. Proof verification tests -3. Example CNO validation - -=== test-typescript - -⚠️ **DEPRECATED**: Use `deno test` instead. - -[source,bash] ----- -just test-typescript ----- - -*Migration*: -[source,bash] ----- -# New approach: -deno test --allow-read tests/ ----- +1. Proof verification tests (`test-proofs`) == Container Recipes @@ -405,7 +375,7 @@ just docs-adoc Clean all build artifacts. -*Dependencies*: clean-coq, clean-lean, clean-typescript, clean-affinescript +*Dependencies*: clean-coq, clean-lean [source,bash] ---- @@ -415,8 +385,6 @@ just clean *What gets deleted*: - Coq: `*.vo`, `*.vok`, `*.vos`, `*.glob` - Lean: `.lake/` directory -- TypeScript: `node_modules/`, `dist/` -- AffineScript: `lib/` === clean-coq @@ -521,19 +489,6 @@ just quick-check || exit 1 == Development Recipes -=== watch - -Watch TypeScript files for changes. - -⚠️ **DEPRECATED**: Use `deno task dev` instead. - -[source,bash] ----- -just watch -# New: -deno task dev ----- - === format Format AffineScript code. @@ -896,57 +851,52 @@ Available recipes: build-agda build-all build-coq + build-elm + build-idris build-isabelle build-lean - build-affinescript - build-typescript - check-tools + build-mizar ci clean - clean-all clean-coq + clean-elm clean-lean - clean-affinescript - clean-typescript container-build container-shell container-test-all container-verify default - docs-adoc - docs-all - docs-proof-stats docker-build docker-verify + docs + echidna-check + echidna-complete FILE + echidna-list + echidna-repl + echidna-suggest FILE + echidna-verify format help - install-help - install-npm - install-provers-fedora - install-provers-ubuntu - install-python lint - loc paper proof-status - quick-check - run-brainfuck FILE - run-example LANG FILE - run-malbolge FILE - run-whitespace FILE + run-elm stats test-all - test-interpreters test-proofs - test-typescript + verify verify-agda verify-all verify-coq + verify-gate-selftest + verify-idris verify-isabelle verify-lean + verify-lean-core + verify-mizar verify-z3 view-docs - watch + wiki-sync ---- === Recipe Dependencies Graph @@ -955,21 +905,23 @@ Available recipes: ---- ci ├── build-all -│ ├── build-affinescript │ ├── build-coq │ ├── build-lean │ ├── build-agda │ ├── build-isabelle -│ └── build-typescript +│ ├── build-mizar +│ └── build-idris ├── test-all -│ ├── test-interpreters │ └── test-proofs └── verify-all ├── verify-coq (depends on build-coq) ├── verify-z3 ├── verify-lean ├── verify-agda (depends on build-agda) - └── verify-isabelle (depends on build-isabelle) + ├── verify-isabelle (depends on build-isabelle) + ├── verify-mizar (depends on build-mizar) + ├── verify-idris (depends on build-idris) + └── verify-gate-selftest ---- ---