docs: keep project status and links current
This commit is contained in:
parent
a10d04d75d
commit
ffbff9805c
7 changed files with 55 additions and 16 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
33
tests/test_document_links.py
Normal file
33
tests/test_document_links.py
Normal 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()
|
||||
Loading…
Add table
Reference in a new issue