feat: add deterministic preview rendering
This commit is contained in:
parent
8c75f4f44d
commit
411f417670
23 changed files with 1413 additions and 142 deletions
|
|
@ -19,7 +19,7 @@ from .changeset_contract import (
|
|||
validate_id,
|
||||
)
|
||||
from .errors import DocForgeError
|
||||
from .models import Node, ProjectSnapshot, ProposalWriter
|
||||
from .models import Edge, Node, ProjectSnapshot, ProposalWriter
|
||||
from .project import Project, project_root_fingerprint
|
||||
from .proposal_projection import ProposalProjector
|
||||
|
||||
|
|
@ -250,6 +250,21 @@ class ChangesetStore:
|
|||
)
|
||||
return self._result(snapshot, document, valid=True, changes=changes)
|
||||
|
||||
def projected_snapshot(self, changeset_id: str) -> tuple[ProjectSnapshot, str]:
|
||||
"""Return a validated in-memory proposal projection for derived preview use."""
|
||||
|
||||
validate_id(changeset_id, "changeset_id")
|
||||
with self._lock():
|
||||
snapshot, document, nodes, edges = self._validate_locked(changeset_id)
|
||||
projected = ProjectSnapshot(
|
||||
descriptor=snapshot.descriptor,
|
||||
nodes=tuple(sorted(nodes.values(), key=lambda node: node.node_id)),
|
||||
edges=tuple(Edge(*edge) for edge in sorted(edges)),
|
||||
source_hash=snapshot.source_hash,
|
||||
revision=snapshot.revision,
|
||||
)
|
||||
return projected, document_hash(document)
|
||||
|
||||
def _append(
|
||||
self,
|
||||
changeset_id: str,
|
||||
|
|
@ -409,6 +424,8 @@ class ChangesetStore:
|
|||
raise DocForgeError("path_escape", "Changeset files may not be symbolic links")
|
||||
if not path.is_file():
|
||||
raise DocForgeError("missing_changeset", "Changeset does not exist", path=path.name)
|
||||
if path.stat().st_size > self.project.descriptor.limits.max_changeset_bytes:
|
||||
raise DocForgeError("changeset_too_large", "Changeset exceeds configured size limit")
|
||||
raw = path.read_bytes()
|
||||
if len(raw) > self.project.descriptor.limits.max_changeset_bytes:
|
||||
raise DocForgeError("changeset_too_large", "Changeset exceeds configured size limit")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue