docs: keep project status and links current

This commit is contained in:
Codex 2026-10-21 09:57:05 +02:00
parent a10d04d75d
commit ffbff9805c
7 changed files with 55 additions and 16 deletions

View file

@ -65,7 +65,8 @@ We do not need to begin with a blank-sheet LightBurn clone:
The leading route is therefore either to use and improve MeerK40t directly or
to build a Rayforge JCZ/Balor addon using the narrowest practical layer from
BalorMK. This remains a proposed decision until the offline proofs in
BalorMK. This remains a proposed decision until the packaged interaction and
real-project gates in
[ADR 0002](docs/adr/0002-reuse-rayforge-and-balormk.md) have passed.
## Next steps

View file

@ -7,8 +7,8 @@
## Verified checkpoint
The public repository currently passes 83 unit tests and the public-repository
guard. The offline Rayforge/MeerK40t evidence covers addon lifecycle, MOPA
The complete public unit-test suite and public-repository guard pass at this
checkpoint. The offline Rayforge/MeerK40t evidence covers addon lifecycle, MOPA
settings and units, layer and recipe semantics, JCZ record/list encoding,
negative cases, cancellation/recovery and synthetic LightBurn imports.

View file

@ -59,6 +59,8 @@ production adapter must not infer the unit from a driver-specific comment.
Spike C passes at the semantic boundary. The result supports a Rayforge JCZ
addon architecture. A follow-up spike now covers transport-free 12-byte
command records, but ADR 0002 remains proposed until complete list behavior,
addon packaging in a complete Windows build, and the remaining stock
MeerK40t workflow assessment are addressed.
command records. At this checkpoint, list behavior, full Windows packaging and
the remaining stock MeerK40t workflow assessment were still open. Later
offline progress is summarized by the
[M1 no-device acceptance checkpoint](m1-no-device-acceptance.md); ADR 0002
remains proposed because its external gates are still open.

View file

@ -49,6 +49,8 @@ operations continue to fail closed.
The result advances the Rayforge addon route beyond semantic JSON traces: the
same operation model can produce deterministic controller-shaped records at a
narrow encoder boundary. ADR 0002 remains proposed because stock application
workflow coverage, complete packet/list behavior, packaging in a full Windows
build and the remaining safety proof obligations are still open.
narrow encoder boundary. At this checkpoint, stock application workflow
coverage, complete list behavior and full Windows packaging were still open.
Later offline progress is summarized by the
[M1 no-device acceptance checkpoint](m1-no-device-acceptance.md); ADR 0002
remains proposed because its external gates are still open.

View file

@ -1,6 +1,6 @@
# Product and research roadmap
Last updated: 2026-10-19
Last updated: 2026-10-21
## Destination
@ -164,9 +164,10 @@ unknown, so the job still deliberately fails the JCZ encoding gate. A private
known-working `.lbrn2` fixture is required before implementing the missing
MOPA mapping.
The architecture decision remains proposed until these spikes produce
evidence. An independent app requires a documented gap analysis showing why
neither existing platform can be extended responsibly.
The architecture decision remains proposed until the packaged Windows
interaction and known-working private-project gates produce evidence. An
independent app requires a documented gap analysis showing why neither
existing platform can be extended responsibly.
Exit criteria: a representative JPT job survives import/planning, MOPA
parameters and units, validation and deterministic mock encoding; the chosen

View file

@ -1,6 +1,6 @@
# Phase 0 status
Last updated: 2026-10-20
Last updated: 2026-10-21
## Completed
@ -75,8 +75,8 @@ evidence for:
- independent layer visibility/output state and ordered serialization;
- material-recipe matching plus a fail-closed PirateRay provenance and exact
machine/source/lens/correction compatibility gate;
- one consolidated no-device acceptance report that reruns all 83 public
tests and the leak guard, then hashes the regression evidence;
- one consolidated no-device acceptance report that reruns the complete
public test suite and leak guard, then hashes the regression evidence;
- a non-executing Windows artifact verifier that checks portable paths,
archive safety, sizes, hashes, the pinned Rayforge revision and every
packaged addon source while retaining the manual GUI gate;

View file

@ -0,0 +1,33 @@
import re
import unittest
from pathlib import Path
from urllib.parse import unquote
ROOT = Path(__file__).resolve().parents[1]
MARKDOWN_LINK = re.compile(r"!?\[[^\]]*\]\(([^)]+)\)")
class DocumentLinkTests(unittest.TestCase):
def test_relative_markdown_links_resolve_inside_repository(self):
documents = [ROOT / "README.md", *sorted((ROOT / "docs").rglob("*.md"))]
failures = []
for document in documents:
text = document.read_text(encoding="utf-8")
for match in MARKDOWN_LINK.finditer(text):
target = match.group(1).strip().strip("<>").split("#", 1)[0]
if not target or "://" in target or target.startswith(("mailto:", "#")):
continue
path = (document.parent / unquote(target)).resolve()
try:
path.relative_to(ROOT)
except ValueError:
failures.append(f"{document.relative_to(ROOT)} -> outside repository: {target}")
continue
if not path.exists():
failures.append(f"{document.relative_to(ROOT)} -> missing: {target}")
self.assertEqual(failures, [], "\n".join(failures))
if __name__ == "__main__":
unittest.main()