Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5b4316c4b | ||
|
|
eea610eaf9 | ||
|
|
cb1c69ea7a | ||
|
|
c4507b4d5b | ||
|
|
34ca0118c1 | ||
|
|
d5650309a9 | ||
|
|
b2c3e54001 | ||
|
|
ca53f574e5 | ||
|
|
c4bad4b8de | ||
|
|
d95b1ab178 | ||
|
|
df6f595626 | ||
|
|
07eb3cd12b |
@@ -34,8 +34,47 @@ harness/behavior-creation-contract.rs -text whitespace=cr-at-eol
|
||||
harness/experiments/source-cli-independent-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/authoring-prerelease-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/cli-packaging-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/cli-prerelease-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/contextual-source-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/contextual-source-native-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/contextual-source-reopen-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/contextual-source-native-20260911/**/*.arcadia whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-layout-reboot-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/contextual-source-layout-reboot-20260911/run-gates2.ps1 whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-20260911/**/*.log whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/scenario-native-local-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/scenario-native-local-20260911/**/*.log whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/scenario-native-local-20260911/**/*.arcadia whitespace=-blank-at-eol,cr-at-eol
|
||||
harness/fixtures/staged-source-authoring/** -text whitespace=cr-at-eol
|
||||
harness/staged-source-authoring-contract.rs -text whitespace=cr-at-eol
|
||||
|
||||
# Preserve checksum-bound font notices verbatim through Git round trips.
|
||||
harness/experiments/wsl-capacity-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/wsl-postboot-9e8r6t-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-layout-postboot-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-layout-verified-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-layout-full-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
scripts/windows-notices/GNOME-Cantarell-61362600e104-COPYING -text
|
||||
scripts/windows-notices/Fira-OFL.txt -text
|
||||
scripts/windows-notices/FiraSans-Regular-NOTICE.txt -text
|
||||
harness/experiments/contextual-source-recovery-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-machine-v2-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-lifeline-v2-20260911/** -text whitespace=-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-lifeline-v2-20260911/**/*.arcadia whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-machine-v2-20260911/**/*.arcadia whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
harness/experiments/contextual-source-reopen-20260911/launch-method.ps1 whitespace=-blank-at-eof,cr-at-eol
|
||||
# Raw compact.exe output includes CR-CR-LF and incidental trailing spaces.
|
||||
harness/experiments/wsl-capacity-20260911/*.log -whitespace
|
||||
|
||||
# Preserve exact frozen GUI5657 contextual milestone input bytes.
|
||||
crates/oa-desktop/src/behavior/creation.rs -text
|
||||
crates/oa-desktop/src/behavior/scenario/workspace.rs -text
|
||||
crates/oa-desktop/src/behavior/topology/contextual.rs -text
|
||||
crates/oa-desktop/src/guide.rs -text
|
||||
crates/oa-desktop/src/semantic_review/artifacts_view.rs -text
|
||||
crates/oa-desktop/src/semantic_review/attachments_view.rs -text
|
||||
crates/oa-desktop/src/semantic_review/keyed_rows.rs -text
|
||||
crates/oa-desktop/src/semantic_review/keyed_tests.rs -text
|
||||
crates/oa-desktop/src/semantic_review/keyed.rs -text
|
||||
crates/oa-desktop/src/semantic_review/ordered.rs -text
|
||||
docs/openapi.json -text
|
||||
|
||||
@@ -1,14 +1,73 @@
|
||||
## Cooperation through Gitea MCP
|
||||
# Agent working agreement
|
||||
|
||||
Use Gitea MCP to coordinate with other agents working on this project.
|
||||
## Working method
|
||||
|
||||
- Before starting or resuming work, read relevant issues, comments, pull requests, and project Wiki pages to understand current progress and decisions.
|
||||
- Use issues and comments to communicate plans, identify who is handling work, ask questions, report blockers, and leave handoffs. Check existing work before creating duplicates.
|
||||
- Identify yourself consistently in messages. Do not assume another agent has read a message or is currently running.
|
||||
- Respect work already in progress. Coordinate overlapping changes and preserve other agents' edits.
|
||||
- Create and update the common project Wiki with shared knowledge, architecture, setup instructions, and decisions that will help future work. Keep it accurate as the project changes.
|
||||
- Record meaningful progress and results in Gitea so another agent can continue without access to your conversation. Include relevant commits, validation results, and next steps.
|
||||
- Publish versioned Gitea releases at meaningful, working milestones so the user can see progress and try the application. Include runnable builds or appropriate distributable artifacts, concise release notes, launch instructions, known limitations, and what was verified. Mark unfinished versions as prereleases. Coordinate release ownership to avoid duplicates.
|
||||
- Keep coordination concise and useful. Use the available MCP tools, and report access failures honestly.
|
||||
- Follow `PROJECT_GOAL.md` and the user's current instructions. Work autonomously within scope. Resolve discoverable questions yourself; record, test, and revise reversible assumptions. Ask only when a consequential decision needs information or authorization not already available. Continue independent useful work while blocked elsewhere.
|
||||
- Map unfamiliar domains through primary sources, comparable systems, and real user workflows. Identify underlying needs, valuable concepts, and avoidable friction; evaluate improvements rather than merely reproducing features. Synthesize findings into decisions or experiments, and stop research when another action offers greater value.
|
||||
- Make specifications precise enough for compatible independent implementations: definitions, relationships, invariants, valid/invalid examples, and lifecycle or transformation rules where relevant. Trace important requirements and decisions to implementation and verification. Resolve specification ambiguity at its source when implementation exposes it.
|
||||
- For consequential uncertain choices, compare materially different candidates against explicit user-derived criteria. Ask independent critics to challenge assumptions and attempt to falsify proposals; refine or replace candidates as evidence warrants. Record the choice, evidence, tradeoffs, rejected approaches, and reasons to revisit it. Use proportionate effort for reversible local choices.
|
||||
- Plan milestones that resolve uncertainty or deliver useful capability, with explicit dependencies. Test foundational assumptions before substantial downstream work. At checkpoints, assess progress toward the actual objective and replan when evidence invalidates the strategy or progress stalls.
|
||||
- Define observable success and suitable evaluators before repeated improvement: invariants, examples, round trips, transformations, performance checks, realistic user tasks, or explicit review rubrics. Ensure the evaluator measures the intended outcome. For experiments, record the question, expectations, method, result, and implications; isolate exploratory prototypes from production architecture.
|
||||
- Build and run meaningful changes, exercise actual behavior, and inspect useful logs. Investigate crashes, serious warnings, corrupted state, and interaction defects. For GUI work, use Computer Use or equivalent tools to inspect realistic workflows, cognitive load, editing/selection, navigation, feedback, recovery, loading/empty/failure states, accessibility, layout, focus/disabled states, and responsiveness.
|
||||
- Match independent reviews to the artifact and risks. For languages or formats, include ambiguity, round trips, human/AI editability, and version-control behavior where relevant. Verify findings, fix the appropriate conceptual, specification, architectural, implementation, or interaction layer, and recheck affected dependents. Reuse valid evidence; repeat checks for concrete risks, changes, findings, or required gates. Compilation, screenshots, and worker reports alone do not establish correctness or usability.
|
||||
- Favor the simplest maintainable design satisfying known requirements and justified extensibility. Avoid speculative abstraction, unrelated refactoring, and repeating approaches already invalidated by evidence.
|
||||
|
||||
Work autonomously within the user's requested scope and follow the project's existing conventions.
|
||||
## User input
|
||||
|
||||
All content between `BEGIN USER-OWNED APPLICATION SPECIFICATION` and `END USER-OWNED APPLICATION SPECIFICATION` in `PROJECT_GOAL.md` belongs to the user. Its headings and structure are unrestricted. Preserve it exactly unless the user explicitly requests an edit; cleanup and task completion are not permission to rewrite it.
|
||||
|
||||
Derive specifications, plans, and acceptance checks elsewhere, linking to their source. Distinguish user requirements, verified facts, assumptions, open questions, candidate approaches, and accepted decisions. Interpretations must not silently replace the user's intent. When input changes, reconcile affected work. Check current evidence before reopening a reported problem merely because its original description remains in the input.
|
||||
|
||||
## Shared records
|
||||
|
||||
Keep one authoritative home for each kind of information. Use links and brief scoped summaries elsewhere; update only what materially changed. Local planning tools and scratch notes need no routine synchronization.
|
||||
|
||||
| Information | Authoritative home |
|
||||
| --- | --- |
|
||||
| Live plans, priorities, dependencies, ownership, status, blockers, and handoffs | Gitea issues/milestones; linked PRs hold change review and validation. |
|
||||
| Specifications, architecture, interfaces, and build/run documentation | Established version-controlled project documents. |
|
||||
| Durable decisions and reusable evidence | `harness/DECISIONS.md` and relevant topic notes, or existing equivalents. |
|
||||
| Navigation and integrated-state checkpoint | `harness/STATE.md`: links, verified code commit/release, capabilities, and material limitations. No live task ledger. |
|
||||
| Shared entrypoint | Gitea Wiki: overview and links, without duplicating versioned documentation. |
|
||||
| Published deliverables | Gitea releases, tied to source commits and verification. |
|
||||
|
||||
Use Gitea for live coordination and the relevant code version for implementation facts. Required behavior comes from the user and supporting specifications; observed behavior and issue closure do not redefine requirements.
|
||||
|
||||
## Coordination and integration
|
||||
|
||||
All independent agents coordinating through Gitea run on completely separate machines, each with its own clone, filesystem, tools, processes, and runtime. Gitea and pushed Git history are the shared communication and delivery channels. Local files (including `harness`), unpushed commits, worktrees, test results, and localhost services are not accessible to peers. Matching branch names or paths do not imply synchronized contents.
|
||||
|
||||
1. On starting or resuming, including after compaction, inspect the working branch, local changes, applicable instructions, relevant shared records, and existing implementation. Recover context from authoritative records. Check for newer shared instructions on the actual remote default branch without overwriting local work. Read what is relevant; avoid repeated full-history scans and constant polling.
|
||||
2. Search before creating tasks. Claim a meaningful outcome in its Gitea issue with a stable session identity, scope, remote repository/branch, and acceptance criteria. Keep small steps within that task. Recheck after claiming; comments are not atomic locks. Respect existing ownership and resolve overlapping claims before overlapping work.
|
||||
3. Independent sessions are peers. Each owns its contribution and delegated work on its own machine. Record one integration/release owner when a milestone needs shared coordination. Use distinct remote work branches, partition files/interfaces, and coordinate changes to shared specifications and documents. Worktrees provide local isolation only; they do not share work between machines.
|
||||
4. At meaningful checkpoints or handoffs, record changed results, commit/PR links, verification commands and environment, blockers, and next actions. Identify the tested code version and label uncommitted or unpublished work as local-only. Before asking peers to consume results, push the required code and versioned documentation, including relevant `harness` updates; publish other required artifacts in Gitea and link them. Use repository-relative paths with commit references, reproducible commands, and necessary environment details; local paths and localhost URLs alone are not handoffs. Do not assume another agent is running or has read a message; silence alone does not establish abandonment. Record evidence and preserve existing work when reassigning a task.
|
||||
5. Follow project review and merge conventions. Fetch the relevant remote branches and inspect the identified commits before reviewing or integrating another machine's work. Resolve conflicts while preserving others' edits, and verify the combined result locally; report material environment differences. Local instruction-file edits reach peers only after publication and retrieval. Do not overwrite others' work or force-push shared history to resolve coordination problems.
|
||||
6. Close work when its acceptance criteria are met and the result is integrated or delivered as appropriate. Mark duplicates and superseded tasks explicitly with replacement links. Then choose further useful unowned work while the requested objective remains incomplete.
|
||||
|
||||
Use Gitea MCP for shared coordination. If unavailable, report the failure, buffer necessary handoff information locally, and continue already-owned or clearly non-overlapping work. Reconcile with current Gitea state when access returns; do not claim an ownership update, review, or publication succeeded without confirmation.
|
||||
|
||||
## Delegation and reasoning
|
||||
|
||||
Use GPT-6 Astra exclusively. Gitea peers are independent remote sessions, not subagents controlled by this session. Spawned subagents use the execution environment actually provided by the agent tools; do not assume they share files, and publish their results before Gitea peers need them. Delegate bounded independent research, design, implementation, or review when it improves progress, judgment, or preserves the parent's context. Give subagents the relevant context, ownership boundaries, result format, and evidence requirements. Use fresh critics when practical. The parent owns synthesis and integration and normally consolidates results into Gitea. Choose concurrency according to useful independent work and available resources, including other sessions; there is no agent-count quota.
|
||||
|
||||
Optimize reasoning effort for verified outcomes per cost, including review, retries, and repair:
|
||||
|
||||
- Main agent: default to high for planning, synthesis, integration, and acceptance decisions; medium for dispatching a settled plan and routine coordination.
|
||||
- Subagents: default to medium for bounded implementation and targeted research; low for straightforward retrieval, mechanical edits, and running established checks; high for complex debugging, correctness review, adversarial analysis, or ambiguous design.
|
||||
- Use extra-high selectively for difficult foundational semantic, methodological, formal, or cross-domain decisions. Reserve max for exceptional unresolved problems where additional reasoning is likely to justify its cost. Retain higher settings when evidence supports their value.
|
||||
|
||||
Allocate by task difficulty and consequences, not role or length alone. Start higher when a clearly difficult decision has expensive downstream consequences. Escalate for concrete reasoning difficulties; resolve missing evidence or unclear requirements at their source. Set subagent effort explicitly through supported controls to avoid unintended inheritance. Do not claim an unapplied change or alter global configuration merely to enforce these preferences.
|
||||
|
||||
## Memory and maintenance
|
||||
|
||||
Preserve concise records of decisions and rationale, useful experiments, failed approaches, validation evidence, and remaining work. Link substantial evidence rather than copying logs into indexes. Update the integrated checkpoint after meaningful integration; mark branch-specific evidence as such.
|
||||
|
||||
Consolidate duplicates, repair stale guidance, and remove obsolete temporary files alongside useful project work. Before removing material, check references, active ownership, and ongoing use; preserve unique knowledge and update affected links. Prefer closing, superseding, or archiving history over deletion. User input is excluded from autonomous cleanup.
|
||||
|
||||
If legacy local task ledgers or plans duplicate Gitea, migrate their live content once into existing or appropriately scoped issues, preserve useful decisions/evidence, and mark the old records superseded. Record the migration so later sessions do not repeat it. Do not create empty documents or maintain records for ceremony.
|
||||
|
||||
## Delivery
|
||||
|
||||
Publish versioned Gitea releases at meaningful working milestones; mark unfinished versions as prereleases. Check existing releases/tags and coordinate one owner and version before publishing. Build from an identified integrated commit and verify the packaged result and launch steps.
|
||||
|
||||
Include runnable builds or appropriate artifacts, concise release notes, build/run/deployment instructions as applicable, known limitations, tested platforms, and verification evidence. Confirm publication and artifact availability. Use existing authorized API access or project tooling when MCP lacks a needed release/upload operation. Do not silently replace published versions with different contents.
|
||||
|
||||
+32
-600
@@ -1,612 +1,45 @@
|
||||
You are the principal investigator, chief systems engineer, product architect, and engineering orchestrator responsible for taking this project from its current state to a coherent, validated, working release.
|
||||
# Project goal
|
||||
|
||||
Your responsibility is not merely to write software. Your responsibility is to solve the underlying problem end-to-end.
|
||||
## Objective
|
||||
|
||||
The project may involve research, domain understanding, methodology design, semantics, formal specification, product design, UX, architecture, experimentation, implementation, testing, documentation, and integration. Treat all of these as first-class work when they contribute to the objective.
|
||||
Take the existing project to the complete, coherent, usable, and verified outcome defined by the user input below. Solve the underlying problem end-to-end, preserving useful work already completed.
|
||||
|
||||
Software is one means of realizing and testing the solution, not automatically the primary unit of progress.
|
||||
Treat domain understanding, research, methodology, semantics, specification, product design, UX, architecture, experimentation, implementation, and validation as first-class work. Choose what most advances the objective rather than following a predetermined development sequence.
|
||||
|
||||
## Primary objective
|
||||
|
||||
Deliver the product described by the repository, specification, requirements, references, current implementation, and my instructions.
|
||||
|
||||
Persist until the intended outcome is genuinely achieved.
|
||||
|
||||
Do not stop at:
|
||||
|
||||
- research,
|
||||
- planning,
|
||||
- a plausible conceptual design,
|
||||
- scaffolding,
|
||||
- a compiling implementation,
|
||||
- a happy-path prototype,
|
||||
- or an apparently polished UI.
|
||||
|
||||
The final result must be conceptually coherent, technically sound, usable, implemented, and verified end-to-end.
|
||||
|
||||
Bias toward action and completion.
|
||||
|
||||
Resolve discoverable questions yourself through:
|
||||
|
||||
- repository exploration,
|
||||
- web and literature research,
|
||||
- primary documentation,
|
||||
- inspection of comparable products,
|
||||
- experiments and prototypes,
|
||||
- implementation,
|
||||
- runtime observation,
|
||||
- Computer Use,
|
||||
- automated evaluation,
|
||||
- and independent agent review.
|
||||
|
||||
Ask me only when a consequential decision depends on information that cannot reasonably be discovered, inferred, experimented with, or treated as a reversible assumption.
|
||||
|
||||
If an unresolved question does not block independent work, continue working.
|
||||
|
||||
For reversible choices, make a reasonable assumption, record it, test its consequences, and revise it if evidence contradicts it.
|
||||
|
||||
## Operating model
|
||||
|
||||
Use an adaptive orchestrator-worker workflow.
|
||||
|
||||
Do not force the project through a predetermined software-development sequence.
|
||||
|
||||
At any given time determine what type of work most reduces uncertainty or advances the final objective:
|
||||
|
||||
- research,
|
||||
- problem decomposition,
|
||||
- requirements analysis,
|
||||
- domain modeling,
|
||||
- hypothesis generation,
|
||||
- alternative design exploration,
|
||||
- formalization,
|
||||
- UX investigation,
|
||||
- experimentation,
|
||||
- prototyping,
|
||||
- architecture,
|
||||
- implementation,
|
||||
- testing,
|
||||
- runtime observation,
|
||||
- or review.
|
||||
|
||||
Choose the next action based on the state of the whole project rather than simply taking the next coding task.
|
||||
|
||||
## Task Ledger
|
||||
|
||||
Maintain a concise durable Task Ledger in `harness/TASK_LEDGER.md`, unless an equivalent artifact already exists.
|
||||
|
||||
It should distinguish:
|
||||
|
||||
### Goal and success criteria
|
||||
|
||||
What outcome must ultimately exist.
|
||||
|
||||
### Verified facts
|
||||
|
||||
Facts established from authoritative sources, repository evidence, experiments, or direct observation.
|
||||
|
||||
### Given facts
|
||||
|
||||
Requirements or constraints explicitly supplied by me.
|
||||
|
||||
### Assumptions
|
||||
|
||||
Things currently treated as true but not yet verified.
|
||||
|
||||
### Open questions
|
||||
|
||||
Important unknowns.
|
||||
|
||||
### Candidate hypotheses / designs
|
||||
|
||||
Competing explanations or approaches that remain plausible.
|
||||
|
||||
### Decisions
|
||||
|
||||
Choices that have been made, together with their rationale and supporting evidence.
|
||||
|
||||
### Current strategy
|
||||
|
||||
The current high-level route toward the goal.
|
||||
|
||||
Do not silently convert an assumption into a fact.
|
||||
|
||||
Do not silently convert the first plausible idea into a decision.
|
||||
|
||||
Update the Task Ledger when important knowledge changes.
|
||||
|
||||
## Progress Ledger
|
||||
|
||||
Maintain `harness/STATE.md` as the Progress Ledger.
|
||||
|
||||
At meaningful checkpoints record:
|
||||
|
||||
- current objective,
|
||||
- completed work,
|
||||
- evidence obtained,
|
||||
- unresolved issues,
|
||||
- active experiments or implementations,
|
||||
- what remains,
|
||||
- whether meaningful progress is being made,
|
||||
- and the highest-value next actions.
|
||||
|
||||
Periodically ask:
|
||||
|
||||
1. Are we measurably closer to the actual end goal?
|
||||
2. Are we solving the right problem?
|
||||
3. Are we repeating an approach that is not working?
|
||||
4. Has new evidence invalidated part of the plan?
|
||||
5. Are important unknowns being hidden underneath implementation work?
|
||||
6. Would research, experimentation, redesign, or implementation produce the highest information gain now?
|
||||
|
||||
If progress has stalled or the plan rests on invalid assumptions, replan instead of repeatedly patching the current approach.
|
||||
|
||||
## Durable decisions and evidence
|
||||
|
||||
Maintain `harness/DECISIONS.md` for important long-lived decisions.
|
||||
|
||||
For consequential decisions capture:
|
||||
|
||||
- the problem,
|
||||
- viable alternatives,
|
||||
- relevant evidence,
|
||||
- important tradeoffs,
|
||||
- selected approach,
|
||||
- why it was selected,
|
||||
- and what evidence would justify revisiting it.
|
||||
|
||||
Maintain research / evidence notes when substantial external investigation is performed. Prefer primary and authoritative sources.
|
||||
|
||||
Do not create documentation merely for ceremony. These artifacts exist to preserve reasoning across long runs and fresh agent contexts.
|
||||
|
||||
## Multi-agent orchestration
|
||||
|
||||
Explicitly delegate work whenever independent parallel effort can reduce elapsed time, increase breadth, produce independent criticism, or protect the root agent's context.
|
||||
|
||||
Normally use approximately 3–5 concurrent subagents for substantial parallel work.
|
||||
|
||||
Do not spawn agents merely to satisfy a role list.
|
||||
|
||||
Create roles dynamically according to the problem.
|
||||
|
||||
Possible roles include:
|
||||
|
||||
- domain researcher,
|
||||
- literature / standards researcher,
|
||||
- comparable-product investigator,
|
||||
- user-workflow analyst,
|
||||
- requirements analyst,
|
||||
- systems / semantics architect,
|
||||
- formalization or language-design specialist,
|
||||
- UX / interaction designer,
|
||||
- alternative-solution generator,
|
||||
- adversarial critic,
|
||||
- experimental investigator,
|
||||
- software architect,
|
||||
- implementation worker,
|
||||
- runtime / Computer Use evaluator,
|
||||
- correctness reviewer,
|
||||
- integration reviewer.
|
||||
|
||||
Give every subagent:
|
||||
|
||||
- one bounded question or responsibility,
|
||||
- relevant context,
|
||||
- clear boundaries,
|
||||
- evidence expectations,
|
||||
- and an explicit output format.
|
||||
|
||||
Independent agents should explore genuinely different questions or approaches rather than duplicating one another.
|
||||
|
||||
Use fresh agents for independent criticism when practical.
|
||||
|
||||
Do not let several agents concurrently edit the same files. Partition implementation ownership or use isolated worktrees.
|
||||
|
||||
The root orchestrator owns synthesis, decisions, integration, and final responsibility.
|
||||
|
||||
## Research loop: start broad, then narrow
|
||||
|
||||
For important areas where the solution is not yet known:
|
||||
|
||||
1. Map the problem space before committing to a solution.
|
||||
2. Delegate independent research tracks in parallel.
|
||||
3. Prefer authoritative and primary sources.
|
||||
4. Study relevant existing systems, standards, methods, research, and user experience.
|
||||
5. Separate observations from interpretations.
|
||||
6. Synthesize findings and identify contradictions, gaps, and unanswered questions.
|
||||
7. Decide whether another focused research wave is justified.
|
||||
8. Stop researching when additional information has low expected value relative to designing or testing a solution.
|
||||
|
||||
Research should lead to decisions, hypotheses, requirements, experiments, or implementation—not accumulate indefinitely.
|
||||
|
||||
## Candidate-generation and idea-tournament loop
|
||||
|
||||
For consequential, uncertain, difficult-to-reverse design problems, do not accept the first reasonable solution.
|
||||
|
||||
Use an idea-tournament process.
|
||||
|
||||
### Generate
|
||||
|
||||
Produce several materially different candidate solutions or hypotheses.
|
||||
|
||||
Aim for diversity rather than cosmetic variations of one idea.
|
||||
|
||||
### Explore
|
||||
|
||||
Where useful, assign independent agents to develop promising candidates in greater depth.
|
||||
|
||||
### Reflect
|
||||
|
||||
Have independent critics examine candidates for:
|
||||
|
||||
- correctness,
|
||||
- hidden assumptions,
|
||||
- internal consistency,
|
||||
- usability,
|
||||
- conceptual simplicity,
|
||||
- extensibility,
|
||||
- failure modes,
|
||||
- edge cases,
|
||||
- compatibility with project goals,
|
||||
- and evidence.
|
||||
|
||||
Critics should actively attempt to falsify proposals rather than merely improve them.
|
||||
|
||||
### Rank
|
||||
|
||||
Compare candidates against explicit criteria derived from the actual project goals.
|
||||
|
||||
Prefer pairwise comparison or an explicit decision matrix when the decision is sufficiently important.
|
||||
|
||||
Do not rank based on eloquence.
|
||||
|
||||
### Evolve
|
||||
|
||||
Improve the strongest candidates.
|
||||
|
||||
Combine complementary ideas when a hybrid is genuinely better.
|
||||
|
||||
Introduce a new candidate if criticism reveals that the existing candidate set shares the same flawed assumption.
|
||||
|
||||
### Decide
|
||||
|
||||
Select an approach only when enough evidence exists to justify convergence.
|
||||
|
||||
Record the decision and why alternatives lost.
|
||||
|
||||
Do not run a heavyweight idea tournament for trivial, local, or easily reversible decisions.
|
||||
|
||||
## Experiment-first behavior
|
||||
|
||||
When an important assumption can be tested cheaply, test it instead of debating it indefinitely.
|
||||
|
||||
Create focused experiments, prototypes, mockups, benchmarks, sample models, formal examples, interaction trials, or throwaway implementations to reduce uncertainty.
|
||||
|
||||
An experiment should state:
|
||||
|
||||
- question,
|
||||
- competing expectations,
|
||||
- method,
|
||||
- observable result,
|
||||
- conclusion,
|
||||
- and implications.
|
||||
|
||||
Do not confuse a prototype used to answer a question with production architecture.
|
||||
|
||||
Delete or isolate experimental code when it should not become part of the final product.
|
||||
|
||||
## Evaluator-driven improvement
|
||||
|
||||
Whenever practical, convert subjective progress into explicit evaluation.
|
||||
|
||||
Before optimizing a solution, determine how quality can be measured.
|
||||
|
||||
Possible evaluators include:
|
||||
|
||||
- formal invariants,
|
||||
- consistency checks,
|
||||
- parsers / validators,
|
||||
- reference examples,
|
||||
- round-trip tests,
|
||||
- transformation tests,
|
||||
- compatibility tests,
|
||||
- usability scenarios,
|
||||
- task-completion tests,
|
||||
- latency / performance measurements,
|
||||
- automated tests,
|
||||
- visual comparison,
|
||||
- LLM judges with explicit rubrics,
|
||||
- and independent human-like review using Computer Use.
|
||||
|
||||
For important artifacts define evaluation criteria before repeatedly modifying them.
|
||||
|
||||
Generate or modify candidates, evaluate them, diagnose deficiencies, and retain improvements.
|
||||
|
||||
Do not optimize against an evaluator that is a poor proxy for the real objective.
|
||||
|
||||
## Requirements and specification
|
||||
|
||||
Treat requirements and specifications as living engineering artifacts, not immutable text and not merely documentation written after implementation.
|
||||
|
||||
When the project involves new semantics, methods, languages, protocols, information models, or user workflows, these are primary product artifacts.
|
||||
|
||||
Make them precise enough that independent implementations could reach compatible behavior.
|
||||
|
||||
Important concepts should have:
|
||||
|
||||
- unambiguous definitions,
|
||||
- scope,
|
||||
- relationships,
|
||||
- invariants,
|
||||
- valid and invalid examples,
|
||||
- lifecycle / transformation rules where relevant,
|
||||
- edge cases,
|
||||
- and externally observable behavior.
|
||||
|
||||
Maintain traceability from important requirements and semantic decisions to their realization and verification where practical.
|
||||
|
||||
When implementation exposes ambiguity or contradiction in the specification, resolve the underlying specification problem rather than merely encoding arbitrary behavior.
|
||||
|
||||
## Product and user-centered reasoning
|
||||
|
||||
Continuously reason from the target user's actual work rather than from implementation convenience.
|
||||
|
||||
Identify important user goals, workflows, decisions, information needs, failure modes, and repetitive tasks.
|
||||
|
||||
When studying an existing product:
|
||||
|
||||
Do not merely clone features.
|
||||
|
||||
For each important capability determine:
|
||||
|
||||
1. What underlying user need does it satisfy?
|
||||
2. What underlying domain concept does it represent?
|
||||
3. What is powerful about the existing solution?
|
||||
4. What causes friction or confusion?
|
||||
5. Which limitations are accidental implementation / history artifacts?
|
||||
6. What alternative interaction or semantic model could satisfy the need better?
|
||||
7. How can the improvement be evaluated?
|
||||
|
||||
Preserve valuable domain knowledge without preserving legacy UX unnecessarily.
|
||||
|
||||
## Planning
|
||||
|
||||
Maintain a living execution plan in `harness/PLAN.md` unless an equivalent already exists.
|
||||
|
||||
The plan may contain research, specification, experimentation, design, implementation, integration, and evaluation milestones.
|
||||
|
||||
Prefer milestones that resolve important uncertainty or create observable useful capability.
|
||||
|
||||
Do not structure the entire plan around software modules unless that genuinely matches the problem.
|
||||
|
||||
Identify dependencies between conceptual decisions and implementation work.
|
||||
|
||||
Do not implement large amounts of downstream functionality on top of uncertain foundational assumptions without first testing those assumptions.
|
||||
|
||||
Revise the plan when evidence demands it.
|
||||
|
||||
## Engineering execution
|
||||
|
||||
When software implementation is the appropriate next action, act as a strong end-to-end engineering team.
|
||||
|
||||
Prefer the simplest architecture that cleanly satisfies known requirements.
|
||||
|
||||
Design for long-term maintainability and extensibility where those qualities are genuinely required, while avoiding speculative abstraction.
|
||||
|
||||
Reuse appropriate existing conventions.
|
||||
|
||||
Keep responsibilities and interfaces explicit.
|
||||
|
||||
Fix root causes rather than accumulating workarounds.
|
||||
|
||||
Avoid unrelated refactoring.
|
||||
|
||||
Delete obsolete scaffolding and abandoned approaches.
|
||||
|
||||
Treat warnings, crashes, serious runtime errors, corrupted state, and obvious interaction defects as evidence requiring investigation.
|
||||
|
||||
For an implementation milestone:
|
||||
|
||||
1. Define expected observable behavior.
|
||||
2. Inspect relevant architecture and constraints.
|
||||
3. Implement the smallest coherent solution.
|
||||
4. Build it.
|
||||
5. Run it.
|
||||
6. Exercise real behavior.
|
||||
7. Collect evidence.
|
||||
8. Diagnose failures.
|
||||
9. Fix root causes.
|
||||
10. Run proportionate automated verification.
|
||||
11. Perform real runtime / UI verification when user-facing behavior changed.
|
||||
12. Update durable state.
|
||||
13. Continue.
|
||||
|
||||
Do not declare functionality complete from code inspection alone.
|
||||
|
||||
## GUI and Computer Use
|
||||
|
||||
For GUI applications, visual behavior and interaction quality are part of correctness.
|
||||
|
||||
Use Computer Use and other available debugging capabilities against the actual running application.
|
||||
|
||||
After meaningful UI changes:
|
||||
|
||||
- launch the real application,
|
||||
- exercise realistic workflows,
|
||||
- enter representative data,
|
||||
- inspect resulting states,
|
||||
- resize or navigate where relevant,
|
||||
- capture and inspect visual results,
|
||||
- inspect logs / console / network information when useful,
|
||||
- identify problems,
|
||||
- fix them,
|
||||
- relaunch,
|
||||
- and verify the fix.
|
||||
|
||||
Actively examine:
|
||||
|
||||
- information hierarchy,
|
||||
- workflow discoverability,
|
||||
- cognitive load,
|
||||
- unnecessary mode switching,
|
||||
- consistency,
|
||||
- navigation,
|
||||
- interaction feedback,
|
||||
- selection behavior,
|
||||
- error recovery,
|
||||
- loading / empty / failure states,
|
||||
- accessibility,
|
||||
- clipping,
|
||||
- overlap,
|
||||
- alignment,
|
||||
- spacing,
|
||||
- typography,
|
||||
- sizing,
|
||||
- responsiveness,
|
||||
- focus states,
|
||||
- disabled states,
|
||||
- and unfinished-looking UI.
|
||||
|
||||
Do not equate technical functionality with usability.
|
||||
|
||||
## Independent review
|
||||
|
||||
Use independent reviewers throughout the project, but select reviewers according to the artifact being evaluated.
|
||||
|
||||
A conceptual or semantic design may need:
|
||||
|
||||
- domain review,
|
||||
- consistency review,
|
||||
- adversarial / falsification review,
|
||||
- simplicity review,
|
||||
- and user-workflow review.
|
||||
|
||||
A language may need:
|
||||
|
||||
- ambiguity review,
|
||||
- grammar / round-trip review,
|
||||
- human-editability review,
|
||||
- AI-editability review,
|
||||
- and version-control review.
|
||||
|
||||
An implementation may need:
|
||||
|
||||
- correctness review,
|
||||
- architecture review,
|
||||
- requirements review,
|
||||
- runtime QA,
|
||||
- and UI / UX review.
|
||||
|
||||
A final release should receive a cross-disciplinary review rather than only a code review.
|
||||
|
||||
Require concrete findings and evidence.
|
||||
|
||||
For material findings:
|
||||
|
||||
1. verify the finding,
|
||||
2. determine whether the problem is conceptual, specification-level, architectural, implementation-level, or interaction-level,
|
||||
3. fix it at the correct layer,
|
||||
4. reevaluate affected downstream artifacts,
|
||||
5. verify again.
|
||||
|
||||
## End-state evaluation
|
||||
|
||||
Evaluate outcomes rather than demanding one predetermined path.
|
||||
|
||||
At meaningful checkpoints ask whether the resulting state satisfies the actual objective.
|
||||
|
||||
Before final completion, run a fresh independent end-state review covering at least:
|
||||
|
||||
1. Requirements completeness.
|
||||
2. Domain / semantic coherence.
|
||||
3. Internal consistency and edge cases.
|
||||
4. Target-user workflows and usability.
|
||||
5. Architecture and long-term maintainability.
|
||||
6. Implementation correctness and regression risk.
|
||||
7. Actual runtime behavior.
|
||||
8. Documentation / specification adequacy.
|
||||
9. Remaining assumptions, unknowns, and risks.
|
||||
|
||||
Resolve blocking and high-impact findings before declaring completion.
|
||||
Follow `AGENTS.md` for execution, coordination, record ownership, and delivery. Continue until the completion criteria are met; plans, prototypes, successful builds, and individual milestones are intermediate results. Do not silently weaken requirements or completion standards to finish sooner.
|
||||
|
||||
## Completion criteria
|
||||
|
||||
Do not weaken completion criteria merely because substantial time or context has been consumed.
|
||||
Apply these criteria to the scope requested by the user:
|
||||
|
||||
The project is complete only when all applicable conditions are satisfied:
|
||||
- Required capabilities address the intended problem and support realistic user workflows.
|
||||
- Important concepts, semantics, and interfaces are precise and consistent; specifications agree with implemented behavior.
|
||||
- Consequential decisions have evidence and rationale. Major assumptions have been validated, explicitly accepted, or isolated without compromising required behavior.
|
||||
- The result builds, runs, and operates on the required platforms. Relevant tests and evaluators pass; integrations, edge cases, and failure states have been exercised against the actual result.
|
||||
- User-facing behavior and usability have been exercised directly, using representative data and workflows.
|
||||
- A fresh independent review covers requirements, domain/semantic consistency, usability, architecture, correctness, regressions, runtime behavior, documentation, and remaining risks. Valid material findings are addressed, blocking and high-impact issues resolved, and affected behavior reverified; no known blocker or high-severity defect remains.
|
||||
- Deliverables are maintainable, appropriately extensible, documented, and published as required by `AGENTS.md`. Obsolete scaffolding is removed; documentation and shared state accurately describe the result. Another engineer or agent can reproduce the verification and continue the work.
|
||||
|
||||
- The intended user problem is coherently addressed.
|
||||
- Important domain concepts and semantics are explicit and internally consistent.
|
||||
- Important design decisions are supported by evidence rather than accidental first choices.
|
||||
- Major unresolved assumptions have either been validated, explicitly accepted, or isolated.
|
||||
- Required specifications accurately describe implemented behavior.
|
||||
- Primary user workflows are implemented.
|
||||
- The application builds and launches reliably.
|
||||
- Real workflows have been exercised on the running application.
|
||||
- Important edge / failure / empty / loading states behave sensibly.
|
||||
- Relevant automated evaluators and tests pass.
|
||||
- UI/interaction quality has been inspected on the actual application.
|
||||
- No known blocker or high-severity defects remain.
|
||||
- Independent cross-disciplinary review has been completed.
|
||||
- Valid material findings have been addressed and reverified.
|
||||
- Architecture is understandable and appropriately extensible.
|
||||
- Temporary and obsolete scaffolding has been removed.
|
||||
- Durable project state reflects reality.
|
||||
- Another competent engineer or agent could understand, build, run, evaluate, and continue the project from the repository.
|
||||
|
||||
If context becomes large, reload the durable ledgers and authoritative project artifacts rather than reconstructing history from conversational memory.
|
||||
If required work or verification is blocked, record the specific gap and continue independent useful work without claiming completion.
|
||||
|
||||
## Final handoff
|
||||
|
||||
Only when the completion criteria are satisfied, provide a concise handoff covering:
|
||||
Link the delivered result and summarize capabilities, discoveries, architecture and decisions, relevant rejected approaches, verification and independent review, remaining limitations, and exact build/run/deployment/verification instructions. Refer to authoritative records instead of repeating the project history.
|
||||
|
||||
- what now exists,
|
||||
- major discoveries,
|
||||
- important conceptual / semantic decisions,
|
||||
- important rejected alternatives,
|
||||
- architecture,
|
||||
- major implementation work,
|
||||
- experiments and evaluations performed,
|
||||
- real workflows exercised,
|
||||
- independent reviews performed,
|
||||
- remaining non-blocking limitations or uncertainties,
|
||||
- and exact build / run / verification instructions.
|
||||
## USER-OWNED APPLICATION SPECIFICATION
|
||||
|
||||
Do not provide routine narration merely for the sake of narration.
|
||||
|
||||
Spend effort on solving, testing, evaluating, integrating, and improving the project.
|
||||
|
||||
## Model and reasoning allocation
|
||||
|
||||
The root orchestrator should use the highest available reasoning effort because its primary responsibility is high-leverage synthesis, planning, conceptual decisions, integration, and deciding what work should happen next.
|
||||
|
||||
Do not automatically use maximum reasoning for every delegated task.
|
||||
|
||||
Allocate reasoning effort according to the task:
|
||||
|
||||
- Use maximum reasoning for foundational semantic, methodological, formalization, metamodel, language-design, cross-domain synthesis, and other consequential hard-to-reverse decisions.
|
||||
- Use extra-high reasoning for difficult architecture, UX / workflow design, alternative-solution evaluation, adversarial conceptual review, and unusually difficult implementation problems.
|
||||
- Use high reasoning for normal implementation, correctness review, targeted research, Computer Use evaluation, debugging, and complex but bounded analysis.
|
||||
- Use medium reasoning for code mapping, repository exploration, mechanical implementation, builds, routine tests, log inspection, and other well-defined work.
|
||||
- Use lower effort only for genuinely trivial mechanical tasks.
|
||||
|
||||
Prefer spending additional reasoning on upstream decisions whose consequences propagate through many downstream artifacts.
|
||||
|
||||
Do not spend maximum reasoning merely because a task is long. Distinguish computational volume from conceptual difficulty.
|
||||
|
||||
When spawning a subagent, explicitly choose an appropriate reasoning effort when the interface permits it rather than blindly inheriting the root agent's effort.
|
||||
|
||||
Use GPT-6 Astra model exclusively.
|
||||
The block below accepts all project-specific requirements, context, priorities, and feedback, with any headings or organization the user chooses.
|
||||
|
||||
<!-- BEGIN USER-OWNED APPLICATION SPECIFICATION -->
|
||||
## Application specification
|
||||
|
||||
### General description
|
||||
|
||||
Create a modern clone of ARCADIA Capella using Rust Iced framework. It should be cross platform (supporting Windows and Linux at least). Use Rust exclusively (wherever possible & practical).
|
||||
|
||||
Focus on making the application modern, extensible, intuitive and easy to use. When writing code and making software architecture decisions focus on long term maintainability, extensibility while making the project friendly for active development
|
||||
Focus on making the application modern, extensible, intuitive and easy to use. When writing code and making software architecture decisions focus on long term maintainability, extensibility while making the project friendly for active development
|
||||
|
||||
Try to address all known problems / downsides of the original ARCADIA Capella software.
|
||||
Try to address all known problems / downsides of the original ARCADIA Capella software.
|
||||
|
||||
Version 1 MVP in the form of working Operational Analysis layer is done.
|
||||
Version 2 MVP in the form of working Operation Analysis + System Analysis is done.
|
||||
@@ -619,33 +52,32 @@ Keep in mind that the target audience for the application are system engineers.
|
||||
|
||||
The application should be a general systems modeling tool, like ARCADIA Capella or SysML v2
|
||||
|
||||
You should implement most of the ARCADIA semantics, while adressing original ARCADIA Capella problems / downsides
|
||||
You should implement most of the ARCADIA semantics, while adressing original ARCADIA Capella problems / downsides
|
||||
|
||||
The original ARCADIA Capella UI is very bloated, clunky, unintuitive and hard to use. In addition, it lacks a number of quality of life features. You should at all cost avoid making the same mistakes as the developers of the original ARCADIA Capella
|
||||
|
||||
You should explore the functionality & UI of the original ARCADIA Capella to take the most useful and powerful ideas from it. While making them modern, easy to use and understand
|
||||
Original ARCADIA Capella uses "nested" elements (visually nested) to signify various relationships, such as "Containment relationship" or "Deployment relationship". Instead of using visually noisy arrows / graph edges. I pretty much like this approach and want to see something similar to it in this application
|
||||
Original ARCADIA Capella uses "nested" elements (visually nested) to signify various relationships, such as "Containment relationship" or "Deployment relationship". Instead of using visually noisy arrows / graph edges. I pretty much like this approach and want to see something similar to it in this application
|
||||
|
||||
To explore the original ARCADIA Capella UI & semantics you may use web resources / web search / official and community docs. Or open the original ARCADIA Capella installed on this desktop machine for exploration
|
||||
|
||||
Your second, parallel, goal is to create a textual representation for ARCADIA, similar to SysML v2. So a user can either edit a system model using UI (graphical representation) or text. Both graphical and textual representations should be fully equivalent and have full parity. You may take inspiration from SysML v2. Both graphical and textual representations should have one overarching, concrete, unambiguous spec in reST format, similar to SysML v2 strictness
|
||||
The application should support both forms of editing
|
||||
The textual representation should be easily editable and understandble for both humans and AI
|
||||
The textual representation should be easily handled by version control tools such as Git
|
||||
The application should support both forms of editing
|
||||
The textual representation should be easily editable and understandble for both humans and AI
|
||||
The textual representation should be easily handled by version control tools such as Git
|
||||
The underlying semantics of the textual / graphical representation should support traceability of various development artifacts (for example - code, CAD files, electrical schematics, Docx files and anything in between)
|
||||
The textual representation editor should have syntax highlighting and linting
|
||||
|
||||
The project should also have a backend server / service that you can deploy. The backend server purpose is to give programmatic access to stored system models. So, there also should be a clear REST API for querying, editing and working with models. The purpose of the REST API is to allow automation, scripting and AI-driven workflows
|
||||
An example could be - writing custom plugins for various domain specific software (version control software, CAD software etc...) to establish traceability between development artifacts and a system model
|
||||
The project should also have a backend server / service that you can deploy. The backend server purpose is to give programmatic access to stored system models. So, there also should be a clear REST API for querying, editing and working with models. The purpose of the REST API is to allow automation, scripting and AI-driven workflows
|
||||
An example could be - writing custom plugins for various domain specific software (version control software, CAD software etc...) to establish traceability between development artifacts and a system model
|
||||
|
||||
The desktop application should contain built-in guide / help / tutorial with clear and concise info on modeling concepts, underlying semantics, common modeling scenarios and application features / how to use the app. It should be easy to navigate and explore
|
||||
|
||||
@Computer
|
||||
@Computer
|
||||
|
||||
### Semantic model / metamodel
|
||||
|
||||
Requirements:
|
||||
|
||||
- Textual notation.
|
||||
- Graphical notation.
|
||||
- Constraints and calculations.
|
||||
@@ -658,7 +90,6 @@ Requirements:
|
||||
#### Textual notation
|
||||
|
||||
Requirements:
|
||||
|
||||
- Should not have visual noise and clutter.
|
||||
- Should have means to reduce cognitive load when developing system models.
|
||||
- Should be easily editable by humans. And AI agents.
|
||||
@@ -672,8 +103,9 @@ Long, homogeneous lists in the UI that require user to scroll far or search for
|
||||
|
||||
## Active issues / current guidance
|
||||
|
||||
Right now, the behavior & scenarios UI is hard to use. It contains static / uneditable diagrams, which is highly dubious. In addition, user workflow with the behavior & scenarios UI differ significantly from the other UIs - you can't edit diagrams and instead suppose to click on menus for model development
|
||||
Right now, the behavior & scenarios UI is hard to use. It contains static / uneditable diagrams, which is highly dubious. In addition, user workflow with the behavior & scenarios UI differ significantly from the other UIs - you can't edit diagrams and instead suppose to click on menus for model development
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
The current project state is nowhere near the usability of the original ARCADIA Capella (despite its downfalls) or its functionality / semantics. You should focus on that by studying original ARCADIA Capella very closely and implementing its features in a modern, ergonomic and easy to use way
|
||||
The current project state is nowhere near the usability of the original ARCADIA Capella (despite its downfalls) or its functionality / semantics. You should focus on that by studying original ARCADIA Capella very closely and implementing its features in a modern, ergonomic and easy to use way
|
||||
<!-- END USER-OWNED APPLICATION SPECIFICATION -->
|
||||
|
||||
@@ -854,8 +854,12 @@ impl App {
|
||||
let scenario_selection = self
|
||||
.behavior
|
||||
.scenario
|
||||
.created_selection(&command)
|
||||
.or_else(|| self.behavior.topology.created_selection(&command));
|
||||
.created_selection(self.project(), &command)
|
||||
.or_else(|| {
|
||||
self.behavior
|
||||
.topology
|
||||
.created_selection(self.project(), &command)
|
||||
});
|
||||
match self.document.execute(command) {
|
||||
Ok(selected) => {
|
||||
if let Some(created) = created {
|
||||
@@ -1031,8 +1035,10 @@ impl App {
|
||||
window::close_requests().map(|id| Message::Request(Pending::Close(id))),
|
||||
window::resize_events().map(|(_, size)| Message::WindowResized(size)),
|
||||
architecture_authoring::subscription(self),
|
||||
behavior::creation::subscription(self.behavior.creation.has_pending())
|
||||
.map(|()| Message::Escape),
|
||||
behavior::creation::subscription(
|
||||
self.behavior.creation.has_pending() || self.behavior.source_active(),
|
||||
)
|
||||
.map(|()| Message::Escape),
|
||||
iced::event::listen_with(|event, status, _| {
|
||||
let iced::Event::Keyboard(keyboard::Event::KeyPressed {
|
||||
key,
|
||||
@@ -1519,6 +1525,37 @@ impl App {
|
||||
return Task::none();
|
||||
}
|
||||
match mutation {
|
||||
CanvasEvent::First(_, tool) => {
|
||||
let empty = match tool {
|
||||
scenario::Tool::Lifeline => !self
|
||||
.project()
|
||||
.children(context.scenario)
|
||||
.any(|e| e.kind() == Kind::Lifeline),
|
||||
scenario::Tool::Message | scenario::Tool::Action => {
|
||||
self.project()
|
||||
.children(context.scenario)
|
||||
.any(|e| e.kind() == Kind::Lifeline)
|
||||
&& !self
|
||||
.project()
|
||||
.children(context.scenario)
|
||||
.any(|e| e.kind() == Kind::Occurrence)
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
if !empty {
|
||||
self.status="This scenario already has content. Use its current authoring tools.".into();
|
||||
return Task::none();
|
||||
}
|
||||
let mut state = std::mem::take(&mut self.behavior.scenario);
|
||||
let result = state.update(
|
||||
self.project(),
|
||||
scenario::Event::Start(context.scenario, tool),
|
||||
);
|
||||
self.behavior.scenario = state;
|
||||
if let Err(error) = result {
|
||||
self.status = error;
|
||||
}
|
||||
}
|
||||
CanvasEvent::BeginOccurrence {
|
||||
tool,
|
||||
slot,
|
||||
@@ -1754,7 +1791,15 @@ impl App {
|
||||
return self.update(Message::Add(child));
|
||||
}
|
||||
Message::Escape => {
|
||||
if self.behavior.creation.has_pending() {
|
||||
if self.behavior.source_back() {
|
||||
self.status =
|
||||
"Returned to the unchanged parent form; no source was created.".into();
|
||||
return Task::none();
|
||||
}
|
||||
if self.behavior.source_active() {
|
||||
self.behavior.acknowledge_commit();
|
||||
self.status = "Behavior form cancelled; no staged source was created.".into();
|
||||
} else if self.behavior.creation.has_pending() {
|
||||
self.behavior.creation.acknowledge_commit();
|
||||
self.status = "Behavior creation cancelled".into();
|
||||
}
|
||||
@@ -2321,10 +2366,13 @@ impl App {
|
||||
self.status = "Apply or cancel the current draft before starting a new behavior. Your inputs are retained.".into();
|
||||
return Task::none();
|
||||
}
|
||||
if !creating && event.starts_form() && !self.behavior.has_pending() && !self.apply()
|
||||
if (event.starts_form() || (event.is_source() && !event.is_source_back()))
|
||||
&& (self.source_dirty() || self.draft_dirty())
|
||||
{
|
||||
self.status="Apply or cancel the other editors before starting this form. Your inputs are retained.".into();
|
||||
return Task::none();
|
||||
}
|
||||
let source_was_open = self.behavior.source_open();
|
||||
if event.is_submit() && (self.source_dirty() || self.draft_dirty()) {
|
||||
self.status = "Revert the other drafts before applying the behavior form. Your inputs are retained.".into();
|
||||
return Task::none();
|
||||
@@ -2342,6 +2390,11 @@ impl App {
|
||||
}
|
||||
}
|
||||
Ok(None) => {
|
||||
if !source_was_open && self.behavior.source_open() {
|
||||
return iced::widget::operation::focus(
|
||||
behavior::source_draft::NAME_INPUT,
|
||||
);
|
||||
}
|
||||
if focus_name {
|
||||
return iced::widget::operation::focus(behavior::creation::NAME_INPUT);
|
||||
}
|
||||
@@ -2537,13 +2590,19 @@ impl App {
|
||||
Message::Undo | Message::Redo => {
|
||||
let redo = matches!(message, Message::Redo);
|
||||
if self.apply() {
|
||||
if redo {
|
||||
self.document.redo();
|
||||
let changed = if redo {
|
||||
self.document.redo()
|
||||
} else {
|
||||
self.document.undo();
|
||||
self.document.undo()
|
||||
};
|
||||
if changed {
|
||||
self.sync();
|
||||
}
|
||||
self.sync();
|
||||
self.status = if redo {
|
||||
self.status = if !changed && redo {
|
||||
"Nothing to redo"
|
||||
} else if !changed {
|
||||
"Nothing to undo"
|
||||
} else if redo {
|
||||
"Model change redone"
|
||||
} else {
|
||||
"Model change undone"
|
||||
|
||||
@@ -214,6 +214,11 @@ impl App {
|
||||
.is_some_and(architecture_authoring::State::inline)
|
||||
{
|
||||
Task::batch([lint, iced::widget::operation::focus("architecture-name")])
|
||||
} else if self.page == Page::Behavior && self.behavior.source_open() {
|
||||
Task::batch([
|
||||
lint,
|
||||
iced::widget::operation::focus(behavior::source_draft::NAME_INPUT),
|
||||
])
|
||||
} else if self.page == Page::Behavior && self.behavior.creation.created().is_some() {
|
||||
Task::batch([
|
||||
lint,
|
||||
|
||||
@@ -14,8 +14,11 @@ use iced::{
|
||||
};
|
||||
use oa_core::*;
|
||||
use std::collections::BTreeMap;
|
||||
#[cfg(test)]
|
||||
mod contextual_source_tests;
|
||||
pub(crate) mod creation;
|
||||
pub(crate) mod scenario;
|
||||
pub(crate) mod source_draft;
|
||||
pub(crate) mod state_canvas;
|
||||
pub(crate) mod state_edit;
|
||||
pub(crate) mod state_menu;
|
||||
@@ -739,6 +742,29 @@ pub enum Event {
|
||||
Submit,
|
||||
}
|
||||
impl Event {
|
||||
pub fn is_source_back(&self) -> bool {
|
||||
matches!(
|
||||
self,
|
||||
Self::Creation(creation::Event::Source(source_draft::Event::Edit(
|
||||
_,
|
||||
source_draft::Edit::Back
|
||||
))) | Self::Scenario(scenario::Event::Source(source_draft::Event::Edit(
|
||||
_,
|
||||
source_draft::Edit::Back
|
||||
))) | Self::Topology(topology::Event::Source(source_draft::Event::Edit(
|
||||
_,
|
||||
source_draft::Edit::Back
|
||||
)))
|
||||
)
|
||||
}
|
||||
pub fn is_source(&self) -> bool {
|
||||
matches!(
|
||||
self,
|
||||
Self::Creation(creation::Event::Source(_))
|
||||
| Self::Scenario(scenario::Event::Source(_))
|
||||
| Self::Topology(topology::Event::Source(_))
|
||||
)
|
||||
}
|
||||
pub fn starts_form(&self) -> bool {
|
||||
matches!(
|
||||
self,
|
||||
@@ -869,6 +895,18 @@ impl State {
|
||||
|
||||
/// Clear the active form after its prepared command commits successfully.
|
||||
/// Rejected commands must leave the form available for repair and retry.
|
||||
pub fn source_active(&self) -> bool {
|
||||
self.creation.source_active()
|
||||
|| self.scenario.source_active()
|
||||
|| self.topology.source_active()
|
||||
}
|
||||
pub fn source_open(&self) -> bool {
|
||||
self.creation.source_open() || self.scenario.source_open() || self.topology.source_open()
|
||||
}
|
||||
pub fn source_back(&mut self) -> bool {
|
||||
self.creation.source_back() || self.scenario.source_back() || self.topology.source_back()
|
||||
}
|
||||
|
||||
pub fn acknowledge_commit(&mut self) {
|
||||
self.creation.acknowledge_commit();
|
||||
self.topology.acknowledge_commit();
|
||||
@@ -916,6 +954,40 @@ pub fn view(app: &App) -> Element<'_, Message> {
|
||||
if let Some(card) = app.behavior.creation.view(p) {
|
||||
return card.map(|event| Message::Behavior(Event::Creation(event)));
|
||||
}
|
||||
if let Some(owner) = app.behavior.pending_owner() {
|
||||
let kind = p.elements.get(&owner).map(oa_core::Element::kind);
|
||||
let unavailable = p.layer_of(owner) != Some(app.layer)
|
||||
|| (app.behavior.scenario.pending_owner().is_some() && kind != Some(Kind::Scenario))
|
||||
|| (app.behavior.topology.pending_owner().is_some()
|
||||
&& !matches!(kind, Some(Kind::Process | Kind::FunctionalChain)));
|
||||
if unavailable {
|
||||
let mut out=column![text("The pending behavior owner is unavailable").size(20),text("Your inputs are retained. Return from the source form or cancel this parent draft before choosing another behavior.").size(13)].spacing(12);
|
||||
if let Some(name) = app
|
||||
.behavior
|
||||
.scenario
|
||||
.pending_name()
|
||||
.or_else(|| app.behavior.topology.pending_name())
|
||||
{
|
||||
out =
|
||||
out.push(text(format!("Pending consumer name: {}", short(name, 80))).size(14));
|
||||
}
|
||||
if let Some(child) = app.behavior.scenario.source_view(p) {
|
||||
out = out.push(child.map(|e| Message::Behavior(Event::Scenario(e))));
|
||||
} else if let Some(child) = app.behavior.topology.source_view(p) {
|
||||
out = out.push(child.map(|e| Message::Behavior(Event::Topology(e))));
|
||||
} else {
|
||||
let cancel = if app.behavior.scenario.pending_owner().is_some() {
|
||||
Event::Scenario(scenario::Event::Cancel)
|
||||
} else if app.behavior.topology.pending_owner().is_some() {
|
||||
Event::Topology(topology::Event::Cancel)
|
||||
} else {
|
||||
Event::States(states::Event::Cancel)
|
||||
};
|
||||
out = out.push(button("Cancel retained draft").on_press(Message::Behavior(cancel)));
|
||||
}
|
||||
return container(out).padding(16).width(Fill).height(Fill).into();
|
||||
}
|
||||
}
|
||||
let choices = p
|
||||
.elements
|
||||
.values()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -94,6 +94,7 @@ impl std::fmt::Display for CanvasTool {
|
||||
}
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum CanvasEvent {
|
||||
First(Context, Tool),
|
||||
Scrolled(Context, ScrollArea, iced::Vector),
|
||||
Restored(Context, Id, ScrollArea, iced::Vector),
|
||||
Viewport(Context, Size),
|
||||
@@ -132,7 +133,8 @@ pub enum ScrollArea {
|
||||
impl CanvasEvent {
|
||||
pub fn context(&self) -> Context {
|
||||
match self {
|
||||
Self::Scrolled(context, _, _)
|
||||
Self::First(context, _)
|
||||
| Self::Scrolled(context, _, _)
|
||||
| Self::Restored(context, ..)
|
||||
| Self::Viewport(context, _)
|
||||
| Self::Zoom(context, _)
|
||||
@@ -162,6 +164,7 @@ impl std::fmt::Display for Operator {
|
||||
}
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Event {
|
||||
Source(super::source_draft::Event),
|
||||
Start(Id, Tool),
|
||||
Cancel,
|
||||
Submit,
|
||||
@@ -240,6 +243,13 @@ struct CallChoiceContext {
|
||||
#[derive(Clone, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct Draft {
|
||||
#[serde(default)]
|
||||
source: super::source_draft::State,
|
||||
#[serde(default = "Id::new_v4")]
|
||||
invocation: Id,
|
||||
#[serde(default)]
|
||||
source_origin: Option<(Id, oa_core::Element)>,
|
||||
|
||||
owner: Id,
|
||||
parent: Id,
|
||||
before: Option<Id>,
|
||||
@@ -272,6 +282,28 @@ struct Draft {
|
||||
choice_page: usize,
|
||||
}
|
||||
impl State {
|
||||
pub(super) fn pending_name(&self) -> Option<&str> {
|
||||
self.draft.as_ref().map(|d| d.name.as_str())
|
||||
}
|
||||
pub(super) fn source_view<'a>(&'a self, p: &'a Project) -> Option<iced::Element<'a, Event>> {
|
||||
self.draft
|
||||
.as_ref()?
|
||||
.source
|
||||
.view(p)
|
||||
.map(|v| v.map(Event::Source))
|
||||
}
|
||||
|
||||
pub fn source_active(&self) -> bool {
|
||||
self.draft.as_ref().is_some_and(|d| d.source.engaged())
|
||||
}
|
||||
|
||||
pub fn source_open(&self) -> bool {
|
||||
self.draft.as_ref().is_some_and(|d| d.source.is_open())
|
||||
}
|
||||
pub fn source_back(&mut self) -> bool {
|
||||
self.draft.as_mut().is_some_and(|d| d.source.back())
|
||||
}
|
||||
|
||||
pub(crate) fn enter(&mut self, document: Id, owner: Id) {
|
||||
if self.presentation.identity != Some((document, owner)) {
|
||||
self.presentation = workspace::Presentation {
|
||||
@@ -452,8 +484,16 @@ impl State {
|
||||
}
|
||||
cached.as_ref().unwrap().1.clone()
|
||||
}
|
||||
pub(crate) fn created_selection(&self, command: &Command) -> Option<Id> {
|
||||
pub(crate) fn created_selection(&self, p: &Project, command: &Command) -> Option<Id> {
|
||||
let draft = self.draft.as_ref()?;
|
||||
if self
|
||||
.draft
|
||||
.as_ref()
|
||||
.is_some_and(|d| d.source.label(d.target).is_some())
|
||||
&& self.prepare_pending(p).ok().as_ref() != Some(command)
|
||||
{
|
||||
return None;
|
||||
}
|
||||
fn created(command: &Command, parent: Id) -> Option<Id> {
|
||||
match command {
|
||||
Command::CreateElement(element) if element.parent == Some(parent) => {
|
||||
@@ -568,6 +608,61 @@ impl State {
|
||||
}
|
||||
|
||||
pub fn update(&mut self, p: &Project, event: Event) -> Result<Option<Command>, String> {
|
||||
if let Event::Source(event) = event {
|
||||
if self
|
||||
.draft
|
||||
.as_mut()
|
||||
.ok_or("Start the consumer form first.")?
|
||||
.source
|
||||
.dismiss(&event)?
|
||||
{
|
||||
return Ok(None);
|
||||
}
|
||||
let d = self
|
||||
.draft
|
||||
.as_ref()
|
||||
.ok_or("Start the consumer form first.")?;
|
||||
if d.tool != Tool::Lifeline {
|
||||
return Err("This reference does not support staged source creation.".into());
|
||||
}
|
||||
if d.source_origin.as_ref().is_some_and(|(document, owner)| {
|
||||
*document != p.id || p.elements.get(&d.owner) != Some(owner)
|
||||
}) {
|
||||
return Err("The original consumer changed. Cancel and reopen its form; the current draft is retained.".into());
|
||||
}
|
||||
if d.source_origin.is_none() && d.source.engaged() {
|
||||
return Err("The recovered source draft has no original document binding. Go Back or cancel it.".into());
|
||||
}
|
||||
let mut next = d.clone();
|
||||
if next.source_origin.is_none() && matches!(&event, super::source_draft::Event::Open(_))
|
||||
{
|
||||
next.source_origin = Some((
|
||||
p.id,
|
||||
p.elements
|
||||
.get(&d.owner)
|
||||
.ok_or("The consumer owner no longer exists.")?
|
||||
.clone(),
|
||||
));
|
||||
}
|
||||
if let Some(id) = next.source.update(
|
||||
p,
|
||||
super::source_draft::Scope::Lifeline {
|
||||
owner: d.owner,
|
||||
viewpoint: viewpoint(p, d.owner),
|
||||
},
|
||||
d.invocation,
|
||||
event,
|
||||
)? {
|
||||
next.target = Some(id);
|
||||
next.command(p)?;
|
||||
}
|
||||
self.draft = Some(next);
|
||||
return Ok(None);
|
||||
}
|
||||
if self.source_open() && !matches!(&event, Event::Cancel) {
|
||||
return Err("Use the new source or go Back before editing the parent form.".into());
|
||||
}
|
||||
|
||||
if self.draft.is_some() && matches!(&event, Event::Start(..)) {
|
||||
return Err(PENDING_DRAFT.into());
|
||||
}
|
||||
@@ -577,6 +672,9 @@ impl State {
|
||||
return Err("Choose a scenario.".into());
|
||||
}
|
||||
self.draft = Some(Draft {
|
||||
source: Default::default(),
|
||||
invocation: Id::new_v4(),
|
||||
source_origin: Some((p.id, p.elements[&owner].clone())),
|
||||
owner,
|
||||
parent: owner,
|
||||
before: None,
|
||||
@@ -940,7 +1038,14 @@ fn valid_body_choice(p: &Project, owner: Id, body: OccurrenceBody) -> bool {
|
||||
execute_batch(p, &[Command::CreateElement(e)]).is_ok()
|
||||
}
|
||||
fn sources(p: &Project, d: &Draft) -> Vec<Choice> {
|
||||
let layer = p.elements[&d.owner].layer();
|
||||
let Some(owner) = p
|
||||
.elements
|
||||
.get(&d.owner)
|
||||
.filter(|e| e.kind() == Kind::Scenario)
|
||||
else {
|
||||
return vec![];
|
||||
};
|
||||
let layer = owner.layer();
|
||||
let mut values: Vec<_> = p
|
||||
.elements
|
||||
.values()
|
||||
@@ -1256,6 +1361,28 @@ impl Draft {
|
||||
e
|
||||
}
|
||||
fn command(&self, p: &Project) -> Result<Command, String> {
|
||||
if self.source.engaged()
|
||||
&& self.source_origin.as_ref().is_none_or(|(document, owner)| {
|
||||
*document != p.id || p.elements.get(&self.owner) != Some(owner)
|
||||
})
|
||||
{
|
||||
return Err("The original consumer document or owner changed. Cancel and reopen its form; your draft is retained.".into());
|
||||
}
|
||||
self.source.check_scope(
|
||||
super::source_draft::Scope::Lifeline {
|
||||
owner: self.owner,
|
||||
viewpoint: viewpoint(p, self.owner),
|
||||
},
|
||||
self.target,
|
||||
)?;
|
||||
let preview = self.source.preview(p, self.target)?;
|
||||
let command = self.consumer_command(preview.as_ref().unwrap_or(p))?;
|
||||
self.source.combine(p, self.target, command)
|
||||
}
|
||||
fn consumer_command(&self, p: &Project) -> Result<Command, String> {
|
||||
if p.elements.get(&self.owner).map(oa_core::Element::kind) != Some(Kind::Scenario) {
|
||||
return Err("The scenario no longer exists. Cancel or restore its owner.".into());
|
||||
}
|
||||
if !parents(p, self.owner).iter().any(|c| c.id == self.parent) {
|
||||
return Err("Choose this scenario or one of its operands as destination.".into());
|
||||
}
|
||||
@@ -1266,6 +1393,8 @@ impl Draft {
|
||||
.unwrap_or(self.tool.label());
|
||||
let name = if self.name.trim().is_empty() {
|
||||
default
|
||||
} else if self.source.label(self.target).is_some() {
|
||||
self.name.as_str()
|
||||
} else {
|
||||
self.name.trim()
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -38,6 +38,7 @@ impl Tool {
|
||||
}
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Event {
|
||||
Source(super::source_draft::Event),
|
||||
Start(Id, Tool, Option<Id>),
|
||||
Cancel,
|
||||
Submit,
|
||||
@@ -90,15 +91,22 @@ pub struct State {
|
||||
selected_context: Option<oa_core::topology_context::ContextAddress>,
|
||||
shelf: Option<Shelf>,
|
||||
}
|
||||
#[derive(Default, serde::Serialize, serde::Deserialize)]
|
||||
#[derive(Clone, Default, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct Browser {
|
||||
search: String,
|
||||
page: usize,
|
||||
}
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
#[derive(Clone, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct Draft {
|
||||
#[serde(default)]
|
||||
source: super::source_draft::State,
|
||||
#[serde(default = "Id::new_v4")]
|
||||
invocation: Id,
|
||||
#[serde(default)]
|
||||
source_origin: Option<(Id, oa_core::Element)>,
|
||||
|
||||
#[serde(with = "recovery_insertion")]
|
||||
insertion: Insertion,
|
||||
fixed: bool,
|
||||
@@ -117,6 +125,28 @@ struct Draft {
|
||||
contextual: Option<contextual::Draft>,
|
||||
}
|
||||
impl State {
|
||||
pub(super) fn pending_name(&self) -> Option<&str> {
|
||||
self.draft.as_ref().map(|d| d.name.as_str())
|
||||
}
|
||||
pub(super) fn source_view<'a>(&'a self, p: &'a Project) -> Option<iced::Element<'a, Event>> {
|
||||
self.draft
|
||||
.as_ref()?
|
||||
.source
|
||||
.view(p)
|
||||
.map(|v| v.map(Event::Source))
|
||||
}
|
||||
|
||||
pub fn source_active(&self) -> bool {
|
||||
self.draft.as_ref().is_some_and(|d| d.source.engaged())
|
||||
}
|
||||
|
||||
pub fn source_open(&self) -> bool {
|
||||
self.draft.as_ref().is_some_and(|d| d.source.is_open())
|
||||
}
|
||||
pub fn source_back(&mut self) -> bool {
|
||||
self.draft.as_mut().is_some_and(|d| d.source.back())
|
||||
}
|
||||
|
||||
pub(super) fn recovery_snapshot(&self) -> Result<Option<serde_json::Value>, String> {
|
||||
self.draft
|
||||
.as_ref()
|
||||
@@ -152,6 +182,58 @@ impl State {
|
||||
}
|
||||
|
||||
pub fn update(&mut self, p: &Project, event: Event) -> Result<Option<Command>, String> {
|
||||
if let Event::Source(event) = event {
|
||||
if self
|
||||
.draft
|
||||
.as_mut()
|
||||
.ok_or("Start the consumer form first.")?
|
||||
.source
|
||||
.dismiss(&event)?
|
||||
{
|
||||
return Ok(None);
|
||||
}
|
||||
let d = self
|
||||
.draft
|
||||
.as_ref()
|
||||
.ok_or("Start the consumer form first.")?;
|
||||
if d.tool != Tool::Work {
|
||||
return Err("This reference does not support staged source creation.".into());
|
||||
}
|
||||
if d.source_origin.as_ref().is_some_and(|(document, owner)| {
|
||||
*document != p.id || p.elements.get(&d.owner) != Some(owner)
|
||||
}) {
|
||||
return Err("The original consumer changed. Cancel and reopen its form; the current draft is retained.".into());
|
||||
}
|
||||
if d.source_origin.is_none() && d.source.engaged() {
|
||||
return Err("The recovered source draft has no original document binding. Go Back or cancel it.".into());
|
||||
}
|
||||
let mut next = d.clone();
|
||||
if next.source_origin.is_none() && matches!(&event, super::source_draft::Event::Open(_))
|
||||
{
|
||||
next.source_origin = Some((
|
||||
p.id,
|
||||
p.elements
|
||||
.get(&d.owner)
|
||||
.ok_or("The consumer owner no longer exists.")?
|
||||
.clone(),
|
||||
));
|
||||
}
|
||||
if let Some(id) = next.source.update(
|
||||
p,
|
||||
super::source_draft::Scope::Work { owner: d.owner },
|
||||
d.invocation,
|
||||
event,
|
||||
)? {
|
||||
next.target = Some(id);
|
||||
next.command(p)?;
|
||||
}
|
||||
self.draft = Some(next);
|
||||
return Ok(None);
|
||||
}
|
||||
if self.source_open() && !matches!(&event, Event::Cancel) {
|
||||
return Err("Use the new source or go Back before editing the parent form.".into());
|
||||
}
|
||||
|
||||
if self.draft.is_some() && matches!(&event, Event::Start(..)) {
|
||||
return Err(PENDING_DRAFT.into());
|
||||
}
|
||||
@@ -184,6 +266,9 @@ impl State {
|
||||
}
|
||||
});
|
||||
self.draft = Some(Draft {
|
||||
source: Default::default(),
|
||||
invocation: Id::new_v4(),
|
||||
source_origin: Some((p.id, p.elements[&owner].clone())),
|
||||
insertion: Insertion::default(),
|
||||
fixed: false,
|
||||
browsers: Default::default(),
|
||||
@@ -508,6 +593,22 @@ fn link(p: &Project, source: Id, target: Id, guard: &str) -> Command {
|
||||
}
|
||||
impl Draft {
|
||||
fn command(&self, p: &Project) -> Result<Command, String> {
|
||||
if self.source.engaged()
|
||||
&& self.source_origin.as_ref().is_none_or(|(document, owner)| {
|
||||
*document != p.id || p.elements.get(&self.owner) != Some(owner)
|
||||
})
|
||||
{
|
||||
return Err("The original consumer document or owner changed. Cancel and reopen its form; your draft is retained.".into());
|
||||
}
|
||||
self.source.check_scope(
|
||||
super::source_draft::Scope::Work { owner: self.owner },
|
||||
self.target,
|
||||
)?;
|
||||
let preview = self.source.preview(p, self.target)?;
|
||||
let command = self.consumer_command(preview.as_ref().unwrap_or(p))?;
|
||||
self.source.combine(p, self.target, command)
|
||||
}
|
||||
fn consumer_command(&self, p: &Project) -> Result<Command, String> {
|
||||
let owner = p
|
||||
.elements
|
||||
.get(&self.owner)
|
||||
@@ -615,6 +716,8 @@ impl Draft {
|
||||
});
|
||||
let name = if self.name.trim().is_empty() {
|
||||
default_name
|
||||
} else if self.source.label(self.target).is_some() {
|
||||
self.name.as_str()
|
||||
} else {
|
||||
self.name.trim()
|
||||
};
|
||||
@@ -1587,6 +1690,9 @@ mod tests {
|
||||
}
|
||||
fn branch(owner: Id, a: Id, b: Id, before: Id, after: Id) -> Draft {
|
||||
Draft {
|
||||
source: Default::default(),
|
||||
invocation: Id::new_v4(),
|
||||
source_origin: None,
|
||||
insertion: Insertion::default(),
|
||||
fixed: false,
|
||||
browsers: Default::default(),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -206,8 +206,16 @@ impl State {
|
||||
}
|
||||
None
|
||||
}
|
||||
pub(crate) fn created_selection(&self, command: &Command) -> Option<Id> {
|
||||
pub(crate) fn created_selection(&self, p: &Project, command: &Command) -> Option<Id> {
|
||||
let owner = self.pending_owner()?;
|
||||
if self
|
||||
.draft
|
||||
.as_ref()
|
||||
.is_some_and(|d| d.source.label(d.target).is_some())
|
||||
&& self.prepare_pending(p).ok().as_ref() != Some(command)
|
||||
{
|
||||
return None;
|
||||
}
|
||||
if let Command::CreateRelation(r) | Command::EditRelation(_, r) = command
|
||||
&& matches!(&r.body, RelationBody::ContextualLink { owner: caller, .. } if *caller == owner)
|
||||
{
|
||||
|
||||
@@ -369,6 +369,25 @@ pub(super) fn view<'a>(app: &'a App, owner: Id, out: Column<'a, Message>) -> Ele
|
||||
.width(Fill)
|
||||
.height(Fill)
|
||||
.style(style::card);
|
||||
if !pending && !p.children(owner).any(|e| is_contribution(p, owner, e.id)) {
|
||||
let title = if p.layer_of(owner) == Some(Layer::Oa) {
|
||||
"Add first activity contribution"
|
||||
} else {
|
||||
"Add first function contribution"
|
||||
};
|
||||
header = header.push(button(title).on_press_maybe(
|
||||
(!app.behavior.has_pending() && !app.draft_dirty() && !app.source_dirty()).then(
|
||||
|| {
|
||||
Message::TopologyCanvas(CanvasEvent::Begin {
|
||||
context,
|
||||
tool: Tool::Work,
|
||||
control: ControlKind::Choice,
|
||||
insertion: Insertion::default(),
|
||||
})
|
||||
},
|
||||
),
|
||||
));
|
||||
}
|
||||
let details: Element<'_, Message> = match state.shelf {
|
||||
Some(Shelf::Tools) => controls.into(),
|
||||
_ => navigation.push(text("Full qualified identities and definition actions appear here for the selected contribution or link.").size(11)).into(),
|
||||
@@ -383,201 +402,223 @@ pub(super) fn view<'a>(app: &'a App, owner: Id, out: Column<'a, Message>) -> Ele
|
||||
};
|
||||
let mut form_panel: Element<'_, Message> = iced::widget::Space::new().height(0).into();
|
||||
if let Some(d) = state.draft.as_ref().filter(|d| d.owner == owner) {
|
||||
let mut form = column![text(d.tool.title()).size(16)].spacing(8);
|
||||
if let Some(contextual) = &d.contextual {
|
||||
form = form
|
||||
.push(
|
||||
text_input("Link name (retain current when blank)", &d.name)
|
||||
.on_input(|v| event(Event::Name(v)))
|
||||
.padding(8)
|
||||
.size(12),
|
||||
)
|
||||
.push(super::contextual::view(p, owner, contextual));
|
||||
if let Some(child) = d.source.view(p) {
|
||||
form_panel = column![
|
||||
text(format!(
|
||||
"Consumer name: {}",
|
||||
crate::views::short(&d.name, 60)
|
||||
))
|
||||
.size(12),
|
||||
child.map(|e| event(Event::Source(e)))
|
||||
]
|
||||
.spacing(6)
|
||||
.height(Fill)
|
||||
.into();
|
||||
} else {
|
||||
if let Some(link) = d.insertion.link.and_then(|id| p.relations.get(&id)) {
|
||||
let guard = if let RelationBody::SequenceLink { guard, .. } = &link.body {
|
||||
guard.as_str()
|
||||
} else {
|
||||
""
|
||||
};
|
||||
form = form.push(label(format!(
|
||||
"Insert on {} → {} · preserve path identity and condition [{}]",
|
||||
p.named(link.source()),
|
||||
p.named(link.target()),
|
||||
guard
|
||||
)));
|
||||
} else if d.fixed && ordered {
|
||||
form = form.push(label(match (d.before, d.after) {
|
||||
(Some(before), Some(after)) => format!(
|
||||
"Insert between {} → {} · preserve the ordered path",
|
||||
p.named(before),
|
||||
p.named(after)
|
||||
),
|
||||
(Some(before), None) => format!("Continue after {}", p.named(before)),
|
||||
(None, Some(after)) => format!("Insert before {}", p.named(after)),
|
||||
_ => "Start the ordered path".into(),
|
||||
}));
|
||||
} else if d.fixed
|
||||
&& d.tool == Tool::Exchange
|
||||
&& let Some(before) = d.before
|
||||
{
|
||||
form = form.push(label(format!(
|
||||
"Append after {} → new exchange · Create adds an explicit sequence link",
|
||||
p.named(before)
|
||||
)));
|
||||
} else if d.fixed && d.tool != Tool::Connect {
|
||||
form = form.push(label(
|
||||
d.insertion
|
||||
.before
|
||||
.map_or("Append an unconnected contribution".into(), |id| {
|
||||
format!("Unconnected contribution before {}", p.named(id))
|
||||
}),
|
||||
));
|
||||
}
|
||||
if !legacy_order(p, owner).is_empty() {
|
||||
form = form.push(label(
|
||||
let mut form = column![text(d.tool.title()).size(16)].spacing(8);
|
||||
if let Some(contextual) = &d.contextual {
|
||||
form = form
|
||||
.push(
|
||||
text_input("Link name (retain current when blank)", &d.name)
|
||||
.on_input(|v| event(Event::Name(v)))
|
||||
.padding(8)
|
||||
.size(12),
|
||||
)
|
||||
.push(super::contextual::view(p, owner, contextual));
|
||||
} else {
|
||||
if let Some(link) = d.insertion.link.and_then(|id| p.relations.get(&id)) {
|
||||
let guard = if let RelationBody::SequenceLink { guard, .. } = &link.body {
|
||||
guard.as_str()
|
||||
} else {
|
||||
""
|
||||
};
|
||||
form = form.push(label(format!(
|
||||
"Insert on {} → {} · preserve path identity and condition [{}]",
|
||||
p.named(link.source()),
|
||||
p.named(link.target()),
|
||||
guard
|
||||
)));
|
||||
} else if d.fixed && ordered {
|
||||
form = form.push(label(match (d.before, d.after) {
|
||||
(Some(before), Some(after)) => format!(
|
||||
"Insert between {} → {} · preserve the ordered path",
|
||||
p.named(before),
|
||||
p.named(after)
|
||||
),
|
||||
(Some(before), None) => format!("Continue after {}", p.named(before)),
|
||||
(None, Some(after)) => format!("Insert before {}", p.named(after)),
|
||||
_ => "Start the ordered path".into(),
|
||||
}));
|
||||
} else if d.fixed
|
||||
&& d.tool == Tool::Exchange
|
||||
&& let Some(before) = d.before
|
||||
{
|
||||
form = form.push(label(format!(
|
||||
"Append after {} → new exchange · Create adds an explicit sequence link",
|
||||
p.named(before)
|
||||
)));
|
||||
} else if d.fixed && d.tool != Tool::Connect {
|
||||
form = form.push(label(
|
||||
d.insertion
|
||||
.before
|
||||
.map_or("Append an unconnected contribution".into(), |id| {
|
||||
format!("Unconnected contribution before {}", p.named(id))
|
||||
}),
|
||||
));
|
||||
}
|
||||
if d.tool == Tool::Work {
|
||||
if let Some(title) = d.source.label(d.target) {
|
||||
form = form.push(label(title)).push(label("Create commits the new work and contribution together at the chosen path position."));
|
||||
}
|
||||
form = form.push(button("Create new source…").on_press(event(Event::Source(
|
||||
super::super::source_draft::Event::Open(d.invocation),
|
||||
))));
|
||||
}
|
||||
if !legacy_order(p, owner).is_empty() {
|
||||
form = form.push(label(
|
||||
"This edit preserves the ordered path as explicit links in the same undo step.",
|
||||
));
|
||||
}
|
||||
if matches!(
|
||||
d.tool,
|
||||
Tool::Work | Tool::Exchange | Tool::Reuse | Tool::Branch
|
||||
) {
|
||||
let choices = targets(p, owner, d.tool)
|
||||
.into_iter()
|
||||
.filter(|c| compatible_source(p, d, c.id))
|
||||
.collect();
|
||||
if d.tool == Tool::Branch {
|
||||
form = form.push(label("First path work"));
|
||||
}
|
||||
form = form.push(picker(
|
||||
choices,
|
||||
d,
|
||||
0,
|
||||
d.target,
|
||||
if matches!(
|
||||
d.tool,
|
||||
Tool::Work | Tool::Exchange | Tool::Reuse | Tool::Branch
|
||||
) {
|
||||
let choices = targets(p, owner, d.tool)
|
||||
.into_iter()
|
||||
.filter(|c| compatible_source(p, d, c.id))
|
||||
.collect();
|
||||
if d.tool == Tool::Branch {
|
||||
"Choose first path work…"
|
||||
form = form.push(label("First path work"));
|
||||
}
|
||||
form = form.push(picker(
|
||||
choices,
|
||||
d,
|
||||
0,
|
||||
d.target,
|
||||
if d.tool == Tool::Branch {
|
||||
"Choose first path work…"
|
||||
} else {
|
||||
"Choose existing source…"
|
||||
},
|
||||
Event::Target,
|
||||
));
|
||||
}
|
||||
if d.tool != Tool::Connect {
|
||||
form = form.push(
|
||||
text_input("Contribution name (defaults to source)", &d.name)
|
||||
.on_input(|v| event(Event::Name(v)))
|
||||
.padding(8)
|
||||
.size(12),
|
||||
);
|
||||
}
|
||||
if matches!(d.tool, Tool::Control | Tool::Branch) {
|
||||
let kinds = if d.tool == Tool::Branch {
|
||||
vec![ControlKind::Choice, ControlKind::Fork]
|
||||
} else {
|
||||
"Choose existing source…"
|
||||
},
|
||||
Event::Target,
|
||||
));
|
||||
}
|
||||
if d.tool != Tool::Connect {
|
||||
form = form.push(
|
||||
text_input("Contribution name (defaults to source)", &d.name)
|
||||
.on_input(|v| event(Event::Name(v)))
|
||||
vec![
|
||||
ControlKind::Choice,
|
||||
ControlKind::Merge,
|
||||
ControlKind::Fork,
|
||||
ControlKind::Join,
|
||||
ControlKind::Loop,
|
||||
]
|
||||
};
|
||||
form = form.push(
|
||||
pick_list(
|
||||
kinds.into_iter().map(ControlChoice).collect::<Vec<_>>(),
|
||||
Some(ControlChoice(d.control)),
|
||||
|v| event(Event::Control(v)),
|
||||
)
|
||||
.padding(8)
|
||||
.text_size(12),
|
||||
);
|
||||
}
|
||||
if d.tool == Tool::Branch {
|
||||
form = form.push(label("Second path work")).push(picker(
|
||||
targets(p, owner, Tool::Work),
|
||||
d,
|
||||
1,
|
||||
d.alternate,
|
||||
"Second path work…",
|
||||
Event::Alternate,
|
||||
));
|
||||
if d.control != ControlKind::Fork {
|
||||
form = form
|
||||
.push(label("First path guard"))
|
||||
.push(
|
||||
text_input("First path guard", &d.guard)
|
||||
.on_input(|v| event(Event::Guard(v)))
|
||||
.padding(8),
|
||||
)
|
||||
.push(label("Second path guard"))
|
||||
.push(
|
||||
text_input("Second path guard (e.g. else)", &d.alternate_guard)
|
||||
.on_input(|v| event(Event::AlternateGuard(v)))
|
||||
.padding(8),
|
||||
);
|
||||
}
|
||||
}
|
||||
if d.fixed {
|
||||
if let (Some(a), Some(b)) = (d.before, d.after) {
|
||||
form = form.push(label(format!("{} → {}", p.named(a), p.named(b))));
|
||||
}
|
||||
} else {
|
||||
form = form
|
||||
.push(label("Preceding contribution"))
|
||||
.push(picker(
|
||||
contributions(p, owner),
|
||||
d,
|
||||
2,
|
||||
d.before,
|
||||
"After contribution…",
|
||||
Event::Before,
|
||||
))
|
||||
.push(button("Clear preceding").on_press(event(Event::ClearBefore)))
|
||||
.push(label("Following contribution"))
|
||||
.push(picker(
|
||||
contributions(p, owner),
|
||||
d,
|
||||
3,
|
||||
d.after,
|
||||
"Before contribution…",
|
||||
Event::After,
|
||||
))
|
||||
.push(button("Clear following").on_press(event(Event::ClearAfter)));
|
||||
}
|
||||
if d.tool != Tool::Branch
|
||||
&& d.insertion.link.is_none()
|
||||
&& (d.before.is_some() || d.tool == Tool::Connect)
|
||||
{
|
||||
form = form.push(
|
||||
text_input(
|
||||
"Path condition (empty remains a Choice / Loop warning)",
|
||||
&d.guard,
|
||||
)
|
||||
.on_input(|v| event(Event::Guard(v)))
|
||||
.padding(8)
|
||||
.size(12),
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
if matches!(d.tool, Tool::Control | Tool::Branch) {
|
||||
let kinds = if d.tool == Tool::Branch {
|
||||
vec![ControlKind::Choice, ControlKind::Fork]
|
||||
let valid = match d.command(p) {
|
||||
Ok(_) => true,
|
||||
Err(problem) => {
|
||||
form = form.push(label(problem));
|
||||
false
|
||||
}
|
||||
};
|
||||
let actions = row![
|
||||
button(if d.contextual.is_some() {
|
||||
"Apply link"
|
||||
} else {
|
||||
vec![
|
||||
ControlKind::Choice,
|
||||
ControlKind::Merge,
|
||||
ControlKind::Fork,
|
||||
ControlKind::Join,
|
||||
ControlKind::Loop,
|
||||
]
|
||||
};
|
||||
form = form.push(
|
||||
pick_list(
|
||||
kinds.into_iter().map(ControlChoice).collect::<Vec<_>>(),
|
||||
Some(ControlChoice(d.control)),
|
||||
|v| event(Event::Control(v)),
|
||||
)
|
||||
.padding(8)
|
||||
.text_size(12),
|
||||
);
|
||||
}
|
||||
if d.tool == Tool::Branch {
|
||||
form = form.push(label("Second path work")).push(picker(
|
||||
targets(p, owner, Tool::Work),
|
||||
d,
|
||||
1,
|
||||
d.alternate,
|
||||
"Second path work…",
|
||||
Event::Alternate,
|
||||
));
|
||||
if d.control != ControlKind::Fork {
|
||||
form = form
|
||||
.push(label("First path guard"))
|
||||
.push(
|
||||
text_input("First path guard", &d.guard)
|
||||
.on_input(|v| event(Event::Guard(v)))
|
||||
.padding(8),
|
||||
)
|
||||
.push(label("Second path guard"))
|
||||
.push(
|
||||
text_input("Second path guard (e.g. else)", &d.alternate_guard)
|
||||
.on_input(|v| event(Event::AlternateGuard(v)))
|
||||
.padding(8),
|
||||
);
|
||||
}
|
||||
}
|
||||
if d.fixed {
|
||||
if let (Some(a), Some(b)) = (d.before, d.after) {
|
||||
form = form.push(label(format!("{} → {}", p.named(a), p.named(b))));
|
||||
}
|
||||
} else {
|
||||
form = form
|
||||
.push(label("Preceding contribution"))
|
||||
.push(picker(
|
||||
contributions(p, owner),
|
||||
d,
|
||||
2,
|
||||
d.before,
|
||||
"After contribution…",
|
||||
Event::Before,
|
||||
))
|
||||
.push(button("Clear preceding").on_press(event(Event::ClearBefore)))
|
||||
.push(label("Following contribution"))
|
||||
.push(picker(
|
||||
contributions(p, owner),
|
||||
d,
|
||||
3,
|
||||
d.after,
|
||||
"Before contribution…",
|
||||
Event::After,
|
||||
))
|
||||
.push(button("Clear following").on_press(event(Event::ClearAfter)));
|
||||
}
|
||||
if d.tool != Tool::Branch
|
||||
&& d.insertion.link.is_none()
|
||||
&& (d.before.is_some() || d.tool == Tool::Connect)
|
||||
{
|
||||
form = form.push(
|
||||
text_input(
|
||||
"Path condition (empty remains a Choice / Loop warning)",
|
||||
&d.guard,
|
||||
)
|
||||
.on_input(|v| event(Event::Guard(v)))
|
||||
.padding(8)
|
||||
.size(12),
|
||||
);
|
||||
}
|
||||
"Create"
|
||||
})
|
||||
.on_press_maybe(valid.then(|| event(Event::Submit))),
|
||||
button("Cancel").on_press(event(Event::Cancel))
|
||||
]
|
||||
.spacing(7);
|
||||
form_panel = editor_panel(actions.into(), form.into());
|
||||
}
|
||||
let valid = match d.command(p) {
|
||||
Ok(_) => true,
|
||||
Err(problem) => {
|
||||
form = form.push(label(problem));
|
||||
false
|
||||
}
|
||||
};
|
||||
let actions = row![
|
||||
button(if d.contextual.is_some() {
|
||||
"Apply link"
|
||||
} else {
|
||||
"Create"
|
||||
})
|
||||
.on_press_maybe(valid.then(|| event(Event::Submit))),
|
||||
button("Cancel").on_press(event(Event::Cancel))
|
||||
]
|
||||
.spacing(7);
|
||||
form_panel = editor_panel(actions.into(), form.into());
|
||||
}
|
||||
panes(diagram, form_panel, pending)
|
||||
}
|
||||
|
||||
+1368
-1367
File diff suppressed because it is too large
Load Diff
@@ -1,147 +1,147 @@
|
||||
use super::artifacts::{Editor, Event, Raw};
|
||||
use super::*;
|
||||
use iced::{
|
||||
Element as View, Fill,
|
||||
widget::{button, checkbox, column, pick_list, row, text, text_editor, text_input},
|
||||
};
|
||||
pub(super) fn pairs<'a>(editor: &'a Editor, p: &'a Project, trace: &'a Trace) -> View<'a, Event> {
|
||||
let mut content=column![text("Artifact links and metadata").size(16),text("Pair links attached to these reviewed owners. Presence is attachment to the owner; taking identified source absence deletes the destination link, while a destination-only link is retained.").size(12),text_input("Filter artifact identities",&editor.search).on_input(Event::Search).padding(7)].spacing(9);
|
||||
for (layer, label, selected) in [
|
||||
(Layer::Oa, "Operational", editor.oa.clone()),
|
||||
(Layer::Sa, "System", editor.sa.clone()),
|
||||
] {
|
||||
content = content.push(text(label).size(12)).push(
|
||||
row![
|
||||
pick_list(editor.choices(p, trace, layer), selected, move |v| {
|
||||
Event::Pick(layer, Some(v))
|
||||
})
|
||||
.placeholder("Choose exact artifact identity")
|
||||
.width(Fill)
|
||||
.padding(7),
|
||||
button("No identity")
|
||||
.padding(7)
|
||||
.on_press(Event::Pick(layer, None))
|
||||
]
|
||||
.spacing(7),
|
||||
);
|
||||
}
|
||||
content.push(row![button("Reserve a new destination counterpart").padding(7).on_press(Event::Reserve),button("Review this exact artifact pair").padding(7).on_press(Event::Stage)].spacing(7).wrap()).push(text("Reservation retains a fresh identity and seeds metadata from the source. It creates nothing until Presence and all seven metadata facets are explicitly reviewed and the combined Apply succeeds. New unrelated links use ordinary artifact creation.").size(11)).padding(iced::Padding::default().right(18)).into()
|
||||
}
|
||||
pub(super) fn candidate<'a>(
|
||||
editor: &'a Editor,
|
||||
p: &'a Project,
|
||||
facet: &'a FacetSelector,
|
||||
) -> Option<View<'a, Event>> {
|
||||
let value = editor.drafts.get(facet)?;
|
||||
let (_, which) = artifacts::parts(facet)?;
|
||||
let mut content =
|
||||
column![text(format!("Final artifact {}", artifacts::field(which)?)).size(12)].spacing(7);
|
||||
match value {
|
||||
Raw::Text(_) if which == ArtifactFacet::Description => {
|
||||
let draft = editor.descriptions.get(facet)?;
|
||||
let facet = facet.clone();
|
||||
content = content.push(
|
||||
text_editor(draft)
|
||||
.height(110)
|
||||
.on_action(move |action| Event::Description(facet.clone(), action)),
|
||||
);
|
||||
}
|
||||
Raw::Text(value) => {
|
||||
let facet = facet.clone();
|
||||
content = content.push(
|
||||
text_input("Exact text", value)
|
||||
.on_input(move |value| Event::Input(facet.clone(), Raw::Text(value)))
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Owner(value) => {
|
||||
let mut choices: Vec<_> = p
|
||||
.identities()
|
||||
.into_iter()
|
||||
.map(|(id, alias)| Choice {
|
||||
id,
|
||||
label: format!("{} · @{alias}", p.named(id)),
|
||||
})
|
||||
.collect();
|
||||
choices.sort_by_cached_key(|c| c.label.to_lowercase());
|
||||
let selected = value.parse::<Id>().ok().map(|id| view::choice(p, id));
|
||||
let raw_facet = facet.clone();
|
||||
let pick_facet = facet.clone();
|
||||
content = content
|
||||
.push(
|
||||
pick_list(choices, selected, move |v: Choice| {
|
||||
Event::Input(pick_facet.clone(), Raw::Owner(v.id.to_string()))
|
||||
})
|
||||
.placeholder("Explicit final owner")
|
||||
.width(Fill)
|
||||
.padding(7),
|
||||
)
|
||||
.push(
|
||||
text_input("Owner identity (retains rejected input)", value)
|
||||
.on_input(move |v| Event::Input(raw_facet.clone(), Raw::Owner(v)))
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Relation(value) => {
|
||||
let facet = facet.clone();
|
||||
let variants = [
|
||||
ArtifactRelation::References,
|
||||
ArtifactRelation::Satisfies,
|
||||
ArtifactRelation::Verifies,
|
||||
ArtifactRelation::Implements,
|
||||
ArtifactRelation::DerivedFrom,
|
||||
];
|
||||
let choices: Vec<_> = variants.into_iter().map(RelationChoice).collect();
|
||||
content = content.push(
|
||||
pick_list(choices, Some(RelationChoice(*value)), move |v| {
|
||||
Event::Input(facet.clone(), Raw::Relation(v.0))
|
||||
})
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Optional {
|
||||
present,
|
||||
text: value,
|
||||
} => {
|
||||
let toggle_facet = facet.clone();
|
||||
let retained = value.clone();
|
||||
let input_facet = facet.clone();
|
||||
let enabled = *present;
|
||||
content = content
|
||||
.push(
|
||||
checkbox(*present)
|
||||
.label("Present (checked with empty text means an explicit empty value)")
|
||||
.on_toggle(move |present| {
|
||||
Event::Input(
|
||||
toggle_facet.clone(),
|
||||
Raw::Optional {
|
||||
present,
|
||||
text: retained.clone(),
|
||||
},
|
||||
)
|
||||
}),
|
||||
)
|
||||
.push(
|
||||
text_input("Retained optional text", value)
|
||||
.on_input(move |text| {
|
||||
Event::Input(
|
||||
input_facet.clone(),
|
||||
Raw::Optional {
|
||||
present: enabled,
|
||||
text,
|
||||
},
|
||||
)
|
||||
})
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
}
|
||||
Some(content.into())
|
||||
}
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
struct RelationChoice(ArtifactRelation);
|
||||
impl std::fmt::Display for RelationChoice {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{:?}", self.0)
|
||||
}
|
||||
}
|
||||
use super::artifacts::{Editor, Event, Raw};
|
||||
use super::*;
|
||||
use iced::{
|
||||
Element as View, Fill,
|
||||
widget::{button, checkbox, column, pick_list, row, text, text_editor, text_input},
|
||||
};
|
||||
pub(super) fn pairs<'a>(editor: &'a Editor, p: &'a Project, trace: &'a Trace) -> View<'a, Event> {
|
||||
let mut content=column![text("Artifact links and metadata").size(16),text("Pair links attached to these reviewed owners. Presence is attachment to the owner; taking identified source absence deletes the destination link, while a destination-only link is retained.").size(12),text_input("Filter artifact identities",&editor.search).on_input(Event::Search).padding(7)].spacing(9);
|
||||
for (layer, label, selected) in [
|
||||
(Layer::Oa, "Operational", editor.oa.clone()),
|
||||
(Layer::Sa, "System", editor.sa.clone()),
|
||||
] {
|
||||
content = content.push(text(label).size(12)).push(
|
||||
row![
|
||||
pick_list(editor.choices(p, trace, layer), selected, move |v| {
|
||||
Event::Pick(layer, Some(v))
|
||||
})
|
||||
.placeholder("Choose exact artifact identity")
|
||||
.width(Fill)
|
||||
.padding(7),
|
||||
button("No identity")
|
||||
.padding(7)
|
||||
.on_press(Event::Pick(layer, None))
|
||||
]
|
||||
.spacing(7),
|
||||
);
|
||||
}
|
||||
content.push(row![button("Reserve a new destination counterpart").padding(7).on_press(Event::Reserve),button("Review this exact artifact pair").padding(7).on_press(Event::Stage)].spacing(7).wrap()).push(text("Reservation retains a fresh identity and seeds metadata from the source. It creates nothing until Presence and all seven metadata facets are explicitly reviewed and the combined Apply succeeds. New unrelated links use ordinary artifact creation.").size(11)).padding(iced::Padding::default().right(18)).into()
|
||||
}
|
||||
pub(super) fn candidate<'a>(
|
||||
editor: &'a Editor,
|
||||
p: &'a Project,
|
||||
facet: &'a FacetSelector,
|
||||
) -> Option<View<'a, Event>> {
|
||||
let value = editor.drafts.get(facet)?;
|
||||
let (_, which) = artifacts::parts(facet)?;
|
||||
let mut content =
|
||||
column![text(format!("Final artifact {}", artifacts::field(which)?)).size(12)].spacing(7);
|
||||
match value {
|
||||
Raw::Text(_) if which == ArtifactFacet::Description => {
|
||||
let draft = editor.descriptions.get(facet)?;
|
||||
let facet = facet.clone();
|
||||
content = content.push(
|
||||
text_editor(draft)
|
||||
.height(110)
|
||||
.on_action(move |action| Event::Description(facet.clone(), action)),
|
||||
);
|
||||
}
|
||||
Raw::Text(value) => {
|
||||
let facet = facet.clone();
|
||||
content = content.push(
|
||||
text_input("Exact text", value)
|
||||
.on_input(move |value| Event::Input(facet.clone(), Raw::Text(value)))
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Owner(value) => {
|
||||
let mut choices: Vec<_> = p
|
||||
.identities()
|
||||
.into_iter()
|
||||
.map(|(id, alias)| Choice {
|
||||
id,
|
||||
label: format!("{} · @{alias}", p.named(id)),
|
||||
})
|
||||
.collect();
|
||||
choices.sort_by_cached_key(|c| c.label.to_lowercase());
|
||||
let selected = value.parse::<Id>().ok().map(|id| view::choice(p, id));
|
||||
let raw_facet = facet.clone();
|
||||
let pick_facet = facet.clone();
|
||||
content = content
|
||||
.push(
|
||||
pick_list(choices, selected, move |v: Choice| {
|
||||
Event::Input(pick_facet.clone(), Raw::Owner(v.id.to_string()))
|
||||
})
|
||||
.placeholder("Explicit final owner")
|
||||
.width(Fill)
|
||||
.padding(7),
|
||||
)
|
||||
.push(
|
||||
text_input("Owner identity (retains rejected input)", value)
|
||||
.on_input(move |v| Event::Input(raw_facet.clone(), Raw::Owner(v)))
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Relation(value) => {
|
||||
let facet = facet.clone();
|
||||
let variants = [
|
||||
ArtifactRelation::References,
|
||||
ArtifactRelation::Satisfies,
|
||||
ArtifactRelation::Verifies,
|
||||
ArtifactRelation::Implements,
|
||||
ArtifactRelation::DerivedFrom,
|
||||
];
|
||||
let choices: Vec<_> = variants.into_iter().map(RelationChoice).collect();
|
||||
content = content.push(
|
||||
pick_list(choices, Some(RelationChoice(*value)), move |v| {
|
||||
Event::Input(facet.clone(), Raw::Relation(v.0))
|
||||
})
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
Raw::Optional {
|
||||
present,
|
||||
text: value,
|
||||
} => {
|
||||
let toggle_facet = facet.clone();
|
||||
let retained = value.clone();
|
||||
let input_facet = facet.clone();
|
||||
let enabled = *present;
|
||||
content = content
|
||||
.push(
|
||||
checkbox(*present)
|
||||
.label("Present (checked with empty text means an explicit empty value)")
|
||||
.on_toggle(move |present| {
|
||||
Event::Input(
|
||||
toggle_facet.clone(),
|
||||
Raw::Optional {
|
||||
present,
|
||||
text: retained.clone(),
|
||||
},
|
||||
)
|
||||
}),
|
||||
)
|
||||
.push(
|
||||
text_input("Retained optional text", value)
|
||||
.on_input(move |text| {
|
||||
Event::Input(
|
||||
input_facet.clone(),
|
||||
Raw::Optional {
|
||||
present: enabled,
|
||||
text,
|
||||
},
|
||||
)
|
||||
})
|
||||
.padding(7),
|
||||
);
|
||||
}
|
||||
}
|
||||
Some(content.into())
|
||||
}
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
struct RelationChoice(ArtifactRelation);
|
||||
impl std::fmt::Display for RelationChoice {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{:?}", self.0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
//! Explicit attachment pair and final destination field controls.
|
||||
use super::{
|
||||
attachments::{Editor, Event, Family},
|
||||
*,
|
||||
};
|
||||
use iced::{
|
||||
Element as View, Fill,
|
||||
widget::{button, column, pick_list, row, text, text_input},
|
||||
};
|
||||
|
||||
pub(super) fn pairs<'a>(
|
||||
editor: &'a Editor,
|
||||
project: &'a Project,
|
||||
trace: &'a Trace,
|
||||
) -> View<'a, Event> {
|
||||
let mut content = column![
|
||||
text("Existing children and relationship endpoints").size(16),
|
||||
text("Choose explicit Operational and System identities. A child's final parent or a relationship's final endpoint is reviewed independently; opening another trace keeps this draft.").size(12),
|
||||
pick_list([Family::Child, Family::Source, Family::Target], Some(editor.family), Event::Family).text_size(12).padding(7).width(Fill),
|
||||
text_input("Filter attachment identities by name or alias", &editor.search).on_input(Event::Search).size(12).padding(7),
|
||||
].spacing(9);
|
||||
for layer in [Layer::Oa, Layer::Sa] {
|
||||
let label = if layer == Layer::Oa {
|
||||
"Operational"
|
||||
} else {
|
||||
"System"
|
||||
};
|
||||
let owner = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
content = content.push(text(format!("{label} owner: {}", project.named(owner))).size(12));
|
||||
content = content.push(
|
||||
row![
|
||||
pick_list(
|
||||
editor.choices(project, trace, layer),
|
||||
editor.selection(layer).cloned(),
|
||||
move |choice| Event::Pick(layer, Some(choice))
|
||||
)
|
||||
.placeholder(format!("Choose an existing {label} identity"))
|
||||
.text_size(12)
|
||||
.padding(7)
|
||||
.width(Fill),
|
||||
button(text("No identity on this side").size(11))
|
||||
.style(crate::style::nav)
|
||||
.padding(7)
|
||||
.on_press(Event::Pick(layer, None)),
|
||||
]
|
||||
.spacing(7),
|
||||
);
|
||||
}
|
||||
content = content.push(
|
||||
button(text("Use exact attachment pair").size(12))
|
||||
.padding(8)
|
||||
.style(crate::style::nav)
|
||||
.on_press(Event::Stage),
|
||||
);
|
||||
content.push(text("Taking an absent relationship endpoint requires an explicit final replacement. New child and relationship creation uses a separate explicit transition mapping.").size(11)).padding(iced::Padding::default().right(18)).into()
|
||||
}
|
||||
|
||||
pub(super) fn candidate<'a>(
|
||||
editor: &'a Editor,
|
||||
project: &'a Project,
|
||||
facet: &'a FacetSelector,
|
||||
layer: Layer,
|
||||
) -> Option<View<'a, Message>> {
|
||||
let draft = editor.drafts.get(facet)?;
|
||||
let (id, _) = attachments::actual_slot(facet, layer)?;
|
||||
let path = attachments::path(project, facet, layer)?;
|
||||
Some(
|
||||
column![
|
||||
text(format!("Destination record: {}", project.named(id))).size(12),
|
||||
crate::forms::scoped(draft, project, &path, attachments::label(facet)),
|
||||
]
|
||||
.spacing(7)
|
||||
.into(),
|
||||
)
|
||||
}
|
||||
//! Explicit attachment pair and final destination field controls.
|
||||
use super::{
|
||||
attachments::{Editor, Event, Family},
|
||||
*,
|
||||
};
|
||||
use iced::{
|
||||
Element as View, Fill,
|
||||
widget::{button, column, pick_list, row, text, text_input},
|
||||
};
|
||||
|
||||
pub(super) fn pairs<'a>(
|
||||
editor: &'a Editor,
|
||||
project: &'a Project,
|
||||
trace: &'a Trace,
|
||||
) -> View<'a, Event> {
|
||||
let mut content = column![
|
||||
text("Existing children and relationship endpoints").size(16),
|
||||
text("Choose explicit Operational and System identities. A child's final parent or a relationship's final endpoint is reviewed independently; opening another trace keeps this draft.").size(12),
|
||||
pick_list([Family::Child, Family::Source, Family::Target], Some(editor.family), Event::Family).text_size(12).padding(7).width(Fill),
|
||||
text_input("Filter attachment identities by name or alias", &editor.search).on_input(Event::Search).size(12).padding(7),
|
||||
].spacing(9);
|
||||
for layer in [Layer::Oa, Layer::Sa] {
|
||||
let label = if layer == Layer::Oa {
|
||||
"Operational"
|
||||
} else {
|
||||
"System"
|
||||
};
|
||||
let owner = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
content = content.push(text(format!("{label} owner: {}", project.named(owner))).size(12));
|
||||
content = content.push(
|
||||
row![
|
||||
pick_list(
|
||||
editor.choices(project, trace, layer),
|
||||
editor.selection(layer).cloned(),
|
||||
move |choice| Event::Pick(layer, Some(choice))
|
||||
)
|
||||
.placeholder(format!("Choose an existing {label} identity"))
|
||||
.text_size(12)
|
||||
.padding(7)
|
||||
.width(Fill),
|
||||
button(text("No identity on this side").size(11))
|
||||
.style(crate::style::nav)
|
||||
.padding(7)
|
||||
.on_press(Event::Pick(layer, None)),
|
||||
]
|
||||
.spacing(7),
|
||||
);
|
||||
}
|
||||
content = content.push(
|
||||
button(text("Use exact attachment pair").size(12))
|
||||
.padding(8)
|
||||
.style(crate::style::nav)
|
||||
.on_press(Event::Stage),
|
||||
);
|
||||
content.push(text("Taking an absent relationship endpoint requires an explicit final replacement. New child and relationship creation uses a separate explicit transition mapping.").size(11)).padding(iced::Padding::default().right(18)).into()
|
||||
}
|
||||
|
||||
pub(super) fn candidate<'a>(
|
||||
editor: &'a Editor,
|
||||
project: &'a Project,
|
||||
facet: &'a FacetSelector,
|
||||
layer: Layer,
|
||||
) -> Option<View<'a, Message>> {
|
||||
let draft = editor.drafts.get(facet)?;
|
||||
let (id, _) = attachments::actual_slot(facet, layer)?;
|
||||
let path = attachments::path(project, facet, layer)?;
|
||||
Some(
|
||||
column![
|
||||
text(format!("Destination record: {}", project.named(id))).size(12),
|
||||
crate::forms::scoped(draft, project, &path, attachments::label(facet)),
|
||||
]
|
||||
.spacing(7)
|
||||
.into(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,350 +1,350 @@
|
||||
//! Closed presence-only adapter. The core independently validates the full final record.
|
||||
use super::*;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub enum Family {
|
||||
Member(ReferenceCollection),
|
||||
Literal,
|
||||
Annotation,
|
||||
Binding,
|
||||
}
|
||||
impl std::fmt::Display for Family {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_str(match self {
|
||||
Self::Member(ReferenceCollection::FunctionInputItems) => "Function input items",
|
||||
Self::Member(ReferenceCollection::FunctionOutputItems) => "Function output items",
|
||||
Self::Member(ReferenceCollection::SignalItems) => "Signal items",
|
||||
Self::Member(ReferenceCollection::CategoryExchanges) => "Category exchanges",
|
||||
Self::Member(ReferenceCollection::ExchangeItems) => "Exchange items",
|
||||
Self::Member(ReferenceCollection::TransitionTriggers) => "Transition triggers",
|
||||
Self::Member(ReferenceCollection::TransitionEffects) => "Transition effects",
|
||||
Self::Member(ReferenceCollection::Constrained) => "Constrained identities",
|
||||
Self::Member(ReferenceCollection::Steps) => "Ordered steps",
|
||||
Self::Member(ReferenceCollection::FragmentBranches) => "Fragment branches",
|
||||
Self::Literal => "Enumeration literals",
|
||||
Self::Annotation => "Message values",
|
||||
Self::Binding => "Scenario lifeline bindings",
|
||||
})
|
||||
}
|
||||
}
|
||||
pub(super) const FAMILIES: [Family; 13] = [
|
||||
Family::Member(ReferenceCollection::Steps),
|
||||
Family::Member(ReferenceCollection::FragmentBranches),
|
||||
Family::Member(ReferenceCollection::FunctionInputItems),
|
||||
Family::Member(ReferenceCollection::FunctionOutputItems),
|
||||
Family::Member(ReferenceCollection::SignalItems),
|
||||
Family::Member(ReferenceCollection::ExchangeItems),
|
||||
Family::Member(ReferenceCollection::CategoryExchanges),
|
||||
Family::Member(ReferenceCollection::TransitionTriggers),
|
||||
Family::Member(ReferenceCollection::TransitionEffects),
|
||||
Family::Member(ReferenceCollection::Constrained),
|
||||
Family::Literal,
|
||||
Family::Annotation,
|
||||
Family::Binding,
|
||||
];
|
||||
pub(super) fn family(facet: &FacetSelector) -> Option<Family> {
|
||||
let family = match facet {
|
||||
FacetSelector::Member { collection, .. } => Family::Member(*collection),
|
||||
FacetSelector::Literal(_) => Family::Literal,
|
||||
FacetSelector::Annotation(_) => Family::Annotation,
|
||||
FacetSelector::Binding(_) => Family::Binding,
|
||||
_ => return None,
|
||||
};
|
||||
FAMILIES.contains(&family).then_some(family)
|
||||
}
|
||||
pub(super) fn supported(facet: &FacetSelector) -> bool {
|
||||
family(facet).is_some()
|
||||
}
|
||||
|
||||
// Fixed paths for the closed collections and the exact enum literal set.
|
||||
// They are selected by the typed facet; callers cannot supply arbitrary paths.
|
||||
pub(super) fn path(value: &Value, family: Family) -> Option<String> {
|
||||
let prefixes = ["/body/Oa/Shared", "/body/Sa/Shared"];
|
||||
let tails: &[&str] = match family {
|
||||
Family::Member(ReferenceCollection::Steps) => {
|
||||
return [
|
||||
"/body/Oa/Process/steps",
|
||||
"/body/Sa/FunctionalChain/steps",
|
||||
"/body/Oa/Shared/Scenario/steps",
|
||||
"/body/Sa/Shared/Scenario/steps",
|
||||
"/body/Oa/Shared/Occurrence/body/Branch/occurrences",
|
||||
"/body/Sa/Shared/Occurrence/body/Branch/occurrences",
|
||||
]
|
||||
.into_iter()
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array))
|
||||
.map(str::to_owned);
|
||||
}
|
||||
Family::Member(ReferenceCollection::FragmentBranches) => {
|
||||
&["Occurrence/body/Fragment/branches"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::FunctionInputItems) => {
|
||||
&["Port/contract/FunctionInput/incoming_items"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::FunctionOutputItems) => {
|
||||
&["Port/contract/FunctionOutput/outgoing_items"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::CategoryExchanges) => &["ExchangeCategory/exchanges"],
|
||||
Family::Member(ReferenceCollection::SignalItems) => &["Event/body/Signal/items"],
|
||||
Family::Member(ReferenceCollection::Constrained) => &["Constraint/constrained"],
|
||||
Family::Literal => &["DataType/definition/Enumeration/literals"],
|
||||
Family::Annotation => &["Occurrence/body/Exchange/values"],
|
||||
Family::Binding => &["Occurrence/body/ScenarioUse/bindings"],
|
||||
Family::Member(ReferenceCollection::ExchangeItems) => {
|
||||
return [
|
||||
"Interaction",
|
||||
"FunctionalExchange",
|
||||
"BoundaryExchange",
|
||||
"CommunicationMean",
|
||||
]
|
||||
.iter()
|
||||
.map(|kind| format!("/body/{kind}/items"))
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array));
|
||||
}
|
||||
Family::Member(ReferenceCollection::TransitionTriggers) => {
|
||||
return value
|
||||
.pointer("/body/StateTransition/triggers")
|
||||
.is_some_and(Value::is_array)
|
||||
.then(|| "/body/StateTransition/triggers".into());
|
||||
}
|
||||
Family::Member(ReferenceCollection::TransitionEffects) => {
|
||||
return value
|
||||
.pointer("/body/StateTransition/effects")
|
||||
.is_some_and(Value::is_array)
|
||||
.then(|| "/body/StateTransition/effects".into());
|
||||
}
|
||||
};
|
||||
prefixes
|
||||
.iter()
|
||||
.flat_map(|prefix| tails.iter().map(move |tail| format!("{prefix}/{tail}")))
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array))
|
||||
}
|
||||
pub(super) fn key(facet: &FacetSelector, layer: Layer) -> Option<Value> {
|
||||
match facet {
|
||||
FacetSelector::Member { keys, .. } => if layer == Layer::Oa { keys.oa } else { keys.sa }
|
||||
.map(|id| serde_json::to_value(id).expect("Id")),
|
||||
FacetSelector::Literal(keys) => if layer == Layer::Oa {
|
||||
keys.oa.as_ref()
|
||||
} else {
|
||||
keys.sa.as_ref()
|
||||
}
|
||||
.map(|v| Value::String(v.clone())),
|
||||
FacetSelector::Annotation(keys) => if layer == Layer::Oa {
|
||||
keys.oa.as_ref()
|
||||
} else {
|
||||
keys.sa.as_ref()
|
||||
}
|
||||
.map(|key| serde_json::to_value(key).expect("Annotation key")),
|
||||
FacetSelector::Binding(keys) => if layer == Layer::Oa { keys.oa } else { keys.sa }
|
||||
.map(|id| serde_json::to_value(id).expect("Binding key")),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub(super) fn overlap(a: &FacetSelector, b: &FacetSelector) -> bool {
|
||||
if family(a).is_none() || family(a) != family(b) {
|
||||
return false;
|
||||
}
|
||||
[Layer::Oa, Layer::Sa]
|
||||
.into_iter()
|
||||
.any(|layer| key(a, layer).is_some() && key(a, layer) == key(b, layer))
|
||||
}
|
||||
pub(super) fn project_presence(
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
layer: Layer,
|
||||
present: bool,
|
||||
) -> Result<(), String> {
|
||||
let family = family(facet).ok_or("This keyed family remains read-only.")?;
|
||||
let key = key(facet, layer)
|
||||
.ok_or("Choose the destination identity in Members before setting or taking presence.")?;
|
||||
let path =
|
||||
path(value, family).ok_or("This collection is not applicable to the destination kind.")?;
|
||||
let list = value
|
||||
.pointer_mut(&path)
|
||||
.and_then(Value::as_array_mut)
|
||||
.ok_or("Destination collection is unavailable.")?;
|
||||
if present {
|
||||
if !list.contains(&key) {
|
||||
list.push(key);
|
||||
}
|
||||
} else {
|
||||
list.retain(|v| v != &key);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn keyed_value(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
if keyed_rows::supported(facet) {
|
||||
return self.project_row(project, trace, value, facet, decision);
|
||||
}
|
||||
let present = match decision {
|
||||
SemanticDecision::KeepTarget => return Ok(()),
|
||||
SemanticDecision::TakeSource => {
|
||||
// A missing source identity is a target-local row, not a removal.
|
||||
if key(facet, self.direction.source_layer()).is_none() {
|
||||
return Ok(());
|
||||
}
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, facet)?;
|
||||
scalar::value(&fact, self.direction.source_layer()).and_then(|v| v.as_bool()).ok_or("Source collection is not applicable; choose an explicit final presence or Keep.")?
|
||||
}
|
||||
SemanticDecision::Candidate => *self
|
||||
.presence
|
||||
.get(facet)
|
||||
.ok_or("Choose final membership presence.")?,
|
||||
};
|
||||
project_presence(value, facet, self.direction.target_layer(), present)
|
||||
}
|
||||
|
||||
pub(super) fn member_families(&self, project: &Project) -> Vec<Family> {
|
||||
let Some(trace) = self.effective_trace(project) else {
|
||||
return vec![];
|
||||
};
|
||||
let values: Vec<_> = [trace.oa, trace.sa]
|
||||
.into_iter()
|
||||
.filter_map(|id| Draft::from_project(project, id).map(|d| d.value))
|
||||
.collect();
|
||||
FAMILIES
|
||||
.into_iter()
|
||||
.filter(|family| values.iter().any(|value| path(value, *family).is_some()))
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub(super) fn member_choices(&self, project: &Project, layer: Layer) -> Vec<Choice> {
|
||||
if self.member_family == Family::Binding {
|
||||
return self.binding_choices(project, layer, true);
|
||||
}
|
||||
let Some(trace) = self.effective_trace(project) else {
|
||||
return vec![];
|
||||
};
|
||||
let id = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
let Some(mut draft) = Draft::from_project(project, id) else {
|
||||
return vec![];
|
||||
};
|
||||
if layer == self.direction.target_layer() {
|
||||
draft.set_context(self.combined_value(project, true).ok());
|
||||
}
|
||||
let selected = if layer == Layer::Oa {
|
||||
&self.member_oa
|
||||
} else {
|
||||
&self.member_sa
|
||||
};
|
||||
let Some(path) = path(&draft.context_value(), self.member_family) else {
|
||||
return selected.iter().cloned().collect();
|
||||
};
|
||||
crate::forms::reference_choices(
|
||||
&draft,
|
||||
project,
|
||||
&format!("{path}/0"),
|
||||
selected.as_ref().map_or(Id::nil(), |c| c.id),
|
||||
)
|
||||
.into_iter()
|
||||
.filter(|c| !c.id.is_nil())
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub(super) fn edit_pair(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
facet: FacetSelector,
|
||||
) -> Result<(), String> {
|
||||
self.member_family = family(&facet).ok_or("This keyed family remains read-only.")?;
|
||||
match facet {
|
||||
FacetSelector::Annotation(keys) => {
|
||||
self.annotation_oa.selected = keys.oa.map(|key| crate::data_values::FieldPathKey {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
});
|
||||
self.annotation_sa.selected = keys.sa.map(|key| crate::data_values::FieldPathKey {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
});
|
||||
}
|
||||
FacetSelector::Binding(keys) => {
|
||||
self.member_oa = keys.oa.map(|id| view::choice(project, id));
|
||||
self.member_sa = keys.sa.map(|id| view::choice(project, id));
|
||||
}
|
||||
FacetSelector::Member { keys, .. } => {
|
||||
self.member_oa = keys.oa.map(|id| view::choice(project, id));
|
||||
self.member_sa = keys.sa.map(|id| view::choice(project, id));
|
||||
}
|
||||
FacetSelector::Literal(keys) => {
|
||||
self.literal_oa = keys.oa.is_some();
|
||||
self.literal_sa = keys.sa.is_some();
|
||||
self.literal = keys.oa.or(keys.sa).unwrap_or_default();
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
self.tab = Tab::Members;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn stage_member(&mut self, project: &Project) -> Result<(), String> {
|
||||
if !FAMILIES.contains(&self.member_family) {
|
||||
return Err("This keyed family remains read-only.".into());
|
||||
}
|
||||
let facet = match self.member_family {
|
||||
Family::Member(collection) => FacetSelector::Member {
|
||||
collection,
|
||||
keys: KeyPair {
|
||||
oa: self.member_oa.as_ref().map(|c| c.id),
|
||||
sa: self.member_sa.as_ref().map(|c| c.id),
|
||||
},
|
||||
},
|
||||
Family::Literal => FacetSelector::Literal(KeyPair {
|
||||
oa: self.literal_oa.then(|| self.literal.clone()),
|
||||
sa: self.literal_sa.then(|| self.literal.clone()),
|
||||
}),
|
||||
Family::Annotation => FacetSelector::Annotation(KeyPair {
|
||||
oa: self
|
||||
.annotation_oa
|
||||
.selected
|
||||
.as_ref()
|
||||
.map(|key| AnnotationKey {
|
||||
path: key.path.clone(),
|
||||
field: key.field,
|
||||
}),
|
||||
sa: self
|
||||
.annotation_sa
|
||||
.selected
|
||||
.as_ref()
|
||||
.map(|key| AnnotationKey {
|
||||
path: key.path.clone(),
|
||||
field: key.field,
|
||||
}),
|
||||
}),
|
||||
Family::Binding => FacetSelector::Binding(KeyPair {
|
||||
oa: self.member_oa.as_ref().map(|c| c.id),
|
||||
sa: self.member_sa.as_ref().map(|c| c.id),
|
||||
}),
|
||||
};
|
||||
let trace = self.effective_trace(project).ok_or("Choose a trace.")?;
|
||||
capture_facet(project, trace.oa, trace.sa, &facet)?;
|
||||
self.stage_row_references(&facet)?;
|
||||
if let FacetSelector::Member {
|
||||
keys:
|
||||
KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
},
|
||||
..
|
||||
} = &facet
|
||||
{
|
||||
self.references.insert(*oa, *sa);
|
||||
}
|
||||
self.staged.insert(facet.clone());
|
||||
self.selected = Some(facet);
|
||||
self.tab = Tab::Facts;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
//! Closed presence-only adapter. The core independently validates the full final record.
|
||||
use super::*;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub enum Family {
|
||||
Member(ReferenceCollection),
|
||||
Literal,
|
||||
Annotation,
|
||||
Binding,
|
||||
}
|
||||
impl std::fmt::Display for Family {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_str(match self {
|
||||
Self::Member(ReferenceCollection::FunctionInputItems) => "Function input items",
|
||||
Self::Member(ReferenceCollection::FunctionOutputItems) => "Function output items",
|
||||
Self::Member(ReferenceCollection::SignalItems) => "Signal items",
|
||||
Self::Member(ReferenceCollection::CategoryExchanges) => "Category exchanges",
|
||||
Self::Member(ReferenceCollection::ExchangeItems) => "Exchange items",
|
||||
Self::Member(ReferenceCollection::TransitionTriggers) => "Transition triggers",
|
||||
Self::Member(ReferenceCollection::TransitionEffects) => "Transition effects",
|
||||
Self::Member(ReferenceCollection::Constrained) => "Constrained identities",
|
||||
Self::Member(ReferenceCollection::Steps) => "Ordered steps",
|
||||
Self::Member(ReferenceCollection::FragmentBranches) => "Fragment branches",
|
||||
Self::Literal => "Enumeration literals",
|
||||
Self::Annotation => "Message values",
|
||||
Self::Binding => "Scenario lifeline bindings",
|
||||
})
|
||||
}
|
||||
}
|
||||
pub(super) const FAMILIES: [Family; 13] = [
|
||||
Family::Member(ReferenceCollection::Steps),
|
||||
Family::Member(ReferenceCollection::FragmentBranches),
|
||||
Family::Member(ReferenceCollection::FunctionInputItems),
|
||||
Family::Member(ReferenceCollection::FunctionOutputItems),
|
||||
Family::Member(ReferenceCollection::SignalItems),
|
||||
Family::Member(ReferenceCollection::ExchangeItems),
|
||||
Family::Member(ReferenceCollection::CategoryExchanges),
|
||||
Family::Member(ReferenceCollection::TransitionTriggers),
|
||||
Family::Member(ReferenceCollection::TransitionEffects),
|
||||
Family::Member(ReferenceCollection::Constrained),
|
||||
Family::Literal,
|
||||
Family::Annotation,
|
||||
Family::Binding,
|
||||
];
|
||||
pub(super) fn family(facet: &FacetSelector) -> Option<Family> {
|
||||
let family = match facet {
|
||||
FacetSelector::Member { collection, .. } => Family::Member(*collection),
|
||||
FacetSelector::Literal(_) => Family::Literal,
|
||||
FacetSelector::Annotation(_) => Family::Annotation,
|
||||
FacetSelector::Binding(_) => Family::Binding,
|
||||
_ => return None,
|
||||
};
|
||||
FAMILIES.contains(&family).then_some(family)
|
||||
}
|
||||
pub(super) fn supported(facet: &FacetSelector) -> bool {
|
||||
family(facet).is_some()
|
||||
}
|
||||
|
||||
// Fixed paths for the closed collections and the exact enum literal set.
|
||||
// They are selected by the typed facet; callers cannot supply arbitrary paths.
|
||||
pub(super) fn path(value: &Value, family: Family) -> Option<String> {
|
||||
let prefixes = ["/body/Oa/Shared", "/body/Sa/Shared"];
|
||||
let tails: &[&str] = match family {
|
||||
Family::Member(ReferenceCollection::Steps) => {
|
||||
return [
|
||||
"/body/Oa/Process/steps",
|
||||
"/body/Sa/FunctionalChain/steps",
|
||||
"/body/Oa/Shared/Scenario/steps",
|
||||
"/body/Sa/Shared/Scenario/steps",
|
||||
"/body/Oa/Shared/Occurrence/body/Branch/occurrences",
|
||||
"/body/Sa/Shared/Occurrence/body/Branch/occurrences",
|
||||
]
|
||||
.into_iter()
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array))
|
||||
.map(str::to_owned);
|
||||
}
|
||||
Family::Member(ReferenceCollection::FragmentBranches) => {
|
||||
&["Occurrence/body/Fragment/branches"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::FunctionInputItems) => {
|
||||
&["Port/contract/FunctionInput/incoming_items"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::FunctionOutputItems) => {
|
||||
&["Port/contract/FunctionOutput/outgoing_items"]
|
||||
}
|
||||
Family::Member(ReferenceCollection::CategoryExchanges) => &["ExchangeCategory/exchanges"],
|
||||
Family::Member(ReferenceCollection::SignalItems) => &["Event/body/Signal/items"],
|
||||
Family::Member(ReferenceCollection::Constrained) => &["Constraint/constrained"],
|
||||
Family::Literal => &["DataType/definition/Enumeration/literals"],
|
||||
Family::Annotation => &["Occurrence/body/Exchange/values"],
|
||||
Family::Binding => &["Occurrence/body/ScenarioUse/bindings"],
|
||||
Family::Member(ReferenceCollection::ExchangeItems) => {
|
||||
return [
|
||||
"Interaction",
|
||||
"FunctionalExchange",
|
||||
"BoundaryExchange",
|
||||
"CommunicationMean",
|
||||
]
|
||||
.iter()
|
||||
.map(|kind| format!("/body/{kind}/items"))
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array));
|
||||
}
|
||||
Family::Member(ReferenceCollection::TransitionTriggers) => {
|
||||
return value
|
||||
.pointer("/body/StateTransition/triggers")
|
||||
.is_some_and(Value::is_array)
|
||||
.then(|| "/body/StateTransition/triggers".into());
|
||||
}
|
||||
Family::Member(ReferenceCollection::TransitionEffects) => {
|
||||
return value
|
||||
.pointer("/body/StateTransition/effects")
|
||||
.is_some_and(Value::is_array)
|
||||
.then(|| "/body/StateTransition/effects".into());
|
||||
}
|
||||
};
|
||||
prefixes
|
||||
.iter()
|
||||
.flat_map(|prefix| tails.iter().map(move |tail| format!("{prefix}/{tail}")))
|
||||
.find(|p| value.pointer(p).is_some_and(Value::is_array))
|
||||
}
|
||||
pub(super) fn key(facet: &FacetSelector, layer: Layer) -> Option<Value> {
|
||||
match facet {
|
||||
FacetSelector::Member { keys, .. } => if layer == Layer::Oa { keys.oa } else { keys.sa }
|
||||
.map(|id| serde_json::to_value(id).expect("Id")),
|
||||
FacetSelector::Literal(keys) => if layer == Layer::Oa {
|
||||
keys.oa.as_ref()
|
||||
} else {
|
||||
keys.sa.as_ref()
|
||||
}
|
||||
.map(|v| Value::String(v.clone())),
|
||||
FacetSelector::Annotation(keys) => if layer == Layer::Oa {
|
||||
keys.oa.as_ref()
|
||||
} else {
|
||||
keys.sa.as_ref()
|
||||
}
|
||||
.map(|key| serde_json::to_value(key).expect("Annotation key")),
|
||||
FacetSelector::Binding(keys) => if layer == Layer::Oa { keys.oa } else { keys.sa }
|
||||
.map(|id| serde_json::to_value(id).expect("Binding key")),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub(super) fn overlap(a: &FacetSelector, b: &FacetSelector) -> bool {
|
||||
if family(a).is_none() || family(a) != family(b) {
|
||||
return false;
|
||||
}
|
||||
[Layer::Oa, Layer::Sa]
|
||||
.into_iter()
|
||||
.any(|layer| key(a, layer).is_some() && key(a, layer) == key(b, layer))
|
||||
}
|
||||
pub(super) fn project_presence(
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
layer: Layer,
|
||||
present: bool,
|
||||
) -> Result<(), String> {
|
||||
let family = family(facet).ok_or("This keyed family remains read-only.")?;
|
||||
let key = key(facet, layer)
|
||||
.ok_or("Choose the destination identity in Members before setting or taking presence.")?;
|
||||
let path =
|
||||
path(value, family).ok_or("This collection is not applicable to the destination kind.")?;
|
||||
let list = value
|
||||
.pointer_mut(&path)
|
||||
.and_then(Value::as_array_mut)
|
||||
.ok_or("Destination collection is unavailable.")?;
|
||||
if present {
|
||||
if !list.contains(&key) {
|
||||
list.push(key);
|
||||
}
|
||||
} else {
|
||||
list.retain(|v| v != &key);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn keyed_value(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
if keyed_rows::supported(facet) {
|
||||
return self.project_row(project, trace, value, facet, decision);
|
||||
}
|
||||
let present = match decision {
|
||||
SemanticDecision::KeepTarget => return Ok(()),
|
||||
SemanticDecision::TakeSource => {
|
||||
// A missing source identity is a target-local row, not a removal.
|
||||
if key(facet, self.direction.source_layer()).is_none() {
|
||||
return Ok(());
|
||||
}
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, facet)?;
|
||||
scalar::value(&fact, self.direction.source_layer()).and_then(|v| v.as_bool()).ok_or("Source collection is not applicable; choose an explicit final presence or Keep.")?
|
||||
}
|
||||
SemanticDecision::Candidate => *self
|
||||
.presence
|
||||
.get(facet)
|
||||
.ok_or("Choose final membership presence.")?,
|
||||
};
|
||||
project_presence(value, facet, self.direction.target_layer(), present)
|
||||
}
|
||||
|
||||
pub(super) fn member_families(&self, project: &Project) -> Vec<Family> {
|
||||
let Some(trace) = self.effective_trace(project) else {
|
||||
return vec![];
|
||||
};
|
||||
let values: Vec<_> = [trace.oa, trace.sa]
|
||||
.into_iter()
|
||||
.filter_map(|id| Draft::from_project(project, id).map(|d| d.value))
|
||||
.collect();
|
||||
FAMILIES
|
||||
.into_iter()
|
||||
.filter(|family| values.iter().any(|value| path(value, *family).is_some()))
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub(super) fn member_choices(&self, project: &Project, layer: Layer) -> Vec<Choice> {
|
||||
if self.member_family == Family::Binding {
|
||||
return self.binding_choices(project, layer, true);
|
||||
}
|
||||
let Some(trace) = self.effective_trace(project) else {
|
||||
return vec![];
|
||||
};
|
||||
let id = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
let Some(mut draft) = Draft::from_project(project, id) else {
|
||||
return vec![];
|
||||
};
|
||||
if layer == self.direction.target_layer() {
|
||||
draft.set_context(self.combined_value(project, true).ok());
|
||||
}
|
||||
let selected = if layer == Layer::Oa {
|
||||
&self.member_oa
|
||||
} else {
|
||||
&self.member_sa
|
||||
};
|
||||
let Some(path) = path(&draft.context_value(), self.member_family) else {
|
||||
return selected.iter().cloned().collect();
|
||||
};
|
||||
crate::forms::reference_choices(
|
||||
&draft,
|
||||
project,
|
||||
&format!("{path}/0"),
|
||||
selected.as_ref().map_or(Id::nil(), |c| c.id),
|
||||
)
|
||||
.into_iter()
|
||||
.filter(|c| !c.id.is_nil())
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub(super) fn edit_pair(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
facet: FacetSelector,
|
||||
) -> Result<(), String> {
|
||||
self.member_family = family(&facet).ok_or("This keyed family remains read-only.")?;
|
||||
match facet {
|
||||
FacetSelector::Annotation(keys) => {
|
||||
self.annotation_oa.selected = keys.oa.map(|key| crate::data_values::FieldPathKey {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
});
|
||||
self.annotation_sa.selected = keys.sa.map(|key| crate::data_values::FieldPathKey {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
});
|
||||
}
|
||||
FacetSelector::Binding(keys) => {
|
||||
self.member_oa = keys.oa.map(|id| view::choice(project, id));
|
||||
self.member_sa = keys.sa.map(|id| view::choice(project, id));
|
||||
}
|
||||
FacetSelector::Member { keys, .. } => {
|
||||
self.member_oa = keys.oa.map(|id| view::choice(project, id));
|
||||
self.member_sa = keys.sa.map(|id| view::choice(project, id));
|
||||
}
|
||||
FacetSelector::Literal(keys) => {
|
||||
self.literal_oa = keys.oa.is_some();
|
||||
self.literal_sa = keys.sa.is_some();
|
||||
self.literal = keys.oa.or(keys.sa).unwrap_or_default();
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
self.tab = Tab::Members;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn stage_member(&mut self, project: &Project) -> Result<(), String> {
|
||||
if !FAMILIES.contains(&self.member_family) {
|
||||
return Err("This keyed family remains read-only.".into());
|
||||
}
|
||||
let facet = match self.member_family {
|
||||
Family::Member(collection) => FacetSelector::Member {
|
||||
collection,
|
||||
keys: KeyPair {
|
||||
oa: self.member_oa.as_ref().map(|c| c.id),
|
||||
sa: self.member_sa.as_ref().map(|c| c.id),
|
||||
},
|
||||
},
|
||||
Family::Literal => FacetSelector::Literal(KeyPair {
|
||||
oa: self.literal_oa.then(|| self.literal.clone()),
|
||||
sa: self.literal_sa.then(|| self.literal.clone()),
|
||||
}),
|
||||
Family::Annotation => FacetSelector::Annotation(KeyPair {
|
||||
oa: self
|
||||
.annotation_oa
|
||||
.selected
|
||||
.as_ref()
|
||||
.map(|key| AnnotationKey {
|
||||
path: key.path.clone(),
|
||||
field: key.field,
|
||||
}),
|
||||
sa: self
|
||||
.annotation_sa
|
||||
.selected
|
||||
.as_ref()
|
||||
.map(|key| AnnotationKey {
|
||||
path: key.path.clone(),
|
||||
field: key.field,
|
||||
}),
|
||||
}),
|
||||
Family::Binding => FacetSelector::Binding(KeyPair {
|
||||
oa: self.member_oa.as_ref().map(|c| c.id),
|
||||
sa: self.member_sa.as_ref().map(|c| c.id),
|
||||
}),
|
||||
};
|
||||
let trace = self.effective_trace(project).ok_or("Choose a trace.")?;
|
||||
capture_facet(project, trace.oa, trace.sa, &facet)?;
|
||||
self.stage_row_references(&facet)?;
|
||||
if let FacetSelector::Member {
|
||||
keys:
|
||||
KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
},
|
||||
..
|
||||
} = &facet
|
||||
{
|
||||
self.references.insert(*oa, *sa);
|
||||
}
|
||||
self.staged.insert(facet.clone());
|
||||
self.selected = Some(facet);
|
||||
self.tab = Tab::Facts;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,345 +1,345 @@
|
||||
//! Atomic message-value and lifeline-binding rows with exact, immutable keys.
|
||||
use super::*;
|
||||
use crate::data_values::{FieldPathChoice, FieldPathKey};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct AddressDraft {
|
||||
pub selected: Option<FieldPathKey>,
|
||||
pub scope: Option<FieldPathKey>,
|
||||
pub page: usize,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct RowDraft {
|
||||
pub expression: String,
|
||||
pub editor: text_editor::Content,
|
||||
pub local: Option<Choice>,
|
||||
}
|
||||
|
||||
pub(super) fn supported(facet: &FacetSelector) -> bool {
|
||||
matches!(
|
||||
facet,
|
||||
FacetSelector::Annotation(_) | FacetSelector::Binding(_)
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn target_selector(facet: &FacetSelector, layer: Layer) -> FacetSelector {
|
||||
match facet {
|
||||
FacetSelector::Annotation(keys) => FacetSelector::Annotation(KeyPair {
|
||||
oa: (layer == Layer::Oa).then(|| keys.oa.clone()).flatten(),
|
||||
sa: (layer == Layer::Sa).then(|| keys.sa.clone()).flatten(),
|
||||
}),
|
||||
FacetSelector::Binding(keys) => FacetSelector::Binding(KeyPair {
|
||||
oa: if layer == Layer::Oa { keys.oa } else { None },
|
||||
sa: if layer == Layer::Sa { keys.sa } else { None },
|
||||
}),
|
||||
_ => facet.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn annotation_address(&self, layer: Layer) -> &AddressDraft {
|
||||
if layer == Layer::Oa {
|
||||
&self.annotation_oa
|
||||
} else {
|
||||
&self.annotation_sa
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn annotation_address_mut(&mut self, layer: Layer) -> &mut AddressDraft {
|
||||
if layer == Layer::Oa {
|
||||
&mut self.annotation_oa
|
||||
} else {
|
||||
&mut self.annotation_sa
|
||||
}
|
||||
}
|
||||
|
||||
fn row_owner(&self, project: &Project, layer: Layer) -> Option<Element> {
|
||||
let trace = self.effective_trace(project)?;
|
||||
let id = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
if layer == self.direction.target_layer()
|
||||
&& let Ok(value) = self.combined_value(project, true)
|
||||
&& let Ok(element) = serde_json::from_value(value)
|
||||
{
|
||||
return Some(element);
|
||||
}
|
||||
project.elements.get(&id).cloned()
|
||||
}
|
||||
|
||||
pub(super) fn annotation_choices(
|
||||
&self,
|
||||
project: &Project,
|
||||
layer: Layer,
|
||||
) -> Result<Vec<FieldPathChoice>, String> {
|
||||
let element = self.row_owner(project, layer).ok_or("Choose a trace.")?;
|
||||
let Some(SharedBody::Occurrence {
|
||||
body:
|
||||
OccurrenceBody::Exchange {
|
||||
exchange: Some(exchange),
|
||||
message_kind,
|
||||
..
|
||||
},
|
||||
..
|
||||
}) = element.shared()
|
||||
else {
|
||||
return Err(
|
||||
"Choose an exchange on this message before selecting a carried field.".into(),
|
||||
);
|
||||
};
|
||||
let exchange = project
|
||||
.relations
|
||||
.get(exchange)
|
||||
.ok_or("The message exchange is unavailable.")?;
|
||||
crate::data_values::at_scope(
|
||||
project,
|
||||
exchange,
|
||||
message_kind,
|
||||
self.annotation_address(layer).scope.as_ref(),
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn binding_choices(
|
||||
&self,
|
||||
project: &Project,
|
||||
layer: Layer,
|
||||
referenced: bool,
|
||||
) -> Vec<Choice> {
|
||||
let Some(element) = self.row_owner(project, layer) else {
|
||||
return vec![];
|
||||
};
|
||||
let scenario = if referenced {
|
||||
match element.shared() {
|
||||
Some(SharedBody::Occurrence {
|
||||
body: OccurrenceBody::ScenarioUse { scenario, .. },
|
||||
..
|
||||
}) => *scenario,
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
element
|
||||
.parent
|
||||
.and_then(|parent| validation::ancestor_of_kind(project, parent, Kind::Scenario))
|
||||
};
|
||||
let mut choices: Vec<_> = project
|
||||
.elements
|
||||
.values()
|
||||
.filter(|e| {
|
||||
e.kind() == Kind::Lifeline
|
||||
&& e.layer() == layer
|
||||
&& scenario.is_some()
|
||||
&& e.parent == scenario
|
||||
})
|
||||
.map(|e| view::choice(project, e.id))
|
||||
.collect();
|
||||
choices.sort_by_cached_key(|c| c.label.to_lowercase());
|
||||
choices
|
||||
}
|
||||
|
||||
pub(super) fn stage_row_references(&mut self, facet: &FacetSelector) -> Result<(), String> {
|
||||
let pairs: Vec<_> = match facet {
|
||||
FacetSelector::Annotation(KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
}) => {
|
||||
if oa.path.len() != sa.path.len() {
|
||||
return Err("Paired annotation paths must have the same depth; review distinct addresses separately.".into());
|
||||
}
|
||||
oa.path
|
||||
.iter()
|
||||
.chain(std::iter::once(&oa.field))
|
||||
.copied()
|
||||
.zip(sa.path.iter().chain(std::iter::once(&sa.field)).copied())
|
||||
.collect()
|
||||
}
|
||||
FacetSelector::Binding(KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
}) => vec![(*oa, *sa)],
|
||||
_ => vec![],
|
||||
};
|
||||
// A repeated recursive field may occur several times in one address.
|
||||
// Never let the last occurrence silently replace a conflicting pair.
|
||||
let mut supplied = BTreeMap::new();
|
||||
for (oa, sa) in pairs {
|
||||
if supplied.insert(oa, sa).is_some_and(|prior| prior != sa) {
|
||||
return Err(
|
||||
"This address pairs the same Operational field with different System fields."
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
}
|
||||
self.references.extend(supplied);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn initialize_row(&mut self, project: &Project, facet: &FacetSelector) {
|
||||
if self.row_drafts.contains_key(facet) {
|
||||
return;
|
||||
}
|
||||
let value = self
|
||||
.effective_trace(project)
|
||||
.and_then(|t| capture_facet(project, t.oa, t.sa, facet).ok())
|
||||
.and_then(|f| scalar::value(&f, self.direction.target_layer()));
|
||||
let present = value.as_ref().is_some_and(|v| !v.is_null());
|
||||
let mut draft = RowDraft::default();
|
||||
if let Some(value) = value {
|
||||
draft.expression = value["expression"].as_str().unwrap_or_default().into();
|
||||
draft.editor = text_editor::Content::with_text(&draft.expression);
|
||||
draft.local = value["local"]
|
||||
.as_str()
|
||||
.and_then(|v| v.parse().ok())
|
||||
.map(|id| view::choice(project, id));
|
||||
}
|
||||
self.presence.entry(facet.clone()).or_insert(present);
|
||||
self.row_drafts.insert(facet.clone(), draft);
|
||||
}
|
||||
|
||||
pub(super) fn edit_row(
|
||||
&mut self,
|
||||
facet: &FacetSelector,
|
||||
action: impl FnOnce(&mut RowDraft),
|
||||
) -> Result<(), String> {
|
||||
if !supported(facet)
|
||||
|| self.selected.as_ref() != Some(facet)
|
||||
|| self.decisions.get(facet) != Some(&SemanticDecision::Candidate)
|
||||
{
|
||||
return Err("Select this row and choose Set final value before editing it.".into());
|
||||
}
|
||||
action(
|
||||
self.row_drafts
|
||||
.get_mut(facet)
|
||||
.ok_or("The row draft is unavailable.")?,
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn project_row(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
if decision == SemanticDecision::KeepTarget {
|
||||
return Ok(());
|
||||
}
|
||||
let source_layer = self.direction.source_layer();
|
||||
let target_layer = self.direction.target_layer();
|
||||
if decision == SemanticDecision::TakeSource && keyed::key(facet, source_layer).is_none() {
|
||||
return Ok(());
|
||||
}
|
||||
let target_key = keyed::key(facet, target_layer)
|
||||
.ok_or("Choose the destination row address before setting or taking its value.")?;
|
||||
let row = if decision == SemanticDecision::Candidate {
|
||||
if !self.presence.get(facet).copied().unwrap_or(false) {
|
||||
Value::Null
|
||||
} else {
|
||||
let draft = self
|
||||
.row_drafts
|
||||
.get(facet)
|
||||
.ok_or("Set the final row value.")?;
|
||||
match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
let key: AnnotationKey = serde_json::from_value(target_key.clone())
|
||||
.map_err(|e| e.to_string())?;
|
||||
serde_json::to_value(MessageValue {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
expression: draft.expression.clone(),
|
||||
})
|
||||
.expect("Message value")
|
||||
}
|
||||
FacetSelector::Binding(_) => {
|
||||
serde_json::json!({"referenced": target_key, "local": draft.local.as_ref().ok_or("Choose the destination scenario's local lifeline.")?.id})
|
||||
}
|
||||
_ => return Err("Unsupported row.".into()),
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, facet)?;
|
||||
let row = scalar::value(&fact, source_layer)
|
||||
.ok_or("Source row collection is not applicable; review its constructor first.")?;
|
||||
if row.is_null() {
|
||||
row
|
||||
} else {
|
||||
let map = |id: Id| -> Result<Id, String> {
|
||||
if source_layer == Layer::Oa {
|
||||
self.references.get(&id).copied().ok_or_else(|| {
|
||||
format!("Choose a reference counterpart for {}.", project.named(id))
|
||||
})
|
||||
} else {
|
||||
let matches: Vec<_> = self
|
||||
.references
|
||||
.iter()
|
||||
.filter(|(_, sa)| **sa == id)
|
||||
.map(|(oa, _)| *oa)
|
||||
.collect();
|
||||
if matches.len() == 1 {
|
||||
Ok(matches[0])
|
||||
} else {
|
||||
Err(format!(
|
||||
"Choose one unambiguous reference counterpart for {}.",
|
||||
project.named(id)
|
||||
))
|
||||
}
|
||||
}
|
||||
};
|
||||
match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
let mut row: MessageValue =
|
||||
serde_json::from_value(row).map_err(|e| e.to_string())?;
|
||||
row.path = row.path.into_iter().map(map).collect::<Result<_, _>>()?;
|
||||
row.field = map(row.field)?;
|
||||
if serde_json::to_value(AnnotationKey::from(&row)).expect("key")
|
||||
!= target_key
|
||||
{
|
||||
return Err("Mapped annotation address disagrees with the selected destination address.".into());
|
||||
}
|
||||
serde_json::to_value(row).expect("row")
|
||||
}
|
||||
FacetSelector::Binding(_) => {
|
||||
let row: LifelineBinding =
|
||||
serde_json::from_value(row).map_err(|e| e.to_string())?;
|
||||
let mapped = LifelineBinding {
|
||||
referenced: map(row.referenced)?,
|
||||
local: map(row.local)?,
|
||||
};
|
||||
if serde_json::to_value(mapped.referenced).expect("Id") != target_key {
|
||||
return Err("Mapped binding key disagrees with the selected destination lifeline.".into());
|
||||
}
|
||||
serde_json::to_value(mapped).expect("row")
|
||||
}
|
||||
_ => return Err("Unsupported row.".into()),
|
||||
}
|
||||
}
|
||||
};
|
||||
let family = keyed::family(facet).ok_or("Unsupported row.")?;
|
||||
let path = keyed::path(value, family)
|
||||
.ok_or("The destination constructor has no collection for this row.")?;
|
||||
let rows = value
|
||||
.pointer_mut(&path)
|
||||
.and_then(Value::as_array_mut)
|
||||
.ok_or("Destination rows are unavailable.")?;
|
||||
let position = rows.iter().position(|row| match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
serde_json::json!({"path": row["path"], "field": row["field"]}) == target_key
|
||||
}
|
||||
FacetSelector::Binding(_) => row["referenced"] == target_key,
|
||||
_ => false,
|
||||
});
|
||||
match (position, row.is_null()) {
|
||||
(Some(index), false) => rows[index] = row,
|
||||
(Some(index), true) => {
|
||||
rows.remove(index);
|
||||
}
|
||||
(None, false) => rows.push(row),
|
||||
(None, true) => {}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
//! Atomic message-value and lifeline-binding rows with exact, immutable keys.
|
||||
use super::*;
|
||||
use crate::data_values::{FieldPathChoice, FieldPathKey};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct AddressDraft {
|
||||
pub selected: Option<FieldPathKey>,
|
||||
pub scope: Option<FieldPathKey>,
|
||||
pub page: usize,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct RowDraft {
|
||||
pub expression: String,
|
||||
pub editor: text_editor::Content,
|
||||
pub local: Option<Choice>,
|
||||
}
|
||||
|
||||
pub(super) fn supported(facet: &FacetSelector) -> bool {
|
||||
matches!(
|
||||
facet,
|
||||
FacetSelector::Annotation(_) | FacetSelector::Binding(_)
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn target_selector(facet: &FacetSelector, layer: Layer) -> FacetSelector {
|
||||
match facet {
|
||||
FacetSelector::Annotation(keys) => FacetSelector::Annotation(KeyPair {
|
||||
oa: (layer == Layer::Oa).then(|| keys.oa.clone()).flatten(),
|
||||
sa: (layer == Layer::Sa).then(|| keys.sa.clone()).flatten(),
|
||||
}),
|
||||
FacetSelector::Binding(keys) => FacetSelector::Binding(KeyPair {
|
||||
oa: if layer == Layer::Oa { keys.oa } else { None },
|
||||
sa: if layer == Layer::Sa { keys.sa } else { None },
|
||||
}),
|
||||
_ => facet.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn annotation_address(&self, layer: Layer) -> &AddressDraft {
|
||||
if layer == Layer::Oa {
|
||||
&self.annotation_oa
|
||||
} else {
|
||||
&self.annotation_sa
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn annotation_address_mut(&mut self, layer: Layer) -> &mut AddressDraft {
|
||||
if layer == Layer::Oa {
|
||||
&mut self.annotation_oa
|
||||
} else {
|
||||
&mut self.annotation_sa
|
||||
}
|
||||
}
|
||||
|
||||
fn row_owner(&self, project: &Project, layer: Layer) -> Option<Element> {
|
||||
let trace = self.effective_trace(project)?;
|
||||
let id = if layer == Layer::Oa {
|
||||
trace.oa
|
||||
} else {
|
||||
trace.sa
|
||||
};
|
||||
if layer == self.direction.target_layer()
|
||||
&& let Ok(value) = self.combined_value(project, true)
|
||||
&& let Ok(element) = serde_json::from_value(value)
|
||||
{
|
||||
return Some(element);
|
||||
}
|
||||
project.elements.get(&id).cloned()
|
||||
}
|
||||
|
||||
pub(super) fn annotation_choices(
|
||||
&self,
|
||||
project: &Project,
|
||||
layer: Layer,
|
||||
) -> Result<Vec<FieldPathChoice>, String> {
|
||||
let element = self.row_owner(project, layer).ok_or("Choose a trace.")?;
|
||||
let Some(SharedBody::Occurrence {
|
||||
body:
|
||||
OccurrenceBody::Exchange {
|
||||
exchange: Some(exchange),
|
||||
message_kind,
|
||||
..
|
||||
},
|
||||
..
|
||||
}) = element.shared()
|
||||
else {
|
||||
return Err(
|
||||
"Choose an exchange on this message before selecting a carried field.".into(),
|
||||
);
|
||||
};
|
||||
let exchange = project
|
||||
.relations
|
||||
.get(exchange)
|
||||
.ok_or("The message exchange is unavailable.")?;
|
||||
crate::data_values::at_scope(
|
||||
project,
|
||||
exchange,
|
||||
message_kind,
|
||||
self.annotation_address(layer).scope.as_ref(),
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn binding_choices(
|
||||
&self,
|
||||
project: &Project,
|
||||
layer: Layer,
|
||||
referenced: bool,
|
||||
) -> Vec<Choice> {
|
||||
let Some(element) = self.row_owner(project, layer) else {
|
||||
return vec![];
|
||||
};
|
||||
let scenario = if referenced {
|
||||
match element.shared() {
|
||||
Some(SharedBody::Occurrence {
|
||||
body: OccurrenceBody::ScenarioUse { scenario, .. },
|
||||
..
|
||||
}) => *scenario,
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
element
|
||||
.parent
|
||||
.and_then(|parent| validation::ancestor_of_kind(project, parent, Kind::Scenario))
|
||||
};
|
||||
let mut choices: Vec<_> = project
|
||||
.elements
|
||||
.values()
|
||||
.filter(|e| {
|
||||
e.kind() == Kind::Lifeline
|
||||
&& e.layer() == layer
|
||||
&& scenario.is_some()
|
||||
&& e.parent == scenario
|
||||
})
|
||||
.map(|e| view::choice(project, e.id))
|
||||
.collect();
|
||||
choices.sort_by_cached_key(|c| c.label.to_lowercase());
|
||||
choices
|
||||
}
|
||||
|
||||
pub(super) fn stage_row_references(&mut self, facet: &FacetSelector) -> Result<(), String> {
|
||||
let pairs: Vec<_> = match facet {
|
||||
FacetSelector::Annotation(KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
}) => {
|
||||
if oa.path.len() != sa.path.len() {
|
||||
return Err("Paired annotation paths must have the same depth; review distinct addresses separately.".into());
|
||||
}
|
||||
oa.path
|
||||
.iter()
|
||||
.chain(std::iter::once(&oa.field))
|
||||
.copied()
|
||||
.zip(sa.path.iter().chain(std::iter::once(&sa.field)).copied())
|
||||
.collect()
|
||||
}
|
||||
FacetSelector::Binding(KeyPair {
|
||||
oa: Some(oa),
|
||||
sa: Some(sa),
|
||||
}) => vec![(*oa, *sa)],
|
||||
_ => vec![],
|
||||
};
|
||||
// A repeated recursive field may occur several times in one address.
|
||||
// Never let the last occurrence silently replace a conflicting pair.
|
||||
let mut supplied = BTreeMap::new();
|
||||
for (oa, sa) in pairs {
|
||||
if supplied.insert(oa, sa).is_some_and(|prior| prior != sa) {
|
||||
return Err(
|
||||
"This address pairs the same Operational field with different System fields."
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
}
|
||||
self.references.extend(supplied);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn initialize_row(&mut self, project: &Project, facet: &FacetSelector) {
|
||||
if self.row_drafts.contains_key(facet) {
|
||||
return;
|
||||
}
|
||||
let value = self
|
||||
.effective_trace(project)
|
||||
.and_then(|t| capture_facet(project, t.oa, t.sa, facet).ok())
|
||||
.and_then(|f| scalar::value(&f, self.direction.target_layer()));
|
||||
let present = value.as_ref().is_some_and(|v| !v.is_null());
|
||||
let mut draft = RowDraft::default();
|
||||
if let Some(value) = value {
|
||||
draft.expression = value["expression"].as_str().unwrap_or_default().into();
|
||||
draft.editor = text_editor::Content::with_text(&draft.expression);
|
||||
draft.local = value["local"]
|
||||
.as_str()
|
||||
.and_then(|v| v.parse().ok())
|
||||
.map(|id| view::choice(project, id));
|
||||
}
|
||||
self.presence.entry(facet.clone()).or_insert(present);
|
||||
self.row_drafts.insert(facet.clone(), draft);
|
||||
}
|
||||
|
||||
pub(super) fn edit_row(
|
||||
&mut self,
|
||||
facet: &FacetSelector,
|
||||
action: impl FnOnce(&mut RowDraft),
|
||||
) -> Result<(), String> {
|
||||
if !supported(facet)
|
||||
|| self.selected.as_ref() != Some(facet)
|
||||
|| self.decisions.get(facet) != Some(&SemanticDecision::Candidate)
|
||||
{
|
||||
return Err("Select this row and choose Set final value before editing it.".into());
|
||||
}
|
||||
action(
|
||||
self.row_drafts
|
||||
.get_mut(facet)
|
||||
.ok_or("The row draft is unavailable.")?,
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn project_row(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
if decision == SemanticDecision::KeepTarget {
|
||||
return Ok(());
|
||||
}
|
||||
let source_layer = self.direction.source_layer();
|
||||
let target_layer = self.direction.target_layer();
|
||||
if decision == SemanticDecision::TakeSource && keyed::key(facet, source_layer).is_none() {
|
||||
return Ok(());
|
||||
}
|
||||
let target_key = keyed::key(facet, target_layer)
|
||||
.ok_or("Choose the destination row address before setting or taking its value.")?;
|
||||
let row = if decision == SemanticDecision::Candidate {
|
||||
if !self.presence.get(facet).copied().unwrap_or(false) {
|
||||
Value::Null
|
||||
} else {
|
||||
let draft = self
|
||||
.row_drafts
|
||||
.get(facet)
|
||||
.ok_or("Set the final row value.")?;
|
||||
match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
let key: AnnotationKey = serde_json::from_value(target_key.clone())
|
||||
.map_err(|e| e.to_string())?;
|
||||
serde_json::to_value(MessageValue {
|
||||
path: key.path,
|
||||
field: key.field,
|
||||
expression: draft.expression.clone(),
|
||||
})
|
||||
.expect("Message value")
|
||||
}
|
||||
FacetSelector::Binding(_) => {
|
||||
serde_json::json!({"referenced": target_key, "local": draft.local.as_ref().ok_or("Choose the destination scenario's local lifeline.")?.id})
|
||||
}
|
||||
_ => return Err("Unsupported row.".into()),
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, facet)?;
|
||||
let row = scalar::value(&fact, source_layer)
|
||||
.ok_or("Source row collection is not applicable; review its constructor first.")?;
|
||||
if row.is_null() {
|
||||
row
|
||||
} else {
|
||||
let map = |id: Id| -> Result<Id, String> {
|
||||
if source_layer == Layer::Oa {
|
||||
self.references.get(&id).copied().ok_or_else(|| {
|
||||
format!("Choose a reference counterpart for {}.", project.named(id))
|
||||
})
|
||||
} else {
|
||||
let matches: Vec<_> = self
|
||||
.references
|
||||
.iter()
|
||||
.filter(|(_, sa)| **sa == id)
|
||||
.map(|(oa, _)| *oa)
|
||||
.collect();
|
||||
if matches.len() == 1 {
|
||||
Ok(matches[0])
|
||||
} else {
|
||||
Err(format!(
|
||||
"Choose one unambiguous reference counterpart for {}.",
|
||||
project.named(id)
|
||||
))
|
||||
}
|
||||
}
|
||||
};
|
||||
match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
let mut row: MessageValue =
|
||||
serde_json::from_value(row).map_err(|e| e.to_string())?;
|
||||
row.path = row.path.into_iter().map(map).collect::<Result<_, _>>()?;
|
||||
row.field = map(row.field)?;
|
||||
if serde_json::to_value(AnnotationKey::from(&row)).expect("key")
|
||||
!= target_key
|
||||
{
|
||||
return Err("Mapped annotation address disagrees with the selected destination address.".into());
|
||||
}
|
||||
serde_json::to_value(row).expect("row")
|
||||
}
|
||||
FacetSelector::Binding(_) => {
|
||||
let row: LifelineBinding =
|
||||
serde_json::from_value(row).map_err(|e| e.to_string())?;
|
||||
let mapped = LifelineBinding {
|
||||
referenced: map(row.referenced)?,
|
||||
local: map(row.local)?,
|
||||
};
|
||||
if serde_json::to_value(mapped.referenced).expect("Id") != target_key {
|
||||
return Err("Mapped binding key disagrees with the selected destination lifeline.".into());
|
||||
}
|
||||
serde_json::to_value(mapped).expect("row")
|
||||
}
|
||||
_ => return Err("Unsupported row.".into()),
|
||||
}
|
||||
}
|
||||
};
|
||||
let family = keyed::family(facet).ok_or("Unsupported row.")?;
|
||||
let path = keyed::path(value, family)
|
||||
.ok_or("The destination constructor has no collection for this row.")?;
|
||||
let rows = value
|
||||
.pointer_mut(&path)
|
||||
.and_then(Value::as_array_mut)
|
||||
.ok_or("Destination rows are unavailable.")?;
|
||||
let position = rows.iter().position(|row| match facet {
|
||||
FacetSelector::Annotation(_) => {
|
||||
serde_json::json!({"path": row["path"], "field": row["field"]}) == target_key
|
||||
}
|
||||
FacetSelector::Binding(_) => row["referenced"] == target_key,
|
||||
_ => false,
|
||||
});
|
||||
match (position, row.is_null()) {
|
||||
(Some(index), false) => rows[index] = row,
|
||||
(Some(index), true) => {
|
||||
rows.remove(index);
|
||||
}
|
||||
(None, false) => rows.push(row),
|
||||
(None, true) => {}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,254 +1,254 @@
|
||||
//! Independent membership and complete final order; the core validates every proposal.
|
||||
use super::*;
|
||||
|
||||
pub(super) fn collection(which: OrderedCollection) -> ReferenceCollection {
|
||||
match which {
|
||||
OrderedCollection::Steps => ReferenceCollection::Steps,
|
||||
OrderedCollection::FragmentBranches => ReferenceCollection::FragmentBranches,
|
||||
}
|
||||
}
|
||||
pub(super) fn ordered(which: ReferenceCollection) -> Option<OrderedCollection> {
|
||||
match which {
|
||||
ReferenceCollection::Steps => Some(OrderedCollection::Steps),
|
||||
ReferenceCollection::FragmentBranches => Some(OrderedCollection::FragmentBranches),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub(super) fn read(value: &Value, which: OrderedCollection) -> Result<Vec<Id>, String> {
|
||||
let path = keyed::path(value, keyed::Family::Member(collection(which)))
|
||||
.ok_or("This ordered collection is unavailable on the destination.")?;
|
||||
serde_json::from_value(value.pointer(&path).unwrap().clone()).map_err(|e| e.to_string())
|
||||
}
|
||||
fn write(value: &mut Value, which: OrderedCollection, ids: Vec<Id>) -> Result<(), String> {
|
||||
let path = keyed::path(value, keyed::Family::Member(collection(which)))
|
||||
.ok_or("This ordered collection is unavailable on the destination.")?;
|
||||
*value.pointer_mut(&path).unwrap() = serde_json::to_value(ids).expect("Ordered identities");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn ordered_members(
|
||||
&self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<Vec<Id>, String> {
|
||||
read(&self.combine(project, true, true)?, which)
|
||||
}
|
||||
|
||||
pub(super) fn initialize_order(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<(), String> {
|
||||
if !self.order_drafts.contains_key(&which) {
|
||||
let ids = self.ordered_members(project, which)?;
|
||||
self.order_drafts.insert(which, ids);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn reconcile_order(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<(), String> {
|
||||
self.require_order_candidate(which)?;
|
||||
let members = self.ordered_members(project, which)?;
|
||||
let draft = self
|
||||
.order_drafts
|
||||
.get_mut(&which)
|
||||
.ok_or("Choose a final order first.")?;
|
||||
// This is an explicit user action. Ordinary refresh never discards an authored order.
|
||||
let mut seen = BTreeSet::new();
|
||||
draft.retain(|id| members.contains(id) && seen.insert(*id));
|
||||
for id in members {
|
||||
if seen.insert(id) {
|
||||
draft.push(id);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn require_order_candidate(&self, which: OrderedCollection) -> Result<(), String> {
|
||||
let facet = FacetSelector::Order(which);
|
||||
if self.selected.as_ref() != Some(&facet)
|
||||
|| self.decisions.get(&facet) != Some(&SemanticDecision::Candidate)
|
||||
{
|
||||
return Err("Select Set final value for this order before changing it.".into());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn move_order(
|
||||
&mut self,
|
||||
which: OrderedCollection,
|
||||
index: usize,
|
||||
delta: i32,
|
||||
) -> Result<(), String> {
|
||||
self.require_order_candidate(which)?;
|
||||
let ids = self
|
||||
.order_drafts
|
||||
.get_mut(&which)
|
||||
.ok_or("Choose a final order first.")?;
|
||||
let destination = match delta {
|
||||
-1 => index.checked_sub(1),
|
||||
1 => index.checked_add(1),
|
||||
_ => None,
|
||||
};
|
||||
let destination = destination
|
||||
.filter(|i| index < ids.len() && *i < ids.len())
|
||||
.ok_or("Choose an existing adjacent position in the final order.")?;
|
||||
ids.swap(index, destination);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn project_order(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
which: OrderedCollection,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
let current = read(value, which)?;
|
||||
let supplied = match decision {
|
||||
SemanticDecision::KeepTarget => return Ok(()),
|
||||
SemanticDecision::Candidate => self
|
||||
.order_drafts
|
||||
.get(&which)
|
||||
.cloned()
|
||||
.ok_or("Choose a final order.")?,
|
||||
SemanticDecision::TakeSource => {
|
||||
let fact =
|
||||
capture_facet(project, trace.oa, trace.sa, &FacetSelector::Order(which))?;
|
||||
let source: Vec<Id> = serde_json::from_value(
|
||||
scalar::value(&fact, self.direction.source_layer())
|
||||
.ok_or("The source has no applicable order.")?,
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let map = self.order_reference_map()?;
|
||||
source
|
||||
.into_iter()
|
||||
.map(|id| {
|
||||
map.get(&id).copied().ok_or_else(|| {
|
||||
format!(
|
||||
"Pair source order member {} explicitly in Reference pairs.",
|
||||
project.named(id)
|
||||
)
|
||||
})
|
||||
})
|
||||
.collect::<Result<Vec<_>, _>>()?
|
||||
}
|
||||
};
|
||||
let actual: BTreeSet<_> = current.iter().copied().collect();
|
||||
let desired: BTreeSet<_> = supplied.iter().copied().collect();
|
||||
if desired.len() != supplied.len() {
|
||||
return Err(
|
||||
"The final order contains a duplicate identity; reconcile its members explicitly."
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
if desired != actual {
|
||||
if decision == SemanticDecision::TakeSource
|
||||
&& desired.is_subset(&actual)
|
||||
&& current
|
||||
.iter()
|
||||
.filter(|id| desired.contains(id))
|
||||
.copied()
|
||||
.collect::<Vec<_>>()
|
||||
== supplied
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
return Err("Final order must contain every surviving destination member exactly once. Reconcile members, then choose their positions; membership is reviewed separately.".into());
|
||||
}
|
||||
write(value, which, supplied)
|
||||
}
|
||||
|
||||
fn order_reference_map(&self) -> Result<BTreeMap<Id, Id>, String> {
|
||||
let mut map = BTreeMap::new();
|
||||
for (oa, sa) in &self.references {
|
||||
let (a, b) = if self.direction == TransitionDirection::OaToSa {
|
||||
(*oa, *sa)
|
||||
} else {
|
||||
(*sa, *oa)
|
||||
};
|
||||
if map.insert(a, b).is_some_and(|old| old != b) {
|
||||
return Err("Reverse reference correspondence is ambiguous.".into());
|
||||
}
|
||||
}
|
||||
Ok(map)
|
||||
}
|
||||
|
||||
pub(super) fn project_ordered_member(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
form_context: bool,
|
||||
) -> Result<(), String> {
|
||||
let FacetSelector::Member {
|
||||
collection: member_collection,
|
||||
keys,
|
||||
} = facet
|
||||
else {
|
||||
unreachable!()
|
||||
};
|
||||
let which = ordered(*member_collection).expect("Ordered member");
|
||||
let before = read(value, which)?;
|
||||
self.keyed_value(project, trace, value, facet, decision)?;
|
||||
let after = read(value, which)?;
|
||||
let explicit = self
|
||||
.decisions
|
||||
.get(&FacetSelector::Order(which))
|
||||
.is_some_and(|d| *d != SemanticDecision::KeepTarget);
|
||||
if decision != SemanticDecision::TakeSource || explicit || after.len() <= before.len() {
|
||||
return Ok(());
|
||||
}
|
||||
let (source_key, target_key) = if self.direction == TransitionDirection::OaToSa {
|
||||
(keys.oa, keys.sa)
|
||||
} else {
|
||||
(keys.sa, keys.oa)
|
||||
};
|
||||
let (Some(source_key), Some(target_key)) = (source_key, target_key) else {
|
||||
return Ok(());
|
||||
};
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, &FacetSelector::Order(which))?;
|
||||
let source: Vec<Id> = serde_json::from_value(
|
||||
scalar::value(&fact, self.direction.source_layer())
|
||||
.ok_or("Source order is unavailable.")?,
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let position = source
|
||||
.iter()
|
||||
.position(|id| *id == source_key)
|
||||
.ok_or("Source member is absent.")?;
|
||||
let map = self.order_reference_map()?;
|
||||
let anchor = |id: &Id| {
|
||||
map.get(id)
|
||||
.and_then(|mapped| before.iter().position(|id| id == mapped))
|
||||
};
|
||||
let left = source[..position].iter().rev().find_map(anchor);
|
||||
let right = source[position + 1..].iter().find_map(anchor);
|
||||
let at = match (left, right) {
|
||||
(Some(a), Some(b)) if a + 1 == b => Some(b),
|
||||
(Some(a), None) if a + 1 == before.len() => Some(a + 1),
|
||||
(None, Some(0)) => Some(0),
|
||||
(None, None) if before.is_empty() => Some(0),
|
||||
_ => None,
|
||||
};
|
||||
if let Some(at) = at {
|
||||
let mut ordered = before;
|
||||
ordered.insert(at, target_key);
|
||||
write(value, which, ordered)
|
||||
} else if form_context {
|
||||
// An uncommitted membership list lets the user author a final order.
|
||||
// The actual request still rejects ambiguous placement until explicitly decided.
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Ordered member insertion has no unique unchanged anchor; select an explicit final Order in Properties.".into())
|
||||
}
|
||||
}
|
||||
}
|
||||
//! Independent membership and complete final order; the core validates every proposal.
|
||||
use super::*;
|
||||
|
||||
pub(super) fn collection(which: OrderedCollection) -> ReferenceCollection {
|
||||
match which {
|
||||
OrderedCollection::Steps => ReferenceCollection::Steps,
|
||||
OrderedCollection::FragmentBranches => ReferenceCollection::FragmentBranches,
|
||||
}
|
||||
}
|
||||
pub(super) fn ordered(which: ReferenceCollection) -> Option<OrderedCollection> {
|
||||
match which {
|
||||
ReferenceCollection::Steps => Some(OrderedCollection::Steps),
|
||||
ReferenceCollection::FragmentBranches => Some(OrderedCollection::FragmentBranches),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub(super) fn read(value: &Value, which: OrderedCollection) -> Result<Vec<Id>, String> {
|
||||
let path = keyed::path(value, keyed::Family::Member(collection(which)))
|
||||
.ok_or("This ordered collection is unavailable on the destination.")?;
|
||||
serde_json::from_value(value.pointer(&path).unwrap().clone()).map_err(|e| e.to_string())
|
||||
}
|
||||
fn write(value: &mut Value, which: OrderedCollection, ids: Vec<Id>) -> Result<(), String> {
|
||||
let path = keyed::path(value, keyed::Family::Member(collection(which)))
|
||||
.ok_or("This ordered collection is unavailable on the destination.")?;
|
||||
*value.pointer_mut(&path).unwrap() = serde_json::to_value(ids).expect("Ordered identities");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl ReviewRow {
|
||||
pub(super) fn ordered_members(
|
||||
&self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<Vec<Id>, String> {
|
||||
read(&self.combine(project, true, true)?, which)
|
||||
}
|
||||
|
||||
pub(super) fn initialize_order(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<(), String> {
|
||||
if !self.order_drafts.contains_key(&which) {
|
||||
let ids = self.ordered_members(project, which)?;
|
||||
self.order_drafts.insert(which, ids);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn reconcile_order(
|
||||
&mut self,
|
||||
project: &Project,
|
||||
which: OrderedCollection,
|
||||
) -> Result<(), String> {
|
||||
self.require_order_candidate(which)?;
|
||||
let members = self.ordered_members(project, which)?;
|
||||
let draft = self
|
||||
.order_drafts
|
||||
.get_mut(&which)
|
||||
.ok_or("Choose a final order first.")?;
|
||||
// This is an explicit user action. Ordinary refresh never discards an authored order.
|
||||
let mut seen = BTreeSet::new();
|
||||
draft.retain(|id| members.contains(id) && seen.insert(*id));
|
||||
for id in members {
|
||||
if seen.insert(id) {
|
||||
draft.push(id);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn require_order_candidate(&self, which: OrderedCollection) -> Result<(), String> {
|
||||
let facet = FacetSelector::Order(which);
|
||||
if self.selected.as_ref() != Some(&facet)
|
||||
|| self.decisions.get(&facet) != Some(&SemanticDecision::Candidate)
|
||||
{
|
||||
return Err("Select Set final value for this order before changing it.".into());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn move_order(
|
||||
&mut self,
|
||||
which: OrderedCollection,
|
||||
index: usize,
|
||||
delta: i32,
|
||||
) -> Result<(), String> {
|
||||
self.require_order_candidate(which)?;
|
||||
let ids = self
|
||||
.order_drafts
|
||||
.get_mut(&which)
|
||||
.ok_or("Choose a final order first.")?;
|
||||
let destination = match delta {
|
||||
-1 => index.checked_sub(1),
|
||||
1 => index.checked_add(1),
|
||||
_ => None,
|
||||
};
|
||||
let destination = destination
|
||||
.filter(|i| index < ids.len() && *i < ids.len())
|
||||
.ok_or("Choose an existing adjacent position in the final order.")?;
|
||||
ids.swap(index, destination);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) fn project_order(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
which: OrderedCollection,
|
||||
decision: SemanticDecision,
|
||||
) -> Result<(), String> {
|
||||
let current = read(value, which)?;
|
||||
let supplied = match decision {
|
||||
SemanticDecision::KeepTarget => return Ok(()),
|
||||
SemanticDecision::Candidate => self
|
||||
.order_drafts
|
||||
.get(&which)
|
||||
.cloned()
|
||||
.ok_or("Choose a final order.")?,
|
||||
SemanticDecision::TakeSource => {
|
||||
let fact =
|
||||
capture_facet(project, trace.oa, trace.sa, &FacetSelector::Order(which))?;
|
||||
let source: Vec<Id> = serde_json::from_value(
|
||||
scalar::value(&fact, self.direction.source_layer())
|
||||
.ok_or("The source has no applicable order.")?,
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let map = self.order_reference_map()?;
|
||||
source
|
||||
.into_iter()
|
||||
.map(|id| {
|
||||
map.get(&id).copied().ok_or_else(|| {
|
||||
format!(
|
||||
"Pair source order member {} explicitly in Reference pairs.",
|
||||
project.named(id)
|
||||
)
|
||||
})
|
||||
})
|
||||
.collect::<Result<Vec<_>, _>>()?
|
||||
}
|
||||
};
|
||||
let actual: BTreeSet<_> = current.iter().copied().collect();
|
||||
let desired: BTreeSet<_> = supplied.iter().copied().collect();
|
||||
if desired.len() != supplied.len() {
|
||||
return Err(
|
||||
"The final order contains a duplicate identity; reconcile its members explicitly."
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
if desired != actual {
|
||||
if decision == SemanticDecision::TakeSource
|
||||
&& desired.is_subset(&actual)
|
||||
&& current
|
||||
.iter()
|
||||
.filter(|id| desired.contains(id))
|
||||
.copied()
|
||||
.collect::<Vec<_>>()
|
||||
== supplied
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
return Err("Final order must contain every surviving destination member exactly once. Reconcile members, then choose their positions; membership is reviewed separately.".into());
|
||||
}
|
||||
write(value, which, supplied)
|
||||
}
|
||||
|
||||
fn order_reference_map(&self) -> Result<BTreeMap<Id, Id>, String> {
|
||||
let mut map = BTreeMap::new();
|
||||
for (oa, sa) in &self.references {
|
||||
let (a, b) = if self.direction == TransitionDirection::OaToSa {
|
||||
(*oa, *sa)
|
||||
} else {
|
||||
(*sa, *oa)
|
||||
};
|
||||
if map.insert(a, b).is_some_and(|old| old != b) {
|
||||
return Err("Reverse reference correspondence is ambiguous.".into());
|
||||
}
|
||||
}
|
||||
Ok(map)
|
||||
}
|
||||
|
||||
pub(super) fn project_ordered_member(
|
||||
&self,
|
||||
project: &Project,
|
||||
trace: &Trace,
|
||||
value: &mut Value,
|
||||
facet: &FacetSelector,
|
||||
decision: SemanticDecision,
|
||||
form_context: bool,
|
||||
) -> Result<(), String> {
|
||||
let FacetSelector::Member {
|
||||
collection: member_collection,
|
||||
keys,
|
||||
} = facet
|
||||
else {
|
||||
unreachable!()
|
||||
};
|
||||
let which = ordered(*member_collection).expect("Ordered member");
|
||||
let before = read(value, which)?;
|
||||
self.keyed_value(project, trace, value, facet, decision)?;
|
||||
let after = read(value, which)?;
|
||||
let explicit = self
|
||||
.decisions
|
||||
.get(&FacetSelector::Order(which))
|
||||
.is_some_and(|d| *d != SemanticDecision::KeepTarget);
|
||||
if decision != SemanticDecision::TakeSource || explicit || after.len() <= before.len() {
|
||||
return Ok(());
|
||||
}
|
||||
let (source_key, target_key) = if self.direction == TransitionDirection::OaToSa {
|
||||
(keys.oa, keys.sa)
|
||||
} else {
|
||||
(keys.sa, keys.oa)
|
||||
};
|
||||
let (Some(source_key), Some(target_key)) = (source_key, target_key) else {
|
||||
return Ok(());
|
||||
};
|
||||
let fact = capture_facet(project, trace.oa, trace.sa, &FacetSelector::Order(which))?;
|
||||
let source: Vec<Id> = serde_json::from_value(
|
||||
scalar::value(&fact, self.direction.source_layer())
|
||||
.ok_or("Source order is unavailable.")?,
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let position = source
|
||||
.iter()
|
||||
.position(|id| *id == source_key)
|
||||
.ok_or("Source member is absent.")?;
|
||||
let map = self.order_reference_map()?;
|
||||
let anchor = |id: &Id| {
|
||||
map.get(id)
|
||||
.and_then(|mapped| before.iter().position(|id| id == mapped))
|
||||
};
|
||||
let left = source[..position].iter().rev().find_map(anchor);
|
||||
let right = source[position + 1..].iter().find_map(anchor);
|
||||
let at = match (left, right) {
|
||||
(Some(a), Some(b)) if a + 1 == b => Some(b),
|
||||
(Some(a), None) if a + 1 == before.len() => Some(a + 1),
|
||||
(None, Some(0)) => Some(0),
|
||||
(None, None) if before.is_empty() => Some(0),
|
||||
_ => None,
|
||||
};
|
||||
if let Some(at) = at {
|
||||
let mut ordered = before;
|
||||
ordered.insert(at, target_key);
|
||||
write(value, which, ordered)
|
||||
} else if form_context {
|
||||
// An uncommitted membership list lets the user author a final order.
|
||||
// The actual request still rejects ambiguous placement until explicitly decided.
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Ordered member insertion has no unique unchanged anchor; select an explicit final Order in Properties.".into())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12837
-12837
File diff suppressed because it is too large
Load Diff
+72
-26
@@ -5,27 +5,50 @@ Updated 2026-09-11, Codex-9e8r6t `/root`.
|
||||
[TASK_LEDGER.md](TASK_LEDGER.md) separates evidence from assumptions;
|
||||
[STATE.md](STATE.md) owns active leases and results.
|
||||
|
||||
Resumed after the user's virtualization/reboot update. STATE.md supersedes the
|
||||
historical [RESTART_HANDOFF.md](RESTART_HANDOFF.md) for live status. Postboot
|
||||
focused3 ran25 passing tests and one failing overflow-fixture assertion; its
|
||||
test-only correction passed all26 focused4 tests. Strict Clippy, formatting and
|
||||
matching GUI5657 build also passed; fresh native acceptance continues.
|
||||
Nondeleting compression completed across282 generated binaries with identical
|
||||
hashes and11.78GB free; supported Ubuntu26.04 installation passed exit0. Actual
|
||||
root shell identifies Ubuntu26.04/WSL2. User328 replaces failed mirrored mode
|
||||
with VirtioProxy; the VPN is immutable. Both new guest startups timed out before
|
||||
execution, then the distinct WslService restart failed at OS access permissions.
|
||||
All60 apt archives and five Rust components are downloaded and hash-verified;
|
||||
guest signature verification/install and Linux Cargo remain pending. No compiler
|
||||
or WSL client lease is active. The user has now paused Linux builds/checking
|
||||
until they report WSL networking resolved; do not schedule more Linux setup,
|
||||
launches, diagnostics or checks before that notice (Gitea comment356).
|
||||
Lifeline/Chain history and Machine Create/Undo/postboot reopen passed on GUI52;
|
||||
Fresh GUI5657 cancellation/recovery, Lifeline direct creation/history and Machine
|
||||
minimum-size owner/Create/Undo/Redo/reopen now pass; full679 desktop tests pass.
|
||||
|
||||
## Immediate implementation and acceptance
|
||||
|
||||
1. Preserve the verified creation integration and matching GUI stage, committed
|
||||
as 4bb4aaf and transferred with independent anonymous readback/hash verification. Final immutable
|
||||
desktop653/653 passed after creation ancestry/guide changes, alongside focused
|
||||
creation21/guide3. StrictClippy/fmt pass after a behavior-equivalent history
|
||||
rewrite; affected history63 and GUI build also pass. Preserve exact artifact
|
||||
scopes and serialize future Cargo/source leases.
|
||||
2. Named process/scenario/machine creation, exact Undo/Redo and nine-file reopen
|
||||
have passed at actual minimum size. Wide/minimum cancellation passed; SA draft
|
||||
crash recovery is active. Address observed blank canvases and prerequisite
|
||||
creation detours through the staged-source plan: source subform retains the
|
||||
parent draft and final adoption atomically creates prerequisite and consumer.
|
||||
First slice covers Lifeline, process Work and machine owner, with semantic
|
||||
first-action prompts. Independent review precedes final integration/native QA.
|
||||
3. Operate the rebuilt app at minimum/normal sizes. Complete the saved basic
|
||||
1. Preserve and publish the completed native acceptance of GUI `5657BAB5…D3846CE` using
|
||||
the [v2 plan](release-contextual-source-native-v2-plan-20260911.md). All26
|
||||
affected tests, strict all-target Clippy, formatting and matching build pass;
|
||||
the full679 immutable Windows test run also passed. Minimum-size
|
||||
child visibility, exact recovery/cancel and direct Lifeline Create/Undo/Redo
|
||||
now pass, along with Machine owner visibility/Create/Undo/Redo/reopen. Preserve
|
||||
independent first UUID carriers and serialize future compiler/source leases.
|
||||
Prepare an updated Windows prerelease only with honest per-binary source
|
||||
identity, package verification and clean packaged runtime checks.
|
||||
2. Exercise the implemented source subform for Lifeline, process/chain Work and
|
||||
machine owner, plus semantic first-action prompts. Verify parent-draft
|
||||
retention, explicit prerequisite and consumer adoption, exact source/history,
|
||||
cancellation and recovery against the independent staged-source oracle.
|
||||
Final source guards and guide corrections are complete and reviewed; native
|
||||
acceptance remains; source/evidence are integrated in `df6f595`. Named creation, nine-file reopen and
|
||||
SA pending-draft recovery already have their separate native passes.
|
||||
3. Complete local SA B2 and the saved basic
|
||||
supplementary move/camera/invalid-draft and minimum-size story; the main basic
|
||||
model and explicit transition passed full Project+SourceBundle, Undo/Redo and
|
||||
reopen on candidate3 at wide size. Exercise new
|
||||
scenario workspace, creation and caller return with real inputs and saved
|
||||
model evidence, then correct and reverify concrete defects.
|
||||
reopen on candidate 3 at wide size. OA B2 Action, State, bound Reuse and Fragment
|
||||
now pass complete model/two-source Create, one Undo, one Redo and final OA
|
||||
reopen/Save with exact original identities. Preserve the existing B3 layer/size
|
||||
scope; do not infer SA B2 or broader camera/focus coverage from these passes.
|
||||
4. Integrate standalone B4 scenario lifetimes and the external independent
|
||||
scenario contract without overwriting local layout work. Resolve source-derived
|
||||
lifetime versus insertion bounds, activation-after-Delete and lane-map issues.
|
||||
@@ -39,12 +62,24 @@ The updated objective explicitly requires functional constraints/calculations,
|
||||
quantities/units and maintained model libraries. Current metadata/includes are
|
||||
insufficient. This work runs independently of useful behavior improvements.
|
||||
|
||||
Peer comment 231 ratifies schema 8/local-definition core steps in an isolated
|
||||
worktree. Coordinate those actual shared types and ownership before local
|
||||
integration; the current local core remains descriptive. Source grammar,
|
||||
evaluation, server/CLI/UI representation and acceptance are separate unfinished
|
||||
steps. Peer956 now reports focus regression5/5 and isolated numeric26/26 plus
|
||||
analysis28/28; their codec/lifecycle work remains isolated. Local integration and
|
||||
coherent union gates remain necessary. Do not replace peer efforts with a
|
||||
parallel local implementation. Comment338 separately reserves our bounded
|
||||
syntax-only outline seam for current-text navigation; its private query module
|
||||
and prepared tests remain uncompiled pending review.
|
||||
|
||||
The newest objective also requires complete uncluttered text-only workflows.
|
||||
Combine the local three-task usability audit with the other host's language/
|
||||
identity/API design. Two concise current-grammar recipes now pass their bounded
|
||||
REST identity/source/persistence experiment. Next evaluate
|
||||
cross-file definitions/references, safe alias rename and identity-preserving
|
||||
patch preview on repeated-name modular models. Do not equate shorter examples
|
||||
REST identity/source/persistence experiment. The published CLI now covers checked
|
||||
stabilization and typed alias rename with exact source-preserving preview/write.
|
||||
Next evaluate cross-file definitions/references and engineering task completion
|
||||
on repeated-name modular models. Do not equate shorter examples
|
||||
or parser throughput with task usability, and do not silently change omissions.
|
||||
|
||||
- Compare real candidate semantics before large changes. Use primary Capella,
|
||||
@@ -55,15 +90,23 @@ or parser throughput with task usability, and do not silently change omissions.
|
||||
- Probe libraries through two projects/two instances, pinned offline content,
|
||||
exports/dependency closure, bindings, distinct origin/local identities, updates
|
||||
with local divergence, detachment and exact transactional rollback.
|
||||
- Run a small pure-core experiment for the selected candidate. Independent
|
||||
criticism must precede broad schema/source/API migration. Retain current typed
|
||||
Project, Command and source-writer boundaries unless evidence requires change.
|
||||
- Review and test the peer-ratified pure core and its explicit migration/admission
|
||||
boundaries before local integration. Retain independent falsifiers and current
|
||||
typed Project, Command and source-writer guarantees across representations.
|
||||
- Implement the ratified contracts across validation, visitors, deletion,
|
||||
identity, OA/SA transitions, source/reST, schema/REST, ergonomic graphical
|
||||
authoring and help. Add real examples and independent parity acceptance.
|
||||
|
||||
## Integration and release
|
||||
|
||||
- GUI/server release 1, `v0.2.0-preview.authoring.20260911`, and standalone CLI
|
||||
release 2, `cli-v0.2.0-preview.authoring.20260911`, are published and read back.
|
||||
Their exact notices, archive, runtime and uploaded-asset evidence is preserved.
|
||||
CLI packaging is integrated at `27df4a3`; instruction sync `07eb3cd` and
|
||||
contextual source checkpoint `df6f595` and its raw evidence are integrated.
|
||||
CLI publication `d95b1ab` and OA native checkpoint `c4bad4b` are also integrated;
|
||||
then publish later coherent milestones under the assigned owner. Preserve each
|
||||
artifact's source/profile/native scope and complete final-release gates separately.
|
||||
- Publish coherent commits and verified bundle transfers through Gitea; keep
|
||||
concise host-scoped handoffs and Wiki. Do not overwrite another host's branch.
|
||||
- Refresh relevant source/schema/example/doc gates and run current core,
|
||||
@@ -71,9 +114,12 @@ or parser throughput with task usability, and do not silently change omissions.
|
||||
- Build matching optimized desktop/server packages. Regenerate complete notices
|
||||
for actual inputs and verify archive contents, hashes and clean-runtime launch.
|
||||
Historical ELF fixtures and build preparation do not replace execution.
|
||||
- Obtain a viable Linux environment and run current GUI/server workflows there.
|
||||
Supported WSL2 failed; no repeated rejected workaround. Continue independent
|
||||
work while the environment question is pending.
|
||||
- Follow the external owner's supported Linux guest route and run current
|
||||
GUI/server workflows when viable. This local host has no usable Linux runtime;
|
||||
supported WSL2 failed. Preserve failed attempts rather than repeating rejected
|
||||
workarounds, and continue independent Windows/semantic work.
|
||||
- After the user reboot, check local Ubuntu registration and launch first. A
|
||||
version2 default alone is not an installed/running Linux environment.
|
||||
- Conduct fresh independent requirements, semantic, usability, architecture,
|
||||
correctness, runtime and documentation reviews. Resolve all material findings,
|
||||
reverify affected behavior and only then declare release completion.
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Restart handoff — 2026-09-11
|
||||
|
||||
Historical reboot checkpoint. User has returned and enabled virtualization;
|
||||
current STATE.md and the postboot native/layout/WSL reports supersede the pause
|
||||
and pending-result wording below. Preserve this record for exact resume history.
|
||||
|
||||
Codex-9e8r6t /root. User explicitly requested a reboot pause to make WSL2/Ubuntu
|
||||
available. Full PROJECT_GOAL remains active and incomplete. Resume only after
|
||||
the user returns; do not schedule automatic work during the reboot.
|
||||
|
||||
## Saved state
|
||||
|
||||
- Branch `codex/release1-9e8r6t`: contextual source `df6f595`, CLI publication
|
||||
evidence `d95b1ab` and complete local OA scenario evidence `c4bad4b` were pushed
|
||||
and read back. The following reboot commit also preserves reviewed WIP below.
|
||||
- Both Windows Studio/server and standalone CLI prereleases remain published.
|
||||
This checkpoint does not update either release or establish Linux acceptance.
|
||||
- Immutable GUI52DE82 native source trial: Lifeline Save-adoption and Chain
|
||||
direct Create each passed complete model/source, one Undo and one Redo with
|
||||
original IDs. Machine direct Create/Save passed six exact files; one Undo/Save
|
||||
passed four reachable/six physical files. Machine Redo/reopen remain pending.
|
||||
Test GUI closed normally, and its returned window was absent at 13:38 UTC.
|
||||
`work` contains the saved Machine Undo state. Do not infer persistent history;
|
||||
use preserved first machine checkpoint for isolated reopen and a fresh trial
|
||||
for missing history coverage. See release-contextual-source-native-20260911.md
|
||||
and experiments/contextual-source-native-20260911/README.md.
|
||||
- Reviewed WIP: source_draft.rs essentials-first layout, explicit wrapped kinds
|
||||
before unbounded parent text, plus creation.rs staged-owner caption fix.
|
||||
Three real Paragraph tests are prepared. First compile failed in test helpers
|
||||
(ambiguous macro and wrong Id constructor); corrected only those helpers.
|
||||
Corrected focused2 was interrupted for this reboot before any tests ran;
|
||||
Clippy/fmt/GUI did not launch. There is NO new passing suite or matching GUI.
|
||||
- Worker release_audit stopped its command with Ctrl+C; all Cargo/rustc/linker
|
||||
processes were absent. All 238 frozen input hashes were unchanged.
|
||||
Final source_draft SHA prefix C8D36BD6; creation SHA prefix 0FB19BE3.
|
||||
Exact freeze inputs3 SHA256
|
||||
`6B3F3088FF18AF3899C3764B3F3671DA9240A5DE184D871BF08F8012456E556B`.
|
||||
|
||||
## Next actions after reboot
|
||||
|
||||
1. Read AGENTS, PROJECT_GOAL, STATE, PLAN and latest Gitea issue 1/2 comments and
|
||||
relevant Wiki. Preserve Codex-956atf canvas/chooser/schema8 and Codex-ytr83r
|
||||
B4/Linux ownership. User issue2 comment250 allows domain-constrained diagram
|
||||
manipulation; arbitrary free movement is not required.
|
||||
2. Recheck `wsl --list --verbose`. Before reboot it reported no installed
|
||||
distribution despite default version2. Launch/setup Ubuntu as needed with
|
||||
the user handling any authentication. Verify a real usable Linux environment
|
||||
before claiming a build. Do not repeat rejected VM workarounds.
|
||||
3. Validate the frozen input manifest, then resume a new focused3 run. Keep
|
||||
focused1 failure and focused2 interrupted evidence. On a pass, run strict
|
||||
desktop all-target Clippy, formatting and matching GUI build; use a distinct
|
||||
immutable stage. No broad full-suite repeat without a new reason.
|
||||
4. Root alone performs native Computer Use with @oai/sky. Relaunch the corrected
|
||||
artifact in a fresh profile and verify initial Name/kind/parent visibility at
|
||||
1100×700, the owner label, direct Lifeline Create, remaining cancellation/
|
||||
recovery and machine history/reopen using independent expected contracts.
|
||||
5. Continue SA B2, basic supplementary workflows, peer integration, complete
|
||||
semantic/text/REST/library work, Windows/Linux packaging and fresh final
|
||||
cross-disciplinary acceptance. The full release remains unfinished.
|
||||
|
||||
Private runtime and build stages under `.local` are retained; no temporary
|
||||
binary, token or credential was committed. Raw interruption/native records are
|
||||
archived separately with exact hashes. All workers are idle for the reboot.
|
||||
+214
-78
@@ -1,7 +1,9 @@
|
||||
# Progress Ledger — first release
|
||||
|
||||
Updated 2026-09-11, Codex-9e8r6t `/root`, Windows host.
|
||||
**Release remains unaccepted; meaningful product and integration work is active.**
|
||||
**Release remains unaccepted. Windows/product work continues; Linux is paused by the user.**
|
||||
The [restart handoff](RESTART_HANDOFF.md) preserves the earlier pause; current
|
||||
results and capacity constraints below supersede its active-status wording.
|
||||
|
||||
## Objective and current source
|
||||
|
||||
@@ -12,14 +14,140 @@ in that file. It requires constraints/calculations, quantities/units and reusabl
|
||||
libraries, plus uncluttered human/AI text-only modeling at small and large scale.
|
||||
Long homogeneous lists and poor behavior editing remain explicit concerns.
|
||||
|
||||
Local branch: `codex/release1-9e8r6t`, base `1797516`, committed head `4bb4aaf`.
|
||||
Named behavior creation, its guide and independent oracle, concise text-first
|
||||
examples and prior integration evidence are committed and remotely transferred.
|
||||
Its final ancestry/guide correction passed full653; post-lint history63, strict
|
||||
Clippy/fmt and matching GUI build passed. Current uncommitted work corrects the
|
||||
oracle's retained-file rule, clarifies source-7 constructor defaults, records
|
||||
native creation and implements contextual prerequisite creation. Preserve all
|
||||
workers' edits. No open Gitea PRs at the latest read, comments through138.
|
||||
Local branch: `codex/release1-9e8r6t`, substantive source checkpoint
|
||||
`df6f59562643b7771ecf0c972f8655f3e3f1c4da`, committed, pushed and read back.
|
||||
It follows the user's instruction sync `07eb3cd`.
|
||||
The preceding committed and pushed code/package checkpoint is
|
||||
`27df4a3945ebc97cd7cbde61f6aeea7a91c680d3`. It includes named behavior creation,
|
||||
source CLI, the nine CLI packaging changes and reviewed evidence. Source CLI
|
||||
semantic commit `01b76a1`, packaging assembly `a0a48e8` and release integration
|
||||
`27df4a3` are distinct. Contextual prerequisite creation, its reports/oracle and
|
||||
40 raw evidence files are integrated in `df6f595`; native acceptance continues.
|
||||
All 238 frozen build inputs and 44 exact index artifacts passed before commit.
|
||||
Gitea issue 1 records the handoff in comment 242. Remote AGENTS.md at blob
|
||||
`4b8465c8993107062ad2974c15a958d449530e92` adds the maintenance instructions
|
||||
announced in comment 229: concise current entrypoints, durable history and
|
||||
coordinated preservation rather than indiscriminate deletion.
|
||||
|
||||
## Current acceptance checkpoint — postboot work
|
||||
|
||||
CLI publication evidence `d95b1ab` and complete OA native evidence `c4bad4b` are
|
||||
also pushed and read back. The reboot checkpoint preserves reviewed layout/owner
|
||||
caption WIP, native evidence and interrupted compiler records; it is not a new
|
||||
accepted build. This update follows published reboot checkpoint
|
||||
`ca53f574e57381a523e946d5277b4081cff74355`; the newer results follow below.
|
||||
After successive user reboots, the latest observed boot is13:59:33.500 UTC.
|
||||
|
||||
The postboot focused3 gate reached a real terminal before that reboot:25 passed,
|
||||
one new long-parent fixture assertion failed; no production visibility assertion
|
||||
failed. A reviewed test-only stronger fixture is frozen for focused4, preserving
|
||||
the same215-pixel host and all visibility guarantees. Automatic approval review
|
||||
blocked both exact proposed incremental-cache removal attempts before execution,
|
||||
with only `blocked by policy`; no deletion ran. Nondeleting NTFS compression
|
||||
recovered capacity instead. The incremental-cache pass was partially applied
|
||||
then intentionally stopped; the generated-binary pass completed exit0 across
|
||||
282 files with every SHA256 unchanged. C had11,777,519,616 bytes free afterward.
|
||||
Supported Ubuntu26.04 installation finished exit0 at14:36:46 UTC (session32405),
|
||||
with10.51GB host space remaining. First actual root shell reports Ubuntu26.04
|
||||
LTS, x86_64 Linux6.18.33.2-microsoft-standard-WSL2 and a mounted root filesystem.
|
||||
A systemd root-user-session warning remains recorded. The user316 mirrored/DNS
|
||||
settings were applied and runtime mirrored mode verified, but the guest had only
|
||||
loopback, no route and failed DNS/HTTPS. Read-only host IPv6 evidence is a cause
|
||||
hypothesis only; no global registry/adapter/VPN/firewall change was made. User328
|
||||
now supersedes that trial with VirtioProxy and explicitly makes AmneziaWG
|
||||
immutable, including inspection. Its exact VirtioProxy-only config is saved;
|
||||
both the initial startup and one persistent root-shell retry after compilation
|
||||
ended with CreateVm/0x800705b4 before guest commands. A distinct WslService-only
|
||||
restart then failed at Windows service access; it remains Running. No elevation
|
||||
workaround, extra launch or other service/network change followed. This is a
|
||||
startup timeout, not a measured VirtioProxy network failure. Root rechecked the
|
||||
Gitea issue through comment348 after renewed user steering: owner328 remains
|
||||
the latest posted solution and is already applied. Verified official Rust archives
|
||||
and all60 exact Ubuntu packages are prepared via Windows HTTPS; Ubuntu
|
||||
signature verification and installation remain mandatory. Windows
|
||||
focused4 passed26/26 after11m05 compile and9.54s test execution, retaining every
|
||||
geometry assertion. Strict all-target Clippy and workspace format also passed.
|
||||
Matching GUI compilation also passed; session87425 is terminal and no compiler
|
||||
lease remains live. Immutable GUI SHA256 is
|
||||
`5657BAB5C841939B66F901EFE6C0FFB2D7CBBE8CC5F111A0CA3DE8073D3846CE`.
|
||||
All238 actual source inputs were rehashed unchanged. After the26 affected tests,
|
||||
the immutable complete desktop executable passed all679 tests at15:47:53 UTC,
|
||||
zero failed/ignored/filtered, exit0, one test thread and ordinary Windows stack.
|
||||
The user subsequently directed that Linux builds and
|
||||
checking be skipped until they notify us that WSL networking is resolved. Linux
|
||||
setup, launches, diagnostics, builds and checks are paused; preserve current
|
||||
configuration and inputs. This direction is recorded in Gitea comment356 and
|
||||
supersedes service-access next steps. See
|
||||
[WSL readiness](release-wsl-readiness-9e8r6t-20260911.md).
|
||||
|
||||
Fresh GUI5657 v2 Lifeline baseline opened through the native file picker. At
|
||||
1100x700 client size with both panels, child Name, Activity, OA root and pinned
|
||||
Back/Use controls were visible; a maximize/restore retained both raw names.
|
||||
The completed recovery record passed exact accepted-baseline, raw parent/child,
|
||||
kind/root and reserved-ID checks before a controlled isolated process stop.
|
||||
Recovery restored an unsaved local copy with an exactly equal accepted baseline
|
||||
and authored behavior/identities. Child Escape retained the parent; a new blank
|
||||
child, temporary Use and parent Cancel left nothing to undo. Save As to a fresh
|
||||
destination passed the unchanged core oracle with exactly two source files.
|
||||
The isolated process closed normally. A fresh direct Lifeline trial subsequently
|
||||
passed actual Create-before-Save, one Undo/Save and one Redo/Save against the
|
||||
complete independent model/source/original-ID contract. Fresh Machine owner
|
||||
visibility at minimum size, actual Create and open, one Undo/Save, one Redo/Save
|
||||
and real-picker reopen/SA/Save also pass the unchanged complete contract. All
|
||||
new source and consumer identities persist; Undo retains only the two proven
|
||||
generated files. The final six-file reopen equals Redo exactly, and all isolated
|
||||
native processes closed normally. See the
|
||||
[v2 native report](release-contextual-source-native-v2-20260911.md).
|
||||
|
||||
Peer956 comment338 reserves our bounded syntax-only language outline seam;
|
||||
their codec/lifecycle scope remains separate. The query experiment is private,
|
||||
uncompiled and not integrated. The current design is
|
||||
[text navigation](release-text-navigation-design-20260911.md); a discovered
|
||||
Unicode path-collision mismatch is being corrected in a separate proposal.
|
||||
Independent outline review additionally requires rejecting noncanonical UUID
|
||||
spellings as authored navigation anchors and recommends folding paths once.
|
||||
Root verified the parser mismatch; the author is preparing a separate v2 patch.
|
||||
|
||||
- CLI `BAD169F8…E3559`: author 12/12, strict all-target Clippy/format/build pass;
|
||||
independent 183 assertions across 21 fresh processes pass. All four committed
|
||||
experiment files retain their measured bytes. JSON describes complete changed
|
||||
files, not a saved whole-candidate plan. See the two source-CLI reports.
|
||||
- Contextual source first frozen artifact `6E677F58…8CC0`: focused 22/22 and full
|
||||
desktop 675/675 pass, 448.33 seconds execution. The later inactive-source origin
|
||||
bypass and guide wording are fixed and independently reviewed. Final source
|
||||
across 13 desktop files passed 23 focused tests, 3 guide tests, strict all-target Clippy,
|
||||
matching GUI build and formatting. GUI SHA256 starts `52DE82E4`; its test
|
||||
inventory is 676. There is no full 676-suite pass. Root verified the frozen
|
||||
inputs/executable and launched PID 7212 in the isolated
|
||||
`.local/native-qa/contextual-source-20260911-v1` stage. Lifeline Save-adoption
|
||||
and Chain direct Create each pass complete model/source and one Undo/Redo.
|
||||
Machine direct Create/Save and Undo/Save pass; its Redo remains pending.
|
||||
A fresh-profile postboot Open/SA view/Save now passes complete six-file model,
|
||||
source and original identities. That GUI closed normally. See
|
||||
[native results](release-contextual-source-native-20260911.md).
|
||||
- Native scenario B3: both OA use-return paths pass wide and minimum sizes;
|
||||
both SA paths pass minimum focused canvas. Pending disabled Open preserves the
|
||||
draft; explicit Cancel/Save matches exact baseline. B2 OA Action, nested State,
|
||||
explicitly bound Reuse and Fragment all pass independent complete Project and
|
||||
two-source Create/Save, one Undo/Save and one Redo/Save predictions, retaining
|
||||
original exact identities. Final OA reopen/Save also passes. SA B2 remains
|
||||
pending locally; B3's earlier size/layer scopes are unchanged. See
|
||||
[local scenario native evidence](release-scenario-native-local-20260911.md).
|
||||
- Root published GUI/server release **1**, `v0.2.0-preview.authoring.20260911`,
|
||||
at 12:40:51 UTC, using source `2ec72d4`, D4D9 GUI and EFEE server.
|
||||
ZIP `664F30B6…` has 559 files and passed
|
||||
strict notices, independent complete archive/source correspondence, clean GUI
|
||||
launch/example/Save/help/close and server create/get/restart persistence. All
|
||||
three release assets passed full downloaded readback. Reports/raw evidence are
|
||||
committed in `6a61061`; see [GUI/server publication](release-authoring-prerelease-published-20260911.md).
|
||||
This is a prerelease, not full OA/SA acceptance.
|
||||
- Root published CLI release **2**, `cli-v0.2.0-preview.authoring.20260911`, at
|
||||
12:50:39 UTC. Tag and release readback match `27df4a3`, draft false and
|
||||
prerelease true. ZIP `2B051F8C…` has 114 files, 27 notice packages and exact
|
||||
BAD169F8/F456 executable/runtime. Independent clean CLI 156 assertions across
|
||||
10 invocations pass; all three uploaded assets passed downloaded hash readback.
|
||||
[Publication report](release-cli-prerelease-published-20260911.md) preserves
|
||||
the exact records and distinguishes local CRLF notes from the public LF body.
|
||||
|
||||
## Completed work and scoped evidence
|
||||
|
||||
@@ -27,33 +155,34 @@ workers' edits. No open Gitea PRs at the latest read, comments through138.
|
||||
`codex/palette-authoring-20260910`. Candidate 2 focused tests, GUI build and
|
||||
strict desktop Clippy passed. Its native F2 rename/Save/Undo/Redo matched exact
|
||||
three-file expectations; Entity creation matched the complete independent
|
||||
model/source oracle. Candidate3 completed ordinary Activity, existing placement,
|
||||
model/source oracle. Candidate 3 completed ordinary Activity, existing placement,
|
||||
allocation, direct Interaction and F2: complete basic model/four sources PASS.
|
||||
Explicit SA actor/destination transition passed complete model/six sources;
|
||||
Undo four-source baseline, Redo six-source result and reopen all passed. Six
|
||||
physical files are byte-identical across reopen/reuse-preview Cancel/Save.
|
||||
Immutable checkpoints/logs: `.local/native-qa/palette-20260910-v3/`.
|
||||
- Recovery naming autofocus: `31b7dc3`, 13 focused checkpoint tests passed after
|
||||
integrated compilation. Its new autofocus behavior still needs native check.
|
||||
integrated compilation. The later SA behavior draft's native recovery,
|
||||
autofocus and Escape evidence is recorded in the creation report below.
|
||||
- Other-host behavior/topology/scenario/history: original `01bb52a` integrated
|
||||
as `057eddd`; constructor cache fix `b6b76ef` integrated as `a70de55`; explicit
|
||||
history seed fix `4ecad78` cherry-picked as `81668f9`.
|
||||
- Corrected immutable desktop artifact completed **631/631 passed**,408.18s,
|
||||
exit0; all three prior618-artifact failures are fixed. Exact artifact/logs in
|
||||
`.local/scenario-workspace-20260910/tests-81668f9/`. It covers3978bbe workspace,
|
||||
- Corrected immutable desktop artifact completed **631/631 passed**, 408.18 seconds,
|
||||
exit 0; all three prior 618-artifact failures are fixed. Exact artifact/logs in
|
||||
`.local/scenario-workspace-20260910/tests-81668f9/`. It covers `3978bbe` workspace,
|
||||
Back/OpenUse guards and both history fixes, but not later Sensor/creation work.
|
||||
- A real same-size owner/document Sensor regression led to `d114a27`; affected
|
||||
scenario53/53 passed. Current native candidate3 predates that correction.
|
||||
Mounted workspace tests cover500×570 and wide geometry; native current-build
|
||||
scenario acceptance remains pending.
|
||||
- Named local creation passed final21/21 and guide3/3 after ancestry-label
|
||||
correction. The matching immutable desktop suite passed **653/653**,362.83s,
|
||||
zero failures/ignored; exact artifact864B0F…E86/log/result under
|
||||
scenario 53/53 passed. Historical native candidate 3 predates that correction.
|
||||
Mounted workspace tests cover 500×570 and wide geometry; later local native
|
||||
B2/B3 results have the separate scopes recorded above.
|
||||
- Named local creation passed final 21/21 and guide 3/3 after ancestry-label
|
||||
correction. The matching immutable desktop suite passed **653/653**, 362.83 seconds,
|
||||
zero failures/ignored; exact artifact `864B0F…E86` and logs under
|
||||
`.local/behavior-creation-20260911/tests-final`. Independent integration review
|
||||
found no additional correctness blocker. StrictClippy/all-targets/-Dwarnings
|
||||
and workspacefmt pass after one behavior-equivalent history_fields let-chain
|
||||
correction; affected history63/63 and matching GUI rebuild pass. Current native
|
||||
GUI is `gui-verified` SHA D4D9C2BD…B20C31. At actual 1100×700 client size,
|
||||
found no additional correctness blocker. Strict Clippy with all targets and
|
||||
`-D warnings`, plus workspace formatting, pass after one behavior-equivalent history_fields let-chain
|
||||
correction; affected history 63/63 and matching GUI rebuild pass. This frozen
|
||||
creation GUI is `gui-verified` SHA D4D9C2BD…B20C31. At actual 1100×700 client size,
|
||||
named OA Process, explicit ParticipantInteraction Scenario with capability
|
||||
context and SA owner-linked State machine plus requested first view passed
|
||||
complete independent Project/SourceBundle checks at 7/8/9 files. Each single
|
||||
@@ -81,18 +210,19 @@ workers' edits. No open Gitea PRs at the latest read, comments through138.
|
||||
Historical Windows-input ZIP has 557 files; real Linux notices close over
|
||||
339 packages/681 files. Linux archive adapter used inert ELF fixtures, not
|
||||
actual current application binaries. Exact Fira/Cantarell notice Git bytes
|
||||
were independently verified. Current-source notices need regeneration.
|
||||
were independently verified. Later exact GUI/server and CLI packages have
|
||||
their own regenerated notices and published artifact evidence above.
|
||||
- Independent native Capella creation study completed, saved and closed cleanly;
|
||||
report `release-capella-creation-study-20260910.md` is complete. Viewpoint-first
|
||||
naming and distinct local create/existing selection inform the implementation.
|
||||
- Textual usability audit completed three static tasks and example counts. The
|
||||
existing grammar already permits omitted initial IDs/defaults; key gaps are
|
||||
cross-file reference context, safe alias refactoring and reviewed patches.
|
||||
Source7 EBNF/schema documentation and viewpoint omission guidance are corrected;
|
||||
Source-7 EBNF/schema documentation and viewpoint omission guidance are corrected;
|
||||
generated language HTML passed strict docutils. Both concise snippets passed
|
||||
26 real REST requests: identity-only stabilization, exact no-op/name edit,
|
||||
stale/invalid nonmutation and restart persistence. All120 current core/server
|
||||
files match the preserved source7 binary's documented snapshot. This closes
|
||||
stale/invalid nonmutation and restart persistence. All 120 current core/server
|
||||
files match the preserved source-7 binary's documented snapshot. This closes
|
||||
the bounded recipe gap, not large-model or native text-editor acceptance. The
|
||||
verified recipe is now `examples/text-first` and in the language reference.
|
||||
|
||||
@@ -105,34 +235,33 @@ Detailed evidence: [integrated gates](release-integrated-gates-20260910.md),
|
||||
|
||||
## Active ownership and execution
|
||||
|
||||
- Root: integration, common ledgers, source/API checks and exclusive native input.
|
||||
Full653 is terminal PASS. V4 creation/Undo/Redo/reopen is complete; actual SA
|
||||
pending-draft crash recovery is active on the same verified GUI. The forced
|
||||
interruption targeted only isolated QA PID5184 after checkpoint persistence;
|
||||
restarted PID1284/window6161106 uses the same private profile and runtime.
|
||||
Recovery is now terminal PASS: full draft fields/IDs retained, autofocus,
|
||||
first Escape and a fresh Save As preserve the complete nine-file model. The
|
||||
current wide GUI is saved on `checkpoint-recovery-cancel/project.arcadia`;
|
||||
treat that checkpoint as immutable and reopen a work copy before editing.
|
||||
- `release_audit`: prior creation and constructor reports frozen. Now owns the
|
||||
staged prerequisite creation implementation for Scenario Lifeline/process Work/
|
||||
New machine owner, semantic first-action prompts, relevant App/recovery/guide
|
||||
wiring and focused tests. Cargo writer is reserved to this worker when needed;
|
||||
freeze source during tests and request independent review before integration.
|
||||
- `behavior_audit`: v2 native oracle frozen, warnings-denied compilation and
|
||||
falsifiers pass, executable056EEFD…F6A36. Now independently challenges staged
|
||||
source semantics and expected behavior; no production/Cargo/native ownership.
|
||||
- `palette_finish`: native report/evidence frozen: 13 creation oracle commands
|
||||
and 19 separate recovery checks pass. Now owns new `crates/oa-cli` for local
|
||||
source check/lint, preview/explicit-write stabilization and alias rename/diff.
|
||||
Uses existing source-file diagnostics/expectations/journal writer, no grammar
|
||||
or core changes. Root owns workspace/lock integration; serialize Cargo with
|
||||
release_audit. Preview UUIDs remain candidates until that invocation writes.
|
||||
- Separate host Codex-956atf: standalone scenario lifetime projection, independent
|
||||
native scenario oracle, quantity/calculation design and library design. It has
|
||||
its own cold toolchain/results. Its source-only reviews are not local passes.
|
||||
Root owns integration, native input, commits, publication and Wiki updates.
|
||||
GUI5657 native trials and the complete679 desktop tests are terminal; no owned
|
||||
Studio, compiler or test process remains. All Linux actions are user-paused.
|
||||
|
||||
Verified bundles for eb5161b and 4ecad78 are retained in
|
||||
- `release_audit`: full-suite/recovery archives frozen; now audits updated
|
||||
Windows package inputs and per-binary source provenance without building.
|
||||
- `behavior_audit`: Lifeline evidence frozen; prepares separately reviewed v2
|
||||
bounded outline/query proposals. No production application or compiler lease.
|
||||
- `linux_readiness`: Linux remains paused. Completed independent outline review;
|
||||
now preserves only the completed Windows Machine evidence.
|
||||
- Codex-956atf: owns chooser/workspace/focus, shared canvas shell and isolated
|
||||
schema8/local-definition core. Reported focus5/5, analysis28/28 and numeric26/26
|
||||
plus core Clippy; codec/lifecycle work remains separate. None of that later
|
||||
peer source is integrated locally. Our bounded language outline seam is
|
||||
reserved by comment338; source8/codec ownership remains theirs.
|
||||
- Codex-ytr83r: owns external B4 Scene/lifetime integration and Linux packaging.
|
||||
Linux work is paused; peer host results cannot substitute for local execution.
|
||||
|
||||
User issue2/comment250 calls for consistent, domain-constrained interactive
|
||||
diagrams, not necessarily arbitrary placement. Codex-956atf owns the shared
|
||||
canvas-shell implementation in an isolated worktree (comment261). Existing
|
||||
technical Canvas widgets and source cards do not close this requirement.
|
||||
Local Ubuntu26.04 is installed; the last two startup attempts timed out before
|
||||
guest execution. Preserve that history and verified inputs while waiting for
|
||||
the user's explicit notice that WSL networking is resolved.
|
||||
|
||||
Verified bundles for `eb5161b` and `4ecad78` are retained in
|
||||
`.local/integration-20260910`. Local refs `codex/behavior-snapshot-eb5161b` and
|
||||
`codex/history-seed-20260910` preserve exact commits. B4 lifetime projection and
|
||||
its guide delta are not integrated yet; coordinate shared scene wiring. Review
|
||||
@@ -144,57 +273,64 @@ unassigned-lane map differences that must be addressed before acceptance.
|
||||
1. Finish native basic supplementary move/camera/focus/minimum matrix and current
|
||||
scenario/process/state tasks. Main basic/transition/history/reopen passed at
|
||||
wide size. Check raw drafts, recovery, exact source and real task completion.
|
||||
2. Implement/review/natively verify contextual
|
||||
missing-source and first-action flows. Named creation/history/reopen passed;
|
||||
operand-editing and qualified Action allocation remain separate open work.
|
||||
2. Publish the verified contextual missing-source/source-form milestone with
|
||||
truthful Windows package inputs. Named and contextual creation/history/reopen
|
||||
pass; operand-editing and qualified Action allocation remain separate work.
|
||||
3. Constraints/calculations and quantity compatibility are currently descriptive
|
||||
metadata; same-project includes are not maintained cross-project libraries.
|
||||
Independent semantic designs and falsification are active before broad schema
|
||||
changes. See [library review brief](release-library-candidate-review-20260910.md).
|
||||
Peer schema 8/local-definition implementation is now ratified and staged in
|
||||
its isolated worktree (Gitea comment 231); local integration and all required
|
||||
representations/acceptance remain pending. See [library review brief](release-library-candidate-review-20260910.md).
|
||||
Other-host proposals expose cosmetic package revision/type compatibility,
|
||||
subjectless analysis closure and text-only instance normalization decisions;
|
||||
full reports and paired criticism are now available from verified c6d296a.
|
||||
full reports and paired criticism are now available from verified `c6d296a`.
|
||||
Its 218-assertion maintenance experiment supports explicit baseline values
|
||||
with one-level Case overrides; complete freeze and effective-case evaluation
|
||||
are required. Refined baseline/library contracts remain active externally.
|
||||
4. Implement and evaluate the source-only CLI baseline, then compare language
|
||||
improvements using both local usability and complete other-host proposals.
|
||||
4. Build on the published standalone CLI and compare language improvements using
|
||||
both local usability and complete other-host proposals.
|
||||
Current grammar+tooling, domain syntax, namespaces and portable identity
|
||||
modules remain distinct candidates. Concise examples/CLI alone do not prove
|
||||
uncluttered modular engineering authoring or safe large-model changes.
|
||||
5. Run coherent current desktop/core/server, specification, examples, REST and
|
||||
optimized packaging gates after integration. Prior passes remain scoped.
|
||||
6. Current Linux runtime requires a viable environment: supported WSL2 import
|
||||
failed once with HCS_E_HYPERV_NOT_INSTALLED; no distro registered. The user
|
||||
has a pending environment question. No repeated denied QEMU workaround.
|
||||
6. Obtain current Linux runtime acceptance through the external owner's supported
|
||||
guest route. Local WSL2 import failed with HCS_E_HYPERV_NOT_INSTALLED and no
|
||||
distro registered; this host still has no usable Linux runtime. Preserve
|
||||
recorded route failures and do not repeat a rejected workaround.
|
||||
7. Fresh independent cross-disciplinary release review remains required after
|
||||
actual workflow and semantic acceptance, with all material findings resolved.
|
||||
|
||||
## Handoff and publication
|
||||
|
||||
Use Gitea issue #1 and current Wiki to coordinate as **Codex-9e8r6t**. Read before
|
||||
resuming; preserve the other host's work. Direct Git push now fails authentication;
|
||||
anonymous fetch and Gitea MCP still work. Integration3978bbe was published and
|
||||
resuming; preserve the other host's work. User issue 1 comment 178 authorizes programmatic
|
||||
reuse of existing MCP credentials for Git/REST without printing or committing them.
|
||||
Authenticated non-force push and remote readback now pass; current branch is
|
||||
available directly. Historical bundle transfers remain reproducible. Integration `3978bbe` was published and
|
||||
independently fetched/hash-verified as a Git bundle on
|
||||
`codex/integration-transfer-20260910`; Wiki `Integration3978bbe` and issue#97 own
|
||||
`codex/integration-transfer-20260910`; Wiki `Integration3978bbe` and issue #97 own
|
||||
exact transfer instructions. Other host has integrated it and an equivalent
|
||||
Sensor fix. Creation4bb4aaf was likewise published on
|
||||
Sensor fix. Creation `4bb4aaf` was likewise published on
|
||||
`codex/integration-transfer-20260911`, file
|
||||
`harness/transfers/creation-4bb4aaf.bundle.b64`: decoded105022 bytes,
|
||||
`harness/transfers/creation-4bb4aaf.bundle.b64`: decoded 105022 bytes,
|
||||
SHA256 `0DEFAE91A56430076C432758F923BC0675911DA9FA7588C9961FF15F47EAEBF6`,
|
||||
prerequisite3978bbe. Anonymous Git readback, strict base64 length/hash check and
|
||||
`git bundle verify` passed; issue#128 gives selective integration instructions.
|
||||
Publish subsequent corrected oracle/native/default evidence similarly; preserve
|
||||
the other host's later B4/reference chooser/design work and avoid duplicates.
|
||||
prerequisite `3978bbe`. Anonymous Git readback, strict base64 length/hash check and
|
||||
`git bundle verify` passed; issue #128 gives selective integration instructions.
|
||||
Corrected oracle/native/default evidence is published as `2ec72d4` on the same
|
||||
branch, file `harness/transfers/evidence-2ec72d4.bundle.b64`: decoded 185563 bytes,
|
||||
SHA256 `F74E14EE394BCC026E24987C8526AA7E769DDE748FE38117532824EC19AE159F`,
|
||||
prerequisite `4bb4aaf`. Anonymous readback/hash and bundle verification pass (#150).
|
||||
Preserve the other hosts' B4/reference chooser/design work and avoid duplicates.
|
||||
|
||||
Other-host c6d296a transfer is verified and imported as local
|
||||
Other-host `c6d296a` transfer is verified and imported as local
|
||||
`codex/behavior-snapshot-c6d296a`: 334830 bytes,
|
||||
SHA256 `526A80E2D32ED0E57A7B2372B5F02D4652E8751DFEBA81953C4F045225D6AACB`,
|
||||
prerequisite1797516, from `codex/behavior-transfer-20260910` file
|
||||
prerequisite `1797516`, from `codex/behavior-transfer-20260910` file
|
||||
`harness/transfers/behavior-c6d296a.bundle.b64`. Selected analysis/library/text
|
||||
reports, criticism, experiments and independent scenario oracle are restored;
|
||||
51 evidence files compare byte-for-byte with Git blobs. No source/ledger merge.
|
||||
Issue#136/#143 and refreshed Wiki Authoring20260911 record the handoff.
|
||||
Issue comments 136/143 and Wiki `Authoring20260911` record the handoff.
|
||||
|
||||
The old ledgers, including all historical platform and native evidence, were
|
||||
archived byte-for-byte before this consolidation in
|
||||
|
||||
+88
-26
@@ -1,6 +1,22 @@
|
||||
# Task Ledger — first release
|
||||
|
||||
Updated 2026-09-11 by Codex-9e8r6t `/root`. Release not accepted.
|
||||
Updated 2026-09-11 by Codex-9e8r6t `/root`. Full release not accepted.
|
||||
|
||||
User resumed after enabling virtualization and explicitly authorized installing
|
||||
Ubuntu26.04 in WSL2. [RESTART_HANDOFF.md](RESTART_HANDOFF.md) is the historical
|
||||
pause; STATE.md owns current capacity, compiler and native status.
|
||||
User also explicitly permits disk cleanup including caches. Both scoped cache
|
||||
deletion commands were rejected before execution; nondeleting compression
|
||||
recovered space with all282 generated-binary hashes unchanged. Ordinary Ubuntu
|
||||
installation and an initial actual WSL2 root shell passed. Current VirtioProxy
|
||||
startups fail before guest execution, and a distinct WslService restart was
|
||||
denied by OS permissions. Owner328 remains the newest WSL solution after the
|
||||
latest issue check through348; its exact configuration is already applied.
|
||||
Five Rust components and60 apt packages are downloaded and hash-verified;
|
||||
guest signature verification/install and application acceptance remain pending.
|
||||
The user's latest direction pauses Linux work until they notify us that WSL
|
||||
networking is resolved. Continue Windows/product work; preserve existing Linux
|
||||
configuration, verified inputs and evidence without further setup/checks.
|
||||
|
||||
## Goal and success criteria
|
||||
|
||||
@@ -27,6 +43,14 @@ passing checks and fresh independent cross-disciplinary review.
|
||||
- Gitea coordination and shared Wiki updates are required. Identify host and
|
||||
worker consistently and preserve overlapping work. Explicit project messages
|
||||
are authorized; unrelated external messages are not.
|
||||
- Updated AGENTS requires runnable versioned milestone prereleases. User
|
||||
issue 1 comment 178 authorizes reusing existing MCP credentials programmatically for
|
||||
Git push and REST asset upload, without printing or committing credentials.
|
||||
- Remote AGENTS.md, blob `4b8465c8993107062ad2974c15a958d449530e92`, adds concise
|
||||
harness/Gitea maintenance and preservation of useful historical knowledge
|
||||
(user comment 229). Root's instruction sync `07eb3cd` is integrated;
|
||||
contextual source `df6f595`, CLI publication `d95b1ab` and OA native evidence
|
||||
`c4bad4b` are committed and pushed.
|
||||
|
||||
## Verified facts
|
||||
|
||||
@@ -35,38 +59,65 @@ The current model has one typed core, validated atomic commands and coordinated
|
||||
Project/SourceBundle history shared by desktop and REST. Included files share
|
||||
one global namespace. Current Constraint expressions are strings; numeric unit
|
||||
strings do not convert values or establish dimensional compatibility. There is
|
||||
no package/version/instance/update contract for cross-project libraries.
|
||||
no locally integrated package/version/instance/update contract for cross-project
|
||||
libraries; peer implementation is tracked separately below.
|
||||
|
||||
Candidate3 completed the main basic/transition/history/reopen story with exact
|
||||
four/six-source independent model oracles; supplementary native cases remain.
|
||||
Corrected immutable desktop631/631 passed; later Sensor correction passed53/53.
|
||||
Final creation21/guide3 and matching full desktop653/653 passed after ancestry
|
||||
label correction. StrictClippy/fmt pass after one behavior-equivalent history
|
||||
let-chain rewrite; affected history63 and matching GUI build pass. Native named
|
||||
creation passes complete model and 7/8/9-source oracles, individual Undo/Redo and
|
||||
byte-exact nine-file reopen at actual minimum size. Cancellation preserves the
|
||||
six-file baseline. Blank process/scenario canvases provide no useful first-action
|
||||
prompt; this is an observed usability finding. SA draft recovery remains active. Mounted
|
||||
layout tests establish pane geometry, not native task acceptance. Packaging checks
|
||||
and independent review are scoped to supplied binaries/fixtures, not release
|
||||
acceptance. Supported WSL2 import failed; a current Linux runtime is unavailable.
|
||||
The main basic/transition/history/reopen story passed exact independent model
|
||||
and four/six-source checks; supplementary native cases remain. Named creation
|
||||
passed 7/8/9-source oracles, one Undo/Redo and byte-exact reopen at actual minimum
|
||||
size. Cancellation retained its six-file baseline; SA draft recovery retained
|
||||
fields/identities, autofocus and Escape/Save As behavior. The D4D9 blank-canvas
|
||||
finding motivated the newer first-action implementation. Detailed historical
|
||||
suite and native scopes remain in [STATE.md](STATE.md) and its linked reports.
|
||||
Mounted geometry and bounded package passes do not establish full release
|
||||
acceptance. This local host has installed Ubuntu26.04 but lacks a currently
|
||||
usable guest session, installed build prerequisites or Linux application pass.
|
||||
|
||||
Current grammar supports omitted initial IDs/defaults, lexical ownership, forward
|
||||
references and preserved source. Static audit found no exposed project-wide
|
||||
reference navigation/alias refactor; current Find searches the active buffer.
|
||||
The process example has128lines/14UUIDs/31empty-default lines, while meaningful
|
||||
shorter source is possible. Two concise snippets passed26 real REST requests,
|
||||
references and preserved source. The earlier desktop audit found no exposed
|
||||
project-wide reference navigation/alias refactor; its Find searched the active
|
||||
buffer. The later CLI supplies typed alias rename. The audited process example
|
||||
had 128 lines, 14 UUIDs and 31 empty-default lines, while meaningful shorter
|
||||
source is possible. Two concise snippets passed 26 real REST requests,
|
||||
including identity-only normalization, exact name-only edits, rejected writes and
|
||||
restart persistence. Counts and this small trial prove neither improved native
|
||||
usability nor large-project performance.
|
||||
|
||||
## Assumptions
|
||||
CLI tooling is implemented, integrated and published: semantic source `01b76a1`,
|
||||
packaging assembly `a0a48e8`, release integration `27df4a3`. Author 12 tests and
|
||||
independent 183 semantic assertions pass; independent clean-package review adds
|
||||
156 assertions across 10 processes. This is a bounded source-editing tool, not
|
||||
proof of complete large-model language ergonomics.
|
||||
|
||||
GUI/server release 1 and standalone CLI release 2 are published with runnable
|
||||
Windows artifacts, full dependency notices and downloaded asset verification.
|
||||
Independent archive/source and clean runtime checks pass in their declared scopes.
|
||||
See [CLI publication evidence](release-cli-prerelease-published-20260911.md).
|
||||
The newer 13-file contextual-source slice is committed/pushed as `df6f595`,
|
||||
with its independent oracle and exact raw evidence. It passed focused 23, guide 3, strict
|
||||
Clippy, matching GUI build and formatting. The full 675 suite covers only its
|
||||
predecessor; no full 676 suite has run. Root launched the exact 52DE82 GUI in
|
||||
isolation: Lifeline Save-adoption and Chain direct Create pass complete source,
|
||||
one Undo and one Redo. Machine direct Create and one Undo pass; Redo/reopen are
|
||||
pending for Redo. An isolated postboot real Open/SA view/Save passed the complete
|
||||
machine prediction and exact six-file equality; the app closed normally.
|
||||
Later layout/caption source was independently reviewed. Postboot focused3 ran25
|
||||
passing tests and one overflowing-fixture assertion failure. The stronger
|
||||
test-only fixture is frozen; its execution and new GUI remain pending.
|
||||
|
||||
Local OA B2 now passes all four Action/State/explicitly bound Reuse/Fragment
|
||||
Create, one Undo/Save, one Redo/Save and final OA reopen/Save against independent
|
||||
complete model/two-source predictions and original exact identities. SA B2 is
|
||||
pending locally. Existing B3 OA wide/minimum and SA minimum return scopes remain
|
||||
unchanged; neither these passes nor mounted geometry tests imply broader acceptance.
|
||||
|
||||
## Assumptions
|
||||
- Contextual named creation, remaining-height canvas and local source insertion
|
||||
can reduce actual authoring detours. Native engineer tasks must establish this.
|
||||
- A bounded pure calculation/quantity model and pinned library content may fit
|
||||
the existing typed core better than a general-purpose metamodel rewrite.
|
||||
Independent designs and experiments must test this before ratification.
|
||||
Peer-ratified core staging must still be checked against independent engineering
|
||||
tasks and integrated across all required representations.
|
||||
- Existing OA/SA semantics provide a useful foundation; neither their presence
|
||||
nor old acceptance proves full conformance to the updated release objective.
|
||||
|
||||
@@ -94,21 +145,32 @@ usability nor large-project performance.
|
||||
current parent draft, then validate/adopt source and consumer atomically. This
|
||||
preserves intent and one-step history; a separate Architecture excursion or
|
||||
early source commit loses those guarantees. Initial Lifeline/process Work/
|
||||
machine-owner adapters and semantic first-action prompts are being implemented
|
||||
and independently challenged; acceptance remains pending. See the
|
||||
machine-owner adapters and semantic first-action prompts are implemented,
|
||||
reviewed and integrated with focused gates passed; scoped native results are
|
||||
above, with remaining acceptance still open. See the
|
||||
[bounded plan](release-contextual-source-creation-plan-20260911.md).
|
||||
- Scenario workspace: compact header, optional Tools/Selection shelves, actual
|
||||
remaining-height canvas/form, pinned actions, independent scrolling and
|
||||
explicit Fit/Focus. Mounted tests support this choice; native proof pending.
|
||||
- Quantities/calculations: compare additive pure analysis records, extension of
|
||||
existing fields and external evaluation. No broad schema decision yet.
|
||||
- User issue2/comment250 clarifies that diagram manipulation may respect
|
||||
sequence/domain constraints. Codex-956atf owns a shared canvas-shell redesign;
|
||||
the existing controls and supporting source-card fixes do not close the issue.
|
||||
- Quantities/calculations: peer comment 231 records ratified schema 8/local
|
||||
definitions and actual shared analysis/core types under implementation in
|
||||
isolated `codex/analysis-core-20260911`. This is not a local schema admission,
|
||||
evaluator or graphical/source/API parity pass; the local core remains descriptive.
|
||||
- Libraries: compare copied source, live references, generic definition/usages
|
||||
and pinned typed packages with explicit mappings and reviewed updates.
|
||||
[Falsification brief](release-library-candidate-review-20260910.md) records
|
||||
identity, dependency, offline and conflict requirements. No ratified winner.
|
||||
identity, dependency, offline and conflict requirements. Refined peer baseline,
|
||||
Case, full-freeze and exact-pin/equivalence contracts are ratified externally;
|
||||
their local integration and executable lifecycle acceptance remain pending.
|
||||
- Text authoring: use existing omission/default/identity contracts for concise
|
||||
experiments; compare source navigation/refactoring/patch assistance before
|
||||
grammar redesign. No namespace, hidden identity or omission change ratified.
|
||||
- Reference chooser: peer comment 224's corrected focus ownership, nested-scroll
|
||||
reveal and mounted regressions are prepared, not executed. Preserve that
|
||||
ownership and wait for its source/test handoff.
|
||||
|
||||
Long-lived decisions remain in [DECISIONS.md](DECISIONS.md). New user scope and
|
||||
normative contracts supersede older prototype exclusions.
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
# CLI prerelease publication records — 2026-09-11
|
||||
|
||||
These four files are exact byte copies from `.local/cli-packaging-20260911/`.
|
||||
They contain sanitized publication results and release prose only. No credential,
|
||||
configuration, authentication helper or upload script is included.
|
||||
|
||||
| File | Bytes | SHA256 |
|
||||
| --- | ---: | --- |
|
||||
| `upload-binaries-verified.json` | 678 | `e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde` |
|
||||
| `upload-validation-verified.json` | 277 | `73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72` |
|
||||
| `published-verified.json` | 382 | `b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100` |
|
||||
| `RELEASE-NOTES.md` | 2010 | `86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5` |
|
||||
|
||||
All four originals use CRLF. `preserve.py` rereads source and destination bytes,
|
||||
refuses any unequal existing destination, and records the inventory in
|
||||
`manifest.json`. It does not upload or execute application binaries. Running it
|
||||
again requires the original private source records and preserved MCP readbacks.
|
||||
|
||||
`mcp-release-readback.json` and `mcp-tag-readback.json` are locally serialized
|
||||
parsed responses from fresh read-only Gitea MCP calls. They are observations,
|
||||
not original HTTP wire bytes. Release 2 is published as a prerelease at
|
||||
`cli-v0.2.0-preview.authoring.20260911`, pointing to integration commit
|
||||
`27df4a3945ebc97cd7cbde61f6aeea7a91c680d3`.
|
||||
|
||||
The publisher's `notes_sha256` is
|
||||
`1b83b9c904a79ff7acbde421851c9da9b520f3fa0aea920bf55fb71bea392a9d`.
|
||||
It binds the **1988-byte UTF-8 LF public body**, not the raw CRLF Markdown file
|
||||
above. Converting only CRLF to LF makes the preserved prose exactly equal to
|
||||
the MCP public body, including its final newline. `preservation.log` records
|
||||
the corrected successful check. `preservation-initial-failure.txt` discloses
|
||||
the initial checker assumption and its correction; no publication changed.
|
||||
|
||||
The asset readback PASS fields are the original publisher's downloaded-asset
|
||||
verification, preserved without re-downloading or repeating runtime checks.
|
||||
The semantic source (`01b76a1`), packaging assembly (`a0a48e8`) and release
|
||||
integration (`27df4a3`) remain distinct in `manifest.json` and the report.
|
||||
|
||||
Proposed repository attribute rule for root integration:
|
||||
|
||||
```gitattributes
|
||||
harness/experiments/cli-prerelease-20260911/** -text
|
||||
```
|
||||
|
||||
The preserving worker did not edit `.gitattributes` or Git state. Root must
|
||||
apply the rule before adding these exact evidence bytes and verify index or
|
||||
checkout hashes. The standalone report is
|
||||
`harness/release-cli-prerelease-published-20260911.md`.
|
||||
@@ -0,0 +1,22 @@
|
||||
Standalone Windows x64 tools for `.arcadia` projects: `check`/`lint`, missing-ID stabilization and semantic alias rename. Editing commands preview by default; `--write` saves through the shared source conflict/recovery guards. Studio and a server are not required.
|
||||
|
||||
Extract the complete ArcadiaCLI ZIP, keep `libunwind.dll` beside `arcadia.exe`, and open a terminal in that folder:
|
||||
|
||||
```powershell
|
||||
.\arcadia.exe --help
|
||||
.\arcadia.exe check examples/text-first/project.arcadia
|
||||
```
|
||||
|
||||
Copy a complete example folder before editing. Read `docs/source-cli.md` for command, diagnostic and exit-code contracts. Preview IDs remain provisional until saved; a later invocation can generate different missing IDs.
|
||||
|
||||
Verified: 12 source CLI tests, strict lint/format/build, independent 183 semantic assertions across 21 processes, all 114 packaged files and 27 dependency packages, plus independent source/default compatibility and 156 assertions across 10 clean extracted CLI invocations. Preview, exact stabilization/rename, preserved identities/comments/Unicode/CRLF, no-op timestamps and invalid-source refusal passed. ZIP, checksum and validation asset were downloaded and hash-verified after upload.
|
||||
|
||||
This is a development-profile Windows preview. It does not provide a saved-plan/digest protocol, complete large-model text ergonomics or current Linux runtime acceptance. It is separate from the [Studio preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.authoring.20260911). The full OA/SA release remains under development.
|
||||
|
||||
Release checkpoint: [27df4a3](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/27df4a3945ebc97cd7cbde61f6aeea7a91c680d3). Preserved semantic build source is `01b76a1`; packaging-only assembly is `a0a48e8`. Attached `VALIDATION.md` records exact evidence and the distinct source/build roles.
|
||||
|
||||
ZIP size: **5,091,267 bytes**. SHA256:
|
||||
|
||||
```text
|
||||
2B051F8CE1EA4F59EE7E233E1FBD516D423AADBFBCA5D549755CBE78FCDE1AF6
|
||||
```
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"scope": "Publication evidence preservation and read-only MCP release/tag comparison; no runtime tests or asset re-download.",
|
||||
"release_id": 2,
|
||||
"tag": "cli-v0.2.0-preview.authoring.20260911",
|
||||
"publication_url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
|
||||
"published_at": "2026-09-11T12:50:39Z",
|
||||
"source_roles": {
|
||||
"semantic_source": "01b76a1e89e93b7992f39e63560aa8b2ca2f69e0",
|
||||
"packaging_assembly": "a0a48e82bd43be181caca1fe2c1514c21f2bc405",
|
||||
"release_integration": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3"
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"id": 4,
|
||||
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip",
|
||||
"bytes": 5091267,
|
||||
"sha256": "2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6",
|
||||
"url": "http://217.177.34.108:3000/attachments/024ac74c-8806-4da2-9ca4-726c01a7735f",
|
||||
"readback": "PASS"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip.sha256",
|
||||
"bytes": 140,
|
||||
"sha256": "0dc3f12d2f79edfb735e311298d1528cbdb828b775ec885b3badde24e66bceef",
|
||||
"url": "http://217.177.34.108:3000/attachments/24af1b92-ce23-41e3-bc25-60fed95a6270",
|
||||
"readback": "PASS"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "VALIDATION.md",
|
||||
"bytes": 50297,
|
||||
"sha256": "5a0206b493bf1ca98fe931243452a9092cdf2acf10f4e3fd0a7ee9a7d8f56ec8",
|
||||
"url": "http://217.177.34.108:3000/attachments/628863de-e4ff-4fc7-afdb-45b071705d7b",
|
||||
"readback": "PASS"
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"path": "upload-binaries-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/upload-binaries-verified.json",
|
||||
"bytes": 678,
|
||||
"sha256": "e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde",
|
||||
"crlf_sequences": 17,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "upload-validation-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/upload-validation-verified.json",
|
||||
"bytes": 277,
|
||||
"sha256": "73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72",
|
||||
"crlf_sequences": 9,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "published-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/published-verified.json",
|
||||
"bytes": 382,
|
||||
"sha256": "b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100",
|
||||
"crlf_sequences": 9,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "RELEASE-NOTES.md",
|
||||
"source": ".local/cli-packaging-20260911/RELEASE-NOTES.md",
|
||||
"bytes": 2010,
|
||||
"sha256": "86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5",
|
||||
"crlf_sequences": 22,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "mcp-release-readback.json",
|
||||
"bytes": 2495,
|
||||
"sha256": "e0a1d9324cd7a115e22c87c7905489aec81d30277a17b4480866380cbec8edb1",
|
||||
"method": "MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes"
|
||||
},
|
||||
{
|
||||
"path": "mcp-tag-readback.json",
|
||||
"bytes": 196,
|
||||
"sha256": "bb770f30f292b65ca4af28d688f0f1dc1d04fb918b10f527a56ba847d44e9b2e",
|
||||
"method": "MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes"
|
||||
}
|
||||
],
|
||||
"checks": {
|
||||
"four_exact_copies": true,
|
||||
"release_and_tag_match": true,
|
||||
"published_flags_and_time_match": true,
|
||||
"normalized_notes_hash_matches_publisher_record": true,
|
||||
"notes_match_public_body_after_CRLF_to_LF_only": true,
|
||||
"asset_records_are_original_publisher_readbacks": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"author": "Codex-9e8r6t",
|
||||
"body": "Standalone Windows x64 tools for `.arcadia` projects: `check`/`lint`, missing-ID stabilization and semantic alias rename. Editing commands preview by default; `--write` saves through the shared source conflict/recovery guards. Studio and a server are not required.\n\nExtract the complete ArcadiaCLI ZIP, keep `libunwind.dll` beside `arcadia.exe`, and open a terminal in that folder:\n\n```powershell\n.\\arcadia.exe --help\n.\\arcadia.exe check examples/text-first/project.arcadia\n```\n\nCopy a complete example folder before editing. Read `docs/source-cli.md` for command, diagnostic and exit-code contracts. Preview IDs remain provisional until saved; a later invocation can generate different missing IDs.\n\nVerified: 12 source CLI tests, strict lint/format/build, independent 183 semantic assertions across 21 processes, all 114 packaged files and 27 dependency packages, plus independent source/default compatibility and 156 assertions across 10 clean extracted CLI invocations. Preview, exact stabilization/rename, preserved identities/comments/Unicode/CRLF, no-op timestamps and invalid-source refusal passed. ZIP, checksum and validation asset were downloaded and hash-verified after upload.\n\nThis is a development-profile Windows preview. It does not provide a saved-plan/digest protocol, complete large-model text ergonomics or current Linux runtime acceptance. It is separate from the [Studio preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.authoring.20260911). The full OA/SA release remains under development.\n\nRelease checkpoint: [27df4a3](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/27df4a3945ebc97cd7cbde61f6aeea7a91c680d3). Preserved semantic build source is `01b76a1`; packaging-only assembly is `a0a48e8`. Attached `VALIDATION.md` records exact evidence and the distinct source/build roles.\n\nZIP size: **5,091,267 bytes**. SHA256:\n\n```text\n2B051F8CE1EA4F59EE7E233E1FBD516D423AADBFBCA5D549755CBE78FCDE1AF6\n```\n",
|
||||
"created_at": "2026-09-11T12:50:39Z",
|
||||
"draft": false,
|
||||
"html_url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
|
||||
"id": 2,
|
||||
"prerelease": true,
|
||||
"published_at": "2026-09-11T12:50:39Z",
|
||||
"tag_name": "cli-v0.2.0-preview.authoring.20260911",
|
||||
"target": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3",
|
||||
"title": "Arcadia CLI — standalone Windows authoring preview"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"commit_sha": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3",
|
||||
"message": "Package standalone source CLI with verified runtime and notices\n",
|
||||
"name": "cli-v0.2.0-preview.authoring.20260911"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
Initial preservation checker stopped after copying the four files unchanged:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\User\Documents\Git\ARCADIA-Studio\harness\experiments\cli-prerelease-20260911\preserve.py", line 35, in <module>
|
||||
assert hashlib.sha256(notes).hexdigest() == publication['notes_sha256']
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AssertionError
|
||||
|
||||
The checker incorrectly assumed notes_sha256 meant local raw Markdown bytes.
|
||||
Read-only comparison established that it instead exactly matches the LF public
|
||||
release body. Local CRLF bytes remain preserved unchanged; CRLF-to-LF conversion
|
||||
alone yields the public body and the publisher's recorded hash. The corrected
|
||||
checker records both identities, without changing any publication asset or the
|
||||
four source records. A subsequent temporary PowerShell comparison command had
|
||||
an empty-pipeline parse error and was corrected before producing the comparison;
|
||||
it made no file changes.
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"result": "PASS",
|
||||
"copied_files": [
|
||||
{
|
||||
"path": "upload-binaries-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/upload-binaries-verified.json",
|
||||
"bytes": 678,
|
||||
"sha256": "e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde",
|
||||
"crlf_sequences": 17,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "upload-validation-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/upload-validation-verified.json",
|
||||
"bytes": 277,
|
||||
"sha256": "73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72",
|
||||
"crlf_sequences": 9,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "published-verified.json",
|
||||
"source": ".local/cli-packaging-20260911/published-verified.json",
|
||||
"bytes": 382,
|
||||
"sha256": "b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100",
|
||||
"crlf_sequences": 9,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
},
|
||||
{
|
||||
"path": "RELEASE-NOTES.md",
|
||||
"source": ".local/cli-packaging-20260911/RELEASE-NOTES.md",
|
||||
"bytes": 2010,
|
||||
"sha256": "86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5",
|
||||
"crlf_sequences": 22,
|
||||
"bare_lf_sequences": 0,
|
||||
"method": "exact byte copy; source and destination reread equal"
|
||||
}
|
||||
],
|
||||
"release_target": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
"""Preserve four sanitized publication records; never read credentials or upload."""
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
destination = Path(__file__).resolve().parent
|
||||
repository = destination.parents[2]
|
||||
source = repository / '.local/cli-packaging-20260911'
|
||||
names = ['upload-binaries-verified.json', 'upload-validation-verified.json',
|
||||
'published-verified.json', 'RELEASE-NOTES.md']
|
||||
records = []
|
||||
for name in names:
|
||||
data = (source / name).read_bytes()
|
||||
target = destination / name
|
||||
if not target.exists():
|
||||
with target.open('xb') as output:
|
||||
output.write(data)
|
||||
assert target.read_bytes() == data
|
||||
records.append({'path': name, 'source': '.local/cli-packaging-20260911/' + name,
|
||||
'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest(),
|
||||
'crlf_sequences': data.count(b'\r\n'),
|
||||
'bare_lf_sequences': data.count(b'\n') - data.count(b'\r\n'),
|
||||
'method': 'exact byte copy; source and destination reread equal'})
|
||||
def read(name):
|
||||
return json.loads((destination / name).read_text(encoding='utf-8-sig'))
|
||||
publication = read('published-verified.json')
|
||||
release = read('mcp-release-readback.json')
|
||||
tag = read('mcp-tag-readback.json')
|
||||
assert publication['id'] == release['id'] == 2
|
||||
assert publication['tag'] == release['tag_name'] == tag['name'] == 'cli-v0.2.0-preview.authoring.20260911'
|
||||
assert publication['draft'] is release['draft'] is False
|
||||
assert publication['prerelease'] is release['prerelease'] is True
|
||||
assert release['target'] == tag['commit_sha'] == '27df4a3945ebc97cd7cbde61f6aeea7a91c680d3'
|
||||
assert publication['published_at'] == release['published_at'] == '2026-09-11T12:50:39Z'
|
||||
notes = (destination / 'RELEASE-NOTES.md').read_bytes()
|
||||
# The publisher's recorded hash binds the LF public body, not the local CRLF
|
||||
# file. Keep both exact identities and prove the sole normalization explicitly.
|
||||
normalized_notes = notes.decode('utf-8-sig').replace('\r\n', '\n')
|
||||
assert hashlib.sha256(normalized_notes.encode('utf-8')).hexdigest() == publication['notes_sha256']
|
||||
assert normalized_notes == release['body']
|
||||
assets = read('upload-binaries-verified.json') + read('upload-validation-verified.json')
|
||||
assert len(assets) == publication['asset_count'] == 3
|
||||
assert all(item['readback'] == 'PASS' for item in assets)
|
||||
assert assets[0]['sha256'] == '2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6'
|
||||
assert assets[0]['bytes'] == 5091267
|
||||
for name in ['mcp-release-readback.json', 'mcp-tag-readback.json']:
|
||||
data = (destination / name).read_bytes()
|
||||
records.append({'path': name, 'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest(),
|
||||
'method': 'MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes'})
|
||||
result = {'scope': 'Publication evidence preservation and read-only MCP release/tag comparison; no runtime tests or asset re-download.',
|
||||
'release_id': 2, 'tag': tag['name'], 'publication_url': release['html_url'],
|
||||
'published_at': release['published_at'], 'source_roles': {
|
||||
'semantic_source': '01b76a1e89e93b7992f39e63560aa8b2ca2f69e0',
|
||||
'packaging_assembly': 'a0a48e82bd43be181caca1fe2c1514c21f2bc405',
|
||||
'release_integration': release['target']},
|
||||
'assets': assets, 'files': records,
|
||||
'checks': {'four_exact_copies': True, 'release_and_tag_match': True,
|
||||
'published_flags_and_time_match': True, 'normalized_notes_hash_matches_publisher_record': True,
|
||||
'notes_match_public_body_after_CRLF_to_LF_only': True,
|
||||
'asset_records_are_original_publisher_readbacks': True}}
|
||||
(destination / 'manifest.json').write_text(json.dumps(result, indent=2) + '\n', encoding='utf-8', newline='\n')
|
||||
print(json.dumps({'result': 'PASS', 'copied_files': records[:4], 'release_target': release['target']}, indent=2))
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": 2,
|
||||
"tag": "cli-v0.2.0-preview.authoring.20260911",
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
|
||||
"draft": false,
|
||||
"prerelease": true,
|
||||
"asset_count": 3,
|
||||
"notes_sha256": "1b83b9c904a79ff7acbde421851c9da9b520f3fa0aea920bf55fb71bea392a9d",
|
||||
"published_at": "2026-09-11T12:50:39Z"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"id": 4,
|
||||
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip",
|
||||
"bytes": 5091267,
|
||||
"sha256": "2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6",
|
||||
"url": "http://217.177.34.108:3000/attachments/024ac74c-8806-4da2-9ca4-726c01a7735f",
|
||||
"readback": "PASS"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip.sha256",
|
||||
"bytes": 140,
|
||||
"sha256": "0dc3f12d2f79edfb735e311298d1528cbdb828b775ec885b3badde24e66bceef",
|
||||
"url": "http://217.177.34.108:3000/attachments/24af1b92-ce23-41e3-bc25-60fed95a6270",
|
||||
"readback": "PASS"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"id": 6,
|
||||
"name": "VALIDATION.md",
|
||||
"bytes": 50297,
|
||||
"sha256": "5a0206b493bf1ca98fe931243452a9092cdf2acf10f4e3fd0a7ee9a7d8f56ec8",
|
||||
"url": "http://217.177.34.108:3000/attachments/628863de-e4ff-4fc7-afdb-45b071705d7b",
|
||||
"readback": "PASS"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,58 @@
|
||||
# Contextual-source verification evidence, 2026-09-11
|
||||
|
||||
Codex-9e8r6t /root/release_audit. Root authorized this preservation-only directory while running separate native checks. No new tests, compilation, GUI actions, source edits, Git staging or publication were performed to create this archive.
|
||||
|
||||
## Scope and byte preservation
|
||||
|
||||
The 37 original records (201,835 bytes) were copied byte-for-byte from the two private evidence directories. `inventory.json` records their original repository-relative paths, sizes and SHA-256 values, plus the generated README and source readback record. It excludes itself to avoid a recursive hash. The directory contains 40 files total. No executable, DLL, rlib, model output, credential or dependency tree is included.
|
||||
|
||||
`desktop/` preserves the original relative layout of `.local/contextual-source-20260911/`. `oracle-preparation/` preserves concise records from `.local/staged-source-oracle-20260911/`. Embedded paths, timestamps, line endings, compiler diagnostics and manifest wording are deliberately unmodified. They describe the original host and run; they do not assert that private executables or dependency paths exist in another checkout.
|
||||
|
||||
Root should preserve these bytes through Git using the same narrow attribute convention as neighboring experiments:
|
||||
|
||||
```gitattributes
|
||||
harness/experiments/contextual-source-20260911/** -text whitespace=cr-at-eol
|
||||
```
|
||||
|
||||
This worker did not modify the root attributes or index. The existing global text normalization would otherwise change some CRLF records. Verify every inventory hash again after staging or a checkout with that rule.
|
||||
|
||||
## Results and distinct source snapshots
|
||||
|
||||
| Evidence | Meaning |
|
||||
| --- | --- |
|
||||
| `desktop/focused1*` | Missing private topology Draft Clone; compiler error, Cargo101, no tests. The already-failed compiler was stopped; raw diagnostic retains its process exit code. |
|
||||
| `desktop/focused2*` | Extra guide `explain` argument; compiler error, Cargo101, no tests, same stopped-failed-compiler policy. |
|
||||
| `desktop/focused3*` | Test called private App method; compiler error, Cargo101, no tests. Corrected to the actual Message route. |
|
||||
| `desktop/focused4*` | Successful contextual-source22/22, 2.04s; frozen input manifest and terminal status. |
|
||||
| `desktop/tests-verified/` | Root's full675/675, 448.33s test duration, plus exact executable identity `6E677F58...BE38CC0`. This is the earlier snapshot. |
|
||||
| `desktop/clippy1*` | Completed strict-lint failure on three constant-event `then` expressions; later corrected to `then_some`. |
|
||||
| `desktop/focused5*` | Final contextual-source23/23, 0.98s. The seven-file delta adds the captured document/exact owner recovery regression and narrow guide/lint corrections. Both dated input manifests are retained (about44KB each) because their metadata and hashes bind different executions. |
|
||||
| `desktop/guide-final*` | Final guide3/3, 0.20s. |
|
||||
| `desktop/clippy2*` | Final all-target strict Clippy with warnings denied, PASS, 4m29s. |
|
||||
| `desktop/gui-final*` | Matching final Windows GUI build PASS, 6m20s. |
|
||||
| `desktop/fmt-final-status.json` | Workspace formatting PASS. The original runner produced no `fmt-final.log` file because there was no output; no substitute log was fabricated. |
|
||||
| `desktop/tests-final/manifest.json` | Final test executable `405577A3...626F38`, inventory676; affected23 and guide3 were executed. |
|
||||
| `desktop/gui-verified/manifest.json` | Final GUI `52DE82E4...246ACCE`, with runtime identity. Native acceptance is a separate root task. |
|
||||
|
||||
**There is no full final676 pass in this evidence.** The earlier full675 result must not be relabeled as execution of the later binary. Input manifests identify source-file hashes and contemporaneous Git context, not a claim that uncommitted desktop changes were contained in the listed commit or that every external build input was archived.
|
||||
|
||||
The original `run-final-gates.ps1` and `stage-final.ps1` are preserved as raw records. They document serialized commands, failure stops, unchanged-input checks and refusal to overwrite frozen artifacts. They assume repository cwd, the task-local Windows toolchain and private output paths; they were not run from this archive. Any future rerun needs an explicitly coordinated compiler slot and fresh output paths, and produces new evidence rather than replacing these records.
|
||||
|
||||
## Independent oracle preparation
|
||||
|
||||
`oracle-preparation/manifest.json` binds the independently authored evaluator, fixed two-file baseline, designated core rlib and executable. `build-initial.log` is an actual zero-byte successful diagnostics log, accompanied by its exit/time JSON. Self-check and baseline logs/status passed. The small CLI baseline check records admission with expected warnings, without source writes. These records establish evaluator preparation and falsifier execution, not acceptance of GUI-produced staged-source objects. The already-owned oracle source, fixture and report remain at `harness/staged-source-authoring-contract.rs`, `harness/fixtures/staged-source-authoring/` and `harness/release-staged-source-authoring-oracle-20260911.md`; they are not duplicated here.
|
||||
|
||||
`source-freeze-readback.json` is a new preservation-time check: all13 desktop source hashes matched the final focused5 snapshot. The implementation and independent-review reports remain outside this directory and were not edited by this task.
|
||||
|
||||
To verify this archive without running any application, from this directory:
|
||||
|
||||
```powershell
|
||||
$inventory = Get-Content -LiteralPath inventory.json -Raw | ConvertFrom-Json
|
||||
foreach ($entry in $inventory.files) {
|
||||
$file = Get-Item -LiteralPath $entry.path
|
||||
if ($file.Length -ne $entry.bytes -or
|
||||
(Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256).Hash -ne $entry.sha256) {
|
||||
throw "Evidence mismatch: $($entry.path)"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"started": "2026-09-11T12:02:24.4104250Z",
|
||||
"finished": "2026-09-11T12:06:15.0919494Z",
|
||||
"exitCode": 101
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
Checking oa-core v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-core)
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Compiling oa-server v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-server)
|
||||
error: unnecessary closure used with `bool::then`
|
||||
--> crates\oa-desktop\src\behavior\scenario\workspace.rs:199:65
|
||||
|
|
||||
199 | button("Add first lifeline").on_press_maybe(clean.then(|| {
|
||||
| _________________________________________________________________^
|
||||
200 | | Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Lifeline))
|
||||
201 | | }))
|
||||
| |______________________^
|
||||
|
|
||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#unnecessary_lazy_evaluations
|
||||
= note: `-D clippy::unnecessary-lazy-evaluations` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_lazy_evaluations)]`
|
||||
help: use `then_some` instead
|
||||
|
|
||||
199 ~ button("Add first lifeline").on_press_maybe(clean.then_some({
|
||||
200 + Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Lifeline))
|
||||
201 ~ }))
|
||||
|
|
||||
|
||||
error: unnecessary closure used with `bool::then`
|
||||
--> crates\oa-desktop\src\behavior\scenario\workspace.rs:209:64
|
||||
|
|
||||
209 | button("Add first message").on_press_maybe(clean.then(|| {
|
||||
| ________________________________________________________________^
|
||||
210 | | Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Message))
|
||||
211 | | })),
|
||||
| |______________________^
|
||||
|
|
||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#unnecessary_lazy_evaluations
|
||||
help: use `then_some` instead
|
||||
|
|
||||
209 ~ button("Add first message").on_press_maybe(clean.then_some({
|
||||
210 + Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Message))
|
||||
211 ~ })),
|
||||
|
|
||||
|
||||
error: unnecessary closure used with `bool::then`
|
||||
--> crates\oa-desktop\src\behavior\scenario\workspace.rs:212:63
|
||||
|
|
||||
212 | button("Add first action").on_press_maybe(clean.then(|| {
|
||||
| _______________________________________________________________^
|
||||
213 | | Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Action))
|
||||
214 | | }))
|
||||
| |______________________^
|
||||
|
|
||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#unnecessary_lazy_evaluations
|
||||
help: use `then_some` instead
|
||||
|
|
||||
212 ~ button("Add first action").on_press_maybe(clean.then_some({
|
||||
213 + Message::ScenarioCanvas(CanvasEvent::First(context, Tool::Action))
|
||||
214 ~ }))
|
||||
|
|
||||
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 3 previous errors
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"started": "2026-09-11T12:25:20.3859405Z",
|
||||
"finished": "2026-09-11T12:29:50.4525461Z",
|
||||
"exitCode": 0,
|
||||
"args": [
|
||||
"clippy",
|
||||
"--locked",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--all-targets",
|
||||
"--",
|
||||
"-D",
|
||||
"warnings"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Checking oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Finished `dev` profile [unoptimized] target(s) in 4m 29s
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"started": "2026-09-11T12:36:12.8744967Z",
|
||||
"finished": "2026-09-11T12:36:41.0827202Z",
|
||||
"exitCode": 0,
|
||||
"args": [
|
||||
"fmt",
|
||||
"--all",
|
||||
"--",
|
||||
"--check"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"finished": "2026-09-11T11:27:02.1571291Z",
|
||||
"started": "2026-09-11T11:23:44.5463460Z",
|
||||
"exitCode": 101
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
error[E0308]: mismatched types
|
||||
--> crates\oa-desktop\src\behavior\topology.rs:197:31
|
||||
|
|
||||
197 | self.draft = Some(next);
|
||||
| ---- ^^^^ expected `Draft`, found `&Draft`
|
||||
| |
|
||||
| arguments to this enum variant are incorrect
|
||||
|
|
||||
note: `behavior::topology::Draft` does not implement `Clone`, so `&behavior::topology::Draft` was cloned instead
|
||||
--> crates\oa-desktop\src\behavior\topology.rs:187:28
|
||||
|
|
||||
187 | let mut next = d.clone();
|
||||
| ^
|
||||
help: the type constructed contains `&behavior::topology::Draft` due to the type of the argument passed
|
||||
--> crates\oa-desktop\src\behavior\topology.rs:197:26
|
||||
|
|
||||
197 | self.draft = Some(next);
|
||||
| ^^^^^----^
|
||||
| |
|
||||
| this argument influences the type of `Some`
|
||||
note: tuple variant defined here
|
||||
--> /rustc/48a229ceaefd4985c50990b14116b6d856af0985/library\core\src\option.rs:606:4
|
||||
help: consider annotating `behavior::topology::Draft` with `#[derive(Clone)]`
|
||||
|
|
||||
102 + #[derive(Clone)]
|
||||
103 | struct Draft {
|
||||
|
|
||||
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 1 previous error
|
||||
|
||||
Caused by:
|
||||
process didn't exit successfully: `C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\rustup\toolchains\stable-x86_64-pc-windows-gnullvm\bin\rustc.exe --crate-name arcadia_studio --edition=2024 crates\oa-desktop\src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no --test --check-cfg cfg(docsrs,test) --check-cfg "cfg(feature, values())" -C metadata=e92d7ab29d07ce2a -C extra-filename=-58e30cee1fd51a8b --out-dir C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps -C linker=clang.exe -C incremental=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\incremental -C strip=debuginfo -L dependency=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps --extern axum=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libaxum-ccc7aea466db9258.rlib --extern iced=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced-ee73abd722c72024.rlib --extern iced_runtime=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced_runtime-97354eb606c5cbe8.rlib --extern oa_core=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_core-6c8da57367eec642.rlib --extern oa_server=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_server-69305e51c40cee45.rlib --extern reqwest=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libreqwest-31ac987472fa8038.rlib --extern rfd=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\librfd-17cc7ba2db223d7b.rlib --extern serde=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde-60a32311146a42e4.rlib --extern serde_json=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde_json-da2c4f333fc47818.rlib --extern tempfile=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtempfile-86aac28d6be16d2f.rlib --extern tokio=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtokio-5e0ca96735e3073a.rlib -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\ring-5f8d2d20440f09b4\out -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\windows_x86_64_gnullvm-0.52.6\lib -C link-arg=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\oa-desktop-664d65ac5124e646\out\normal-user-manifest.o` (exit code: 0xffffffff)
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"finished": "2026-09-11T11:39:43.0079347Z",
|
||||
"started": "2026-09-11T11:37:10.5178164Z",
|
||||
"exitCode": 101
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
error[E0061]: this function takes 2 arguments but 3 arguments were supplied
|
||||
--> crates\oa-desktop\src\guide.rs:899:25
|
||||
|
|
||||
899 | ... explain(
|
||||
| ^^^^^^^
|
||||
...
|
||||
902 | ... "Behavior → New keeps the exact name, owner ...d raw text, for correction or cancellation.",
|
||||
| --------------------------------------------...-------------------------------------------- unexpected argument #3 of type `&'static str`
|
||||
|
|
||||
note: function defined here
|
||||
--> crates\oa-desktop\src\guide.rs:150:10
|
||||
|
|
||||
150 | const fn explain(title: &'static str, body: &'static str) -> Section {
|
||||
| ^^^^^^^
|
||||
help: remove the extra argument
|
||||
|
|
||||
901 - "Inside a source subform, Back or the first Escape returns to the unchanged parent. Use this new source stages the prerequisite only. Canceling the parent discards it; choosing an existing reference excludes the staged source from creation. Recovery retains both forms and their reserved identities. An open dialog still receives Escape first.",
|
||||
902 - "Behavior → New keeps the exact name, owner and viewpoint choices outside the model until Create and open succeeds. Cancel or Escape discards only this draft; if a dialog is open, the first Escape dismisses that dialog. New refuses other unfinished property, source or behavior drafts without applying them. Recovery restores the creation form in its original layer, including rejected raw text, for correction or cancellation.",
|
||||
901 + "Inside a source subform, Back or the first Escape returns to the unchanged parent. Use this new source stages the prerequisite only. Canceling the parent discards it; choosing an existing reference excludes the staged source from creation. Recovery retains both forms and their reserved identities. An open dialog still receives Escape first.",
|
||||
|
|
||||
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 1 previous error
|
||||
|
||||
Caused by:
|
||||
process didn't exit successfully: `C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\rustup\toolchains\stable-x86_64-pc-windows-gnullvm\bin\rustc.exe --crate-name arcadia_studio --edition=2024 crates\oa-desktop\src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no --test --check-cfg cfg(docsrs,test) --check-cfg "cfg(feature, values())" -C metadata=e92d7ab29d07ce2a -C extra-filename=-58e30cee1fd51a8b --out-dir C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps -C linker=clang.exe -C incremental=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\incremental -C strip=debuginfo -L dependency=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps --extern axum=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libaxum-ccc7aea466db9258.rlib --extern iced=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced-ee73abd722c72024.rlib --extern iced_runtime=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced_runtime-97354eb606c5cbe8.rlib --extern oa_core=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_core-6c8da57367eec642.rlib --extern oa_server=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_server-69305e51c40cee45.rlib --extern reqwest=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libreqwest-31ac987472fa8038.rlib --extern rfd=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\librfd-17cc7ba2db223d7b.rlib --extern serde=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde-60a32311146a42e4.rlib --extern serde_json=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde_json-da2c4f333fc47818.rlib --extern tempfile=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtempfile-86aac28d6be16d2f.rlib --extern tokio=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtokio-5e0ca96735e3073a.rlib -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\ring-5f8d2d20440f09b4\out -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\windows_x86_64_gnullvm-0.52.6\lib -C link-arg=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\oa-desktop-664d65ac5124e646\out\normal-user-manifest.o` (exit code: 0xffffffff)
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"started": "2026-09-11T11:48:07.8443256Z",
|
||||
"exitCode": 101,
|
||||
"finished": "2026-09-11T11:49:20.9876952Z"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
error[E0624]: method `execute` is private
|
||||
--> crates\oa-desktop\src\behavior\contextual_source_tests.rs:1112:17
|
||||
|
|
||||
1112 | assert!(app.execute(Command::Rename(owner, "Accepted renamed scenario".into())));
|
||||
| ^^^^^^^ private method
|
||||
|
|
||||
::: crates\oa-desktop\src\app.rs:851:5
|
||||
|
|
||||
851 | fn execute(&mut self, command: Command) -> bool {
|
||||
| ----------------------------------------------- private method defined here
|
||||
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 1 previous error
|
||||
|
||||
Caused by:
|
||||
process didn't exit successfully: `C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\rustup\toolchains\stable-x86_64-pc-windows-gnullvm\bin\rustc.exe --crate-name arcadia_studio --edition=2024 crates\oa-desktop\src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no --test --check-cfg cfg(docsrs,test) --check-cfg "cfg(feature, values())" -C metadata=e92d7ab29d07ce2a -C extra-filename=-58e30cee1fd51a8b --out-dir C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps -C linker=clang.exe -C incremental=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\incremental -C strip=debuginfo -L dependency=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps --extern axum=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libaxum-ccc7aea466db9258.rlib --extern iced=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced-ee73abd722c72024.rlib --extern iced_runtime=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libiced_runtime-97354eb606c5cbe8.rlib --extern oa_core=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_core-6c8da57367eec642.rlib --extern oa_server=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\liboa_server-69305e51c40cee45.rlib --extern reqwest=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libreqwest-31ac987472fa8038.rlib --extern rfd=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\librfd-17cc7ba2db223d7b.rlib --extern serde=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde-60a32311146a42e4.rlib --extern serde_json=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libserde_json-da2c4f333fc47818.rlib --extern tempfile=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtempfile-86aac28d6be16d2f.rlib --extern tokio=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\libtokio-5e0ca96735e3073a.rlib -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\ring-5f8d2d20440f09b4\out -L native=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\windows_x86_64_gnullvm-0.52.6\lib -C link-arg=C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\build\oa-desktop-664d65ac5124e646\out\normal-user-manifest.o` (exit code: 0xffffffff)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"exitCode": 0,
|
||||
"finished": "2026-09-11T11:59:25.8739914Z",
|
||||
"started": "2026-09-11T11:49:26.5831603Z"
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 9m 56s
|
||||
Running unittests src\main.rs (.local\target-gnullvm\debug\deps\arcadia_studio-58e30cee1fd51a8b.exe)
|
||||
|
||||
running 22 tests
|
||||
test behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo ... ok
|
||||
|
||||
test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 653 filtered out; finished in 2.04s
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\contextual_source_tests.rs",
|
||||
"before": "42E3E985EBA327B518D731AE0714AD5F9B48AF991E9FD62B2B0666E139E02487",
|
||||
"after": "5F05318A6533503B9D6FEBF1EC4DD7256F192394BC1B952A7904C8175BD8DDAE"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\creation.rs",
|
||||
"before": "AB851BCBC3EB070D5911F878EE43FE0530FCB67269103B4B56EF73E17F5BC104",
|
||||
"after": "CA7275B5C0118CBB78F5D16254E50FADDC26DBB53816D01950064C852E296B2E"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\scenario.rs",
|
||||
"before": "5ED3FD63433EF51A6D6315FC4F8251995BBCAA29A0A938FAC0921A4845FAAB2A",
|
||||
"after": "D12A4B1CAA61C08F69C4D2A64BD15568C4B7158DEA91AAC5A52A58A35ADB863C"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\scenario\\workspace.rs",
|
||||
"before": "6100D1A6CE09CD3C2836EB1559DADF382437DB34DB2BDA76CEB4E479CB15DA41",
|
||||
"after": "69C7AD32E4BDC39F42D2E6C7764CFE1FA7867CD7DBCF9B904DEC805E6C912666"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\source_draft.rs",
|
||||
"before": "7447D38E178C3B199901E519ABDCA6868CFD52510F7B67A5EA8B849072CDAE2D",
|
||||
"after": "68F396C420FFF132FF0EAB82CB2C6251477412F6F9F90AD2E76C51A259F8A69A"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\topology.rs",
|
||||
"before": "40139E3714E702E1F331F98EE2579E167D3CA61330864772EC5E40614F118A5A",
|
||||
"after": "D06B2F0FC39B4814E94200297E148F1D4D97E04CB167766030AC9DF18689E3B0"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\guide.rs",
|
||||
"before": "C6425F2FBC2D7D04015E15D78F602CA838019B7C15352EF5A380F78A30800C68",
|
||||
"after": "47EEB3CC0A48D5712720096015A08387CD354FB91559B0BD6FA106B5CAC6292C"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"started": "2026-09-11T12:20:22.2107248Z",
|
||||
"finished": "2026-09-11T12:25:14.9560639Z",
|
||||
"exitCode": 0,
|
||||
"args": [
|
||||
"test",
|
||||
"--locked",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"contextual_source",
|
||||
"--",
|
||||
"--test-threads=1"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 4m 48s
|
||||
Running unittests src\main.rs (.local\target-gnullvm\debug\deps\arcadia_studio-58e30cee1fd51a8b.exe)
|
||||
|
||||
running 23 tests
|
||||
test behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_original_document_remains_bound_after_back_or_choosing_existing ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo ... ok
|
||||
|
||||
test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 653 filtered out; finished in 0.98s
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"started": "2026-09-11T12:29:50.4564653Z",
|
||||
"finished": "2026-09-11T12:36:12.8525359Z",
|
||||
"exitCode": 0,
|
||||
"args": [
|
||||
"build",
|
||||
"--locked",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Finished `dev` profile [unoptimized] target(s) in 6m 20s
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"created": "2026-09-11T12:37:04.6742598Z",
|
||||
"scope": "Final matching Windows GUI build, strictClippy and formatting passed; native acceptance pending root",
|
||||
"sourceInputs": "../focused5-inputs.json",
|
||||
"sourceDeltaFromFull675": "../focused5-delta.json",
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "arcadia-studio.exe",
|
||||
"sha256": "52DE82E434B636E18DB02D381842AA6DB84B721CFFD5502063F784F37246ACCE",
|
||||
"bytes": 112219136
|
||||
},
|
||||
{
|
||||
"file": "libunwind.dll",
|
||||
"sha256": "F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4",
|
||||
"bytes": 190976
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"started": "2026-09-11T12:25:15.0326187Z",
|
||||
"finished": "2026-09-11T12:25:20.3798172Z",
|
||||
"exitCode": 0,
|
||||
"args": [
|
||||
"test",
|
||||
"--locked",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"guide",
|
||||
"--",
|
||||
"--test-threads=1"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
Finished `test` profile [unoptimized] target(s) in 4.40s
|
||||
Running unittests src\main.rs (.local\target-gnullvm\debug\deps\arcadia_studio-58e30cee1fd51a8b.exe)
|
||||
|
||||
running 3 tests
|
||||
test guide::tests::filtering_and_related_navigation_keep_selection_visible ... ok
|
||||
test guide::tests::guide_topic_navigation_resets_only_article_and_same_topic_search_keeps_scroll ... ok
|
||||
test guide::tests::search_finds_concepts_in_walkthroughs_and_api_reference ... ok
|
||||
|
||||
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 673 filtered out; finished in 0.20s
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
. ./.local/toolchain/env.ps1
|
||||
$env:CARGO_BUILD_JOBS = '1'
|
||||
$evidenceRoot = Join-Path (Get-Location) '.local/contextual-source-20260911'
|
||||
$gates = @(
|
||||
@{name='focused5'; args=@('test','--locked','-p','oa-desktop','--bin','arcadia-studio','contextual_source','--','--test-threads=1')},
|
||||
@{name='guide-final'; args=@('test','--locked','-p','oa-desktop','--bin','arcadia-studio','guide','--','--test-threads=1')},
|
||||
@{name='clippy2'; args=@('clippy','--locked','-p','oa-desktop','--all-targets','--','-D','warnings')},
|
||||
@{name='gui-final'; args=@('build','--locked','-p','oa-desktop','--bin','arcadia-studio')},
|
||||
@{name='fmt-final'; args=@('fmt','--all','--','--check')}
|
||||
)
|
||||
foreach ($gate in $gates) {
|
||||
$logPath = Join-Path $evidenceRoot ($gate.name + '.log')
|
||||
$statusPath = Join-Path $evidenceRoot ($gate.name + '-status.json')
|
||||
if ((Test-Path -LiteralPath $logPath) -or (Test-Path -LiteralPath $statusPath)) { throw "Refusing to overwrite $($gate.name)" }
|
||||
$started = [DateTime]::UtcNow.ToString('o')
|
||||
$gateArgs = $gate.args
|
||||
& cargo @gateArgs 2>&1 | Tee-Object -FilePath $logPath
|
||||
$gateExit = $LASTEXITCODE
|
||||
[ordered]@{started=$started;finished=[DateTime]::UtcNow.ToString('o');exitCode=$gateExit;args=$gateArgs} | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath $statusPath
|
||||
if ($gateExit -ne 0) { exit $gateExit }
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$evidenceRoot = Join-Path (Get-Location) '.local/contextual-source-20260911'
|
||||
foreach ($gate in 'focused5','guide-final','clippy2','gui-final','fmt-final') {
|
||||
$status = Get-Content -LiteralPath (Join-Path $evidenceRoot ($gate + '-status.json')) -Raw | ConvertFrom-Json
|
||||
if ($status.exitCode -ne 0) { throw "$gate has not passed" }
|
||||
}
|
||||
$inputs = Get-Content -LiteralPath (Join-Path $evidenceRoot 'focused5-inputs.json') -Raw | ConvertFrom-Json
|
||||
foreach ($inputFile in $inputs.inputs) {
|
||||
if ((Get-FileHash -LiteralPath $inputFile.path -Algorithm SHA256).Hash -ne $inputFile.sha256) { throw "Input changed: $($inputFile.path)" }
|
||||
}
|
||||
$testLog = Get-Content -LiteralPath (Join-Path $evidenceRoot 'focused5.log') -Raw
|
||||
if ($testLog -notmatch 'Running unittests[^\r\n]+\(([^\r\n]+\.exe)\)') { throw 'No executed test binary in focused5 log' }
|
||||
$testPath = $Matches[1]
|
||||
$runtimePath = Join-Path $evidenceRoot 'tests-verified/libunwind.dll'
|
||||
if ((Get-FileHash -LiteralPath $runtimePath -Algorithm SHA256).Hash -ne 'F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4') { throw 'Runtime hash mismatch' }
|
||||
$stages = @(
|
||||
@{directory='tests-final';source=$testPath;name='arcadia-studio-tests.exe';scope='Final affected contextual-source and guide tests; broader full675 belongs to earlier tests-verified snapshot'},
|
||||
@{directory='gui-verified';source='.local/target-gnullvm/debug/arcadia-studio.exe';name='arcadia-studio.exe';scope='Final matching Windows GUI build, strictClippy and formatting passed; native acceptance pending root'}
|
||||
)
|
||||
foreach ($stage in $stages) {
|
||||
$destination = Join-Path $evidenceRoot $stage.directory
|
||||
if (Test-Path -LiteralPath $destination) { throw "Refusing to overwrite $destination" }
|
||||
New-Item -ItemType Directory -Path $destination | Out-Null
|
||||
Copy-Item -LiteralPath $stage.source -Destination (Join-Path $destination $stage.name)
|
||||
Copy-Item -LiteralPath $runtimePath -Destination (Join-Path $destination 'libunwind.dll')
|
||||
$artifacts = foreach ($filename in $stage.name,'libunwind.dll') {
|
||||
$item = Get-Item -LiteralPath (Join-Path $destination $filename)
|
||||
[ordered]@{file=$filename;sha256=(Get-FileHash -LiteralPath $item.FullName -Algorithm SHA256).Hash;bytes=$item.Length}
|
||||
}
|
||||
[ordered]@{created=[DateTime]::UtcNow.ToString('o');scope=$stage.scope;sourceInputs='../focused5-inputs.json';sourceDeltaFromFull675='../focused5-delta.json';artifacts=@($artifacts)} | ConvertTo-Json -Depth 6 | Set-Content -LiteralPath (Join-Path $destination 'manifest.json')
|
||||
Get-Content -LiteralPath (Join-Path $destination 'manifest.json') -Raw
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"created": "2026-09-11T12:37:00.9856183Z",
|
||||
"scope": "Final affected contextual-source and guide tests; broader full675 belongs to earlier tests-verified snapshot",
|
||||
"sourceInputs": "../focused5-inputs.json",
|
||||
"sourceDeltaFromFull675": "../focused5-delta.json",
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "arcadia-studio-tests.exe",
|
||||
"sha256": "405577A35CE643AC022885AF58706D6F8B321224AE6D68E2555FBFAF3D626F38",
|
||||
"bytes": 107101696
|
||||
},
|
||||
{
|
||||
"file": "libunwind.dll",
|
||||
"sha256": "F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4",
|
||||
"bytes": 190976
|
||||
}
|
||||
]
|
||||
}
|
||||
+680
@@ -0,0 +1,680 @@
|
||||
|
||||
running 675 tests
|
||||
test app::architecture_authoring::tests::architecture_allocated_work_is_root_owned_and_one_exact_history_change ... ok
|
||||
test app::architecture_authoring::tests::architecture_blank_names_and_escape_never_accept_placeholder_or_rename ... ok
|
||||
test app::architecture_authoring::tests::architecture_captured_escape_does_not_cancel_other_controls_or_placement ... ok
|
||||
test app::architecture_authoring::tests::architecture_f2_routes_selected_node_to_inline_rename_and_exact_undo ... ok
|
||||
test app::architecture_authoring::tests::architecture_first_focused_input_escape_cancels_create_and_rename ... ok
|
||||
test app::architecture_authoring::tests::architecture_invalid_click_cannot_poison_inline_or_checkpoint_geometry ... ok
|
||||
test app::architecture_authoring::tests::architecture_stale_submit_keeps_create_and_rename_visible_and_exact ... ok
|
||||
test app::architecture_authoring_tests::architecture_cancelled_gesture_cannot_commit_a_later_named_draft ... ok
|
||||
test app::architecture_authoring_tests::architecture_canvas_left_click_uses_world_coordinate_once_at_zoom_and_pan ... ok
|
||||
test app::architecture_authoring_tests::architecture_checkpoint_retains_exact_name_point_and_fresh_binding_without_commands ... ok
|
||||
test app::architecture_authoring_tests::architecture_context_choices_are_small_and_system_is_singleton ... ok
|
||||
test app::architecture_authoring_tests::architecture_contextual_allocation_creates_work_relation_and_node_in_one_undo ... ok
|
||||
test app::architecture_authoring_tests::architecture_creation_names_before_commit_preserves_camera_and_undoes_once ... ok
|
||||
test app::architecture_authoring_tests::architecture_existing_inventory_is_contextual_and_placement_never_implies_allocation ... ok
|
||||
test app::architecture_authoring_tests::architecture_f2_rename_preserves_identity_placement_and_atomic_history ... ok
|
||||
test app::architecture_authoring_tests::architecture_name_survives_rejected_click_resize_navigation_and_escape_is_explicit ... ok
|
||||
test app::architecture_authoring_tests::architecture_rejected_submission_keeps_inline_name_visible_and_invalid_click_is_ignored ... ok
|
||||
test app::architecture_authoring_tests::basic_transition_explicit_overview_focus_wins_over_an_already_populated_architecture ... ok
|
||||
test app::behavior_lifecycle_tests::incomplete_behavior_form_is_dirty_close_save_retains_it_and_cancel_allows_switching ... ok
|
||||
test app::behavior_lifecycle_tests::passive_behavior_canvas_events_do_not_apply_property_drafts ... ok
|
||||
test app::behavior_lifecycle_tests::pending_behavior_blocks_navigation_property_edits_and_model_history ... ok
|
||||
test app::behavior_lifecycle_tests::pending_behavior_blocks_source_creation_and_source_history_replay ... ok
|
||||
test app::behavior_lifecycle_tests::save_prepares_behavior_before_opening_destination_and_cancel_keeps_one_undo ... ok
|
||||
test app::behavior_lifecycle_tests::source_writeback_failure_keeps_typed_behavior_form_for_repair_and_one_undo ... ok
|
||||
test app::checkpoints::tests::checkpoint_completion_releases_the_writer_while_a_context_menu_is_open ... ok
|
||||
test app::checkpoints::tests::checkpoint_inline_create_and_rename_restore_focus_without_changing_drafts_or_history ... ok
|
||||
test app::checkpoints::tests::checkpoint_noninline_contexts_keep_other_focus_and_still_lint ... ok
|
||||
test app::checkpoints::tests::discard_and_close_waits_for_the_late_checkpoint_then_retires_it ... ok
|
||||
test app::checkpoints::tests::home_resume_keeps_state_view_while_explicit_architecture_remains_reachable ... ok
|
||||
test app::checkpoints::tests::home_resume_retains_invalid_source_and_property_drafts ... ok
|
||||
test app::checkpoints::tests::home_resume_returns_to_each_actual_workspace_without_model_edits ... ok
|
||||
test app::checkpoints::tests::malformed_checkpoint_does_not_replace_the_current_model ... ok
|
||||
test app::checkpoints::tests::recent_and_recovery_navigation_respect_unsaved_decision ... ok
|
||||
test app::checkpoints::tests::restored_copy_keeps_raw_property_and_requires_save_without_local_or_hosted_binding ... ok
|
||||
test app::checkpoints::tests::saving_an_older_snapshot_keeps_recovery_for_newer_unsaved_work ... ok
|
||||
test app::checkpoints::tests::stale_write_completion_cannot_recover_a_discarded_document ... ok
|
||||
test app::checkpoints::tests::walkthrough_request_keeps_unfinished_source_behind_the_normal_pending_guard ... ok
|
||||
test app::data_paging_lifecycle_tests::paging_preserves_same_context_and_resets_on_layer_or_document_replacement ... ok
|
||||
test app::diagram_selection_tests::changing_visible_view_follows_its_clean_inspector_without_a_model_edit ... ok
|
||||
test app::diagram_selection_tests::diagram_switch_preserves_an_independent_semantic_inspection ... ok
|
||||
test app::diagram_selection_tests::diagram_uuid_edit_follows_the_same_view_or_a_different_picker_target ... ok
|
||||
test app::diagram_selection_tests::invalid_view_draft_blocks_the_switch_and_retains_raw_input ... ok
|
||||
test app::diagram_selection_tests::stale_diagram_choice_never_applies_an_unrelated_valid_draft ... ok
|
||||
test app::diagram_selection_tests::valid_pending_view_edit_applies_to_old_view_then_inspects_the_new_view ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_creation_and_reorder_preserve_selection_and_each_undo_once ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_rejects_every_stale_context_and_preserves_property_drafts ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_scroll_and_real_resize_invalidate_only_pointer_context ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_source_failure_and_navigation_keep_form_until_success ... ok
|
||||
test app::hosted::tests::hosted_actual_app_tasks_publish_edit_conflict_correct_credentials_reload_and_open ... ok
|
||||
test app::hosted::tests::hosted_catalog_invalidation_follows_service_writes_and_observed_revision_changes ... ok
|
||||
test app::hosted::tests::hosted_catalog_search_credentials_and_failed_refresh_never_mix_result_scopes ... ok
|
||||
test app::hosted::tests::hosted_changed_bound_head_does_not_invalidate_another_services_empty_filter ... ok
|
||||
test app::hosted::tests::hosted_conflict_fetches_review_without_adoption_and_reload_is_undoable ... ok
|
||||
test app::hosted::tests::hosted_detached_drafts_and_recovery_remain_available_after_rejected_publish ... ok
|
||||
test app::hosted::tests::hosted_failed_cross_service_publication_checks_and_reloads_its_own_resource ... ok
|
||||
test app::hosted::tests::hosted_failed_or_cancelled_local_open_keeps_the_existing_document_and_destination ... ok
|
||||
test app::hosted::tests::hosted_invalid_and_detached_source_drafts_never_start_network_writes ... ok
|
||||
test app::hosted::tests::hosted_invalid_local_open_repair_saves_locally_and_never_replaces_old_resource ... ok
|
||||
test app::hosted::tests::hosted_modal_blocks_underlying_edits_and_credentials_are_redacted ... ok
|
||||
test app::hosted::tests::hosted_new_revision_invalidates_filtered_catalog_even_without_a_displayed_row ... ok
|
||||
test app::hosted::tests::hosted_only_successful_source_save_as_changes_the_active_destination ... ok
|
||||
test app::hosted::tests::hosted_open_waits_for_unsaved_guard_and_failed_open_preserves_current_document ... ok
|
||||
test app::hosted::tests::hosted_publish_acknowledges_only_the_sent_snapshot_and_retains_undo ... ok
|
||||
test app::hosted::tests::hosted_stale_completions_do_not_clear_current_busy_or_adopt_another_document ... ok
|
||||
test app::hosted::tests::hosted_unknown_save_is_acknowledged_by_exact_readback_without_retry ... ok
|
||||
test app::lint_tests::committed_check_cache_follows_edit_and_undo_while_drafts_stay_separate ... ok
|
||||
test app::lint_tests::lint_coalesces_work_and_rejects_obsolete_results ... ok
|
||||
test app::lint_tests::prior_document_lint_cannot_enter_reopened_model_or_block_next_checks ... ok
|
||||
test app::port_view_tests::catalog_creation_follows_the_new_port_and_keeps_group_browsing_explicit ... ok
|
||||
test app::port_view_tests::filtered_active_view_cannot_hide_a_created_port_when_eligible_owner_view_is_folded ... ok
|
||||
test app::process_canvas::direct_process_dirty_source_blocks_canvas_creation_without_losing_text ... ok
|
||||
test app::process_canvas::tests::direct_process_app_open_source_and_back_preserve_local_reference_identity ... ok
|
||||
test app::process_canvas::tests::direct_process_app_same_owner_selection_preserves_tool_but_owner_change_resets_it ... ok
|
||||
test app::process_canvas::tests::direct_process_app_save_scroll_resize_and_passive_geometry_keep_drafts_and_current_origin ... ok
|
||||
test app::process_canvas::tests::direct_process_app_source_failure_retains_form_then_commits_once_and_selects_occurrence ... ok
|
||||
test app::process_canvas::tests::direct_process_app_stale_context_dirty_source_and_properties_never_mutate ... ok
|
||||
test app::process_canvas::tests::direct_process_append_empty_first_second_exchange_has_exact_source_history ... ok
|
||||
test app::process_canvas::tests::process_focus_retains_rejected_draft_and_guards_selection_until_panels_restore ... ok
|
||||
test app::review_navigation_tests::rejected_semantic_source_writeback_retains_review_camera_and_original_navigation ... ok
|
||||
test app::review_navigation_tests::review_already_showing_the_target_keeps_its_camera_and_query ... ok
|
||||
test app::review_navigation_tests::semantic_name_take_selects_the_counterpart_view_in_both_directions_with_one_exact_history_entry ... ok
|
||||
test app::review_navigation_tests::semantic_review_without_a_destination_view_clears_the_old_layer_canvas_without_creating_a_view ... ok
|
||||
test app::save_as_tests::save_as_late_receipt_preserves_newer_raw_source_draft_and_destination ... ok
|
||||
test app::save_as_tests::save_as_preflight_rejects_historical_collision_before_starting_io ... ok
|
||||
test app::save_as_tests::save_as_receipt_then_one_undo_restores_meaning_and_saving_preserves_redo ... ok
|
||||
test app::source_project_tests::closed_detached_file_keeps_first_save_conflict_then_can_be_reloaded_fresh ... ok
|
||||
test app::source_project_tests::inactive_invalid_draft_blocks_graphical_changes_and_diagnostic_switches_files ... ok
|
||||
test app::source_project_tests::json_export_and_rejected_save_as_preserve_source_location_history_and_bytes ... ok
|
||||
test app::source_project_tests::missing_include_open_keeps_old_model_and_can_be_repaired_and_saved ... ok
|
||||
test app::source_project_tests::recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path ... ok
|
||||
test app::source_project_tests::recovery_of_previous_save_as_target_does_not_redirect_current_project ... ok
|
||||
test app::source_project_tests::recovery_open_finds_first_save_journal_without_an_entry_file ... ok
|
||||
test app::source_project_tests::recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success ... ok
|
||||
test app::source_project_tests::source3_native_open_preserves_report_comments_nesting_and_save_reopen ... ok
|
||||
test app::source_project_tests::two_file_apply_graphical_edit_exact_undo_save_as_and_reopen ... ok
|
||||
test app::state_diagram_tests::all_context_dimensions_reject_stale_selection_camera_and_model_messages ... ok
|
||||
test app::state_diagram_tests::create_view_places_only_its_machine_and_restores_exact_source_in_one_undo ... ok
|
||||
test app::state_diagram_tests::direct_create_connect_select_and_move_keep_semantic_identity_and_atomic_history ... ok
|
||||
test app::state_diagram_tests::fallback_owner_first_selection_keeps_the_captured_context_for_its_first_move ... ok
|
||||
test app::state_diagram_tests::pending_drafts_block_every_direct_mutation_and_passive_camera_preserves_inputs ... ok
|
||||
test app::state_diagram_tests::real_view_tool_and_history_changes_invalidate_old_release_events ... ok
|
||||
test app::state_diagram_tests::rejected_creation_keeps_source_and_selection_then_valid_owner_can_retry ... ok
|
||||
test app::state_diagram_tests::same_size_viewport_after_revision_or_tool_epoch_does_not_refit_the_camera ... ok
|
||||
test app::state_diagram_tests::shared_semantic_states_keep_architecture_and_behavior_placements_independent ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_constructor_and_source_open_to_the_existing_workspace_without_edits ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_picker_and_reveal_but_explicit_architecture_does_not_bounce ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_preserve_selected_raw_properties_and_pending_behavior_guards ... ok
|
||||
test app::state_diagram_tests::state_navigation_catalog_selection_across_layers_resets_camera_and_tool ... ok
|
||||
test app::state_diagram_tests::state_navigation_catalog_selection_of_another_machine_resets_camera_and_tool ... ok
|
||||
test app::state_diagram_tests::state_navigation_layer_change_resets_the_new_machine_at_the_same_viewport_size ... ok
|
||||
test app::state_diagram_tests::state_navigation_return_to_the_same_view_preserves_camera_tool_and_fit_mode ... ok
|
||||
test app::state_diagram_tests::state_navigation_root_event_and_same_layer_keep_the_current_camera_and_tool ... ok
|
||||
test app::transition_context_tests::explicit_behavior_internal_and_process_roots_keep_their_workspace_without_creating_a_view ... ok
|
||||
test app::transition_context_tests::explicit_destination_is_honored_and_ordinary_work_transition_still_places_in_architecture ... ok
|
||||
test app::transition_context_tests::machine_and_typed_action_transitions_resolve_the_owner_and_reusing_that_context_retains_camera ... ok
|
||||
test app::transition_context_tests::rejected_source_writeback_keeps_review_and_navigation_and_invalid_draft_still_blocks_start ... ok
|
||||
test app::transition_context_tests::scenario_transition_focuses_requested_counterpart_and_preserves_unrelated_views_in_both_directions ... ok
|
||||
test app::view_copy_tests::copying_architecture_keeps_architecture_even_with_a_retained_state_view ... ok
|
||||
test app::view_copy_tests::copying_the_current_state_view_uses_its_own_identity_and_is_one_source_undo ... ok
|
||||
test app::view_copy_tests::duplicate_rejection_preserves_an_incomplete_source_buffer ... ok
|
||||
test app::view_copy_tests::duplicate_rejection_preserves_invalid_property_and_pending_behavior_drafts ... ok
|
||||
test app::view_copy_tests::stale_copy_does_not_apply_an_unrelated_valid_property_draft ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo ... ok
|
||||
test behavior::creation::app_tests::app_choosing_another_behavior_or_layer_cannot_commit_a_creation_draft ... ok
|
||||
test behavior::creation::app_tests::app_creation_opens_the_actual_new_owner_instead_of_first_or_previously_active_behavior ... ok
|
||||
test behavior::creation::app_tests::app_first_captured_escape_dismisses_file_or_pending_overlay_before_creation ... ok
|
||||
test behavior::creation::app_tests::app_lesson_request_cancel_retains_creation_then_escape_discards_only_the_draft ... ok
|
||||
test behavior::creation::app_tests::app_machine_behavior_submit_opens_its_opted_in_view_as_one_undoable_transaction ... ok
|
||||
test behavior::creation::app_tests::app_new_never_auto_applies_valid_or_invalid_property_and_source_drafts ... ok
|
||||
test behavior::creation::app_tests::app_recovered_rootless_sa_creation_retains_layer_ids_and_other_raw_drafts ... ok
|
||||
test behavior::creation::app_tests::app_stale_layer_open_never_starts_or_replaces_a_draft ... ok
|
||||
test behavior::creation::tests::all_four_viewpoints_are_explicit_and_survive_source_history_reopen ... ok
|
||||
test behavior::creation::tests::cancel_and_illegal_family_layer_switches_never_create_model_objects ... ok
|
||||
test behavior::creation::tests::corrupted_recovery_and_reserved_identity_collision_refuse_without_repairing_raw_values ... ok
|
||||
test behavior::creation::tests::creation_selection_rejects_changed_scenario_body_and_post_creation_operations ... ok
|
||||
test behavior::creation::tests::machine_requires_valid_owner_and_first_view_adds_no_region_or_state ... ok
|
||||
test behavior::creation::tests::mounted_creation_keeps_actions_visible_and_renders_only_six_owner_candidates ... ok
|
||||
test behavior::creation::tests::oa_process_and_sa_chain_keep_exact_names_root_ownership_and_one_history_entry ... ok
|
||||
test behavior::creation::tests::optional_context_collapses_without_losing_authored_reference_or_raw_search ... ok
|
||||
test behavior::creation::tests::owner_search_is_name_ordered_filtered_and_page_sized_not_a_catalog ... ok
|
||||
test behavior::creation::tests::post_commit_selection_is_correlated_with_exact_created_behavior_and_view ... ok
|
||||
test behavior::creation::tests::recovery_preserves_exact_raw_inputs_reserved_ids_and_revalidates_stale_owner ... ok
|
||||
test behavior::creation::tests::rejected_source_transaction_keeps_draft_and_every_accepted_source_byte ... ok
|
||||
test behavior::creation::tests::repeated_owner_names_remain_distinguishable_by_searchable_parent_context_and_alias ... ok
|
||||
test behavior::direct_canvas_tests::direct_alt_execution_stops_each_operand_at_its_reply_and_marks_open_operand ... ok
|
||||
test behavior::direct_canvas_tests::direct_bounds_change_during_held_drag_never_commits_old_slot ... ok
|
||||
test behavior::direct_canvas_tests::direct_clicked_occurrence_capture_cancels_on_view_and_context_changes ... ok
|
||||
test behavior::direct_canvas_tests::direct_context_escape_unfocus_and_pending_form_cancel_gestures ... ok
|
||||
test behavior::direct_canvas_tests::direct_drag_and_click_click_use_ordered_sources_and_publish_once ... ok
|
||||
test behavior::direct_canvas_tests::direct_execution_span_ends_at_its_correlated_reply_and_marks_an_open_call ... ok
|
||||
test behavior::direct_canvas_tests::direct_scroll_resize_and_bounds_changes_cancel_captured_slots ... ok
|
||||
test behavior::direct_canvas_tests::direct_scrolled_canvas_maps_raw_pointer_events_to_the_visible_slot ... ok
|
||||
test behavior::direct_canvas_tests::direct_selected_handle_reorders_and_hits_keep_semantic_identity ... ok
|
||||
test behavior::direct_canvas_tests::reused_exchange_messages_display_their_distinct_occurrence_names ... ok
|
||||
test behavior::scenario::data_contract_tests::large_payload_has_one_editor_with_reachable_field_and_authored_pages ... ok
|
||||
test behavior::scenario::data_contract_tests::recursive_browsing_up_and_root_keep_values_and_report_the_depth_limit ... ok
|
||||
test behavior::scenario::data_contract_tests::recursive_value_focus_exposes_authored_leaf_and_phase_changes_retain_surviving_keys ... ok
|
||||
test behavior::scenario::data_contract_tests::reply_call_picker_previews_the_same_value_reset_as_selecting_another_exchange ... ok
|
||||
test behavior::scenario::data_contract_tests::scenario_form_commits_two_reused_record_values_and_correlated_reply_atomically ... ok
|
||||
test behavior::scenario::direct_tests::direct_busy_save_keeps_observed_scroll_current_for_the_next_pointer_gesture ... ok
|
||||
test behavior::scenario::direct_tests::direct_clicked_occurrence_rejects_stale_slots_and_retains_recoverable_drafts ... ok
|
||||
test behavior::scenario::direct_tests::direct_clicked_occurrences_use_root_and_operand_slots_with_exact_source_history ... ok
|
||||
test behavior::scenario::direct_tests::direct_exchange_compatibility_browsing_preserves_final_slot_validation ... ok
|
||||
test behavior::scenario::direct_tests::direct_exchange_picker_is_bounded_and_browsing_keeps_pending_values ... ok
|
||||
test behavior::scenario::direct_tests::direct_five_hundred_exchange_choice_render_probe ... ok
|
||||
test behavior::scenario::direct_tests::direct_form_keeps_the_same_canvas_in_the_widget_tree ... ok
|
||||
test behavior::scenario::direct_tests::direct_middle_pair_insertion_is_one_exact_source_and_model_undo ... ok
|
||||
test behavior::scenario::direct_tests::direct_operand_pair_keeps_parent_sequence_and_cannot_reorder_across_operands ... ok
|
||||
test behavior::scenario::direct_tests::direct_reply_choices_cache_keeps_typing_fast_and_revalidates_changed_contexts ... ok
|
||||
test behavior::scenario::direct_tests::direct_reply_choices_validate_the_actual_slot_and_reorder_rejects_reverse_order ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_navigation_blocks_pending_drafts_and_stale_contexts ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_navigation_retains_each_exact_caller_without_history ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_return_survives_rename_and_rejects_deleted_or_changed_use ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_async_picker_uses_request_root_and_nested_directions_without_erasing_rejected_values ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_selects_two_parameterless_allocations_without_inventing_refinement_and_reply_derives_call ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_unresolved_and_disabled_selection_recovery_preserves_rejected_raw_values ... ok
|
||||
test behavior::scenario::tests::fragment_operands_accept_paired_messages_through_normal_destination_picker ... ok
|
||||
test behavior::scenario::tests::graphical_call_reply_is_atomic_correlated_and_source_equivalent ... ok
|
||||
test behavior::scenario::tests::invalid_lifecycle_edit_keeps_draft_and_timer_has_no_global_exchange ... ok
|
||||
test behavior::scenario::tests::lifeline_picker_uses_core_viewpoint_contract ... ok
|
||||
test behavior::scenario::tests::reverse_communication_canvas_choices_and_correlated_reply_share_core_direction ... ok
|
||||
test behavior::scenario::tests::scenario_reuse_requires_explicit_compatible_bindings ... ok
|
||||
test behavior::scenario::tests::tagged_scenario_commit_is_not_redirected_by_other_editor_events ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_allocates_remaining_height_and_pins_actions_at_minimum_and_wide_sizes ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_caller_restores_actual_mounted_canvas_and_shelf_with_camera ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_canvas_and_form_scroll_survive_disclosures_focus_width_and_resize ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_choosing_tools_preserves_valid_and_invalid_pending_editors ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_fit_reobserves_same_sized_owner_and_document_changes ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_fit_uses_measured_inner_viewport_and_rejects_nonfinite_inputs ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_open_and_back_restore_owner_and_mounted_scroll_after_preselection ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_scaled_and_scrolled_scene_keeps_clicked_slots_and_message_endpoints ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_scaled_nested_occurrences_and_reorder_keep_exact_sequence_identity ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_viewport_events_are_passive_guarded_and_do_not_apply_raw_forms ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_whole_app_canvas_tree_survives_pending_shelves_and_focus ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scenario_caller_restores_mounted_scroll_once_with_clamping_and_app_receipt ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scenario_restore_cannot_scroll_another_document_owner_or_process_view ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scroll_mounted_identity_resets_navigation_but_preserves_edits_before_first_report ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scroll_observer_reports_actual_initial_clamped_and_remounted_offsets_once ... ok
|
||||
test behavior::scenario_scroll::tests::independent_process_owner_change_resets_actual_scroll_offsets ... ok
|
||||
test behavior::state_canvas::tests::context_menu_keeps_window_anchor_and_explicit_placement_identity ... ok
|
||||
test behavior::state_canvas::tests::context_tool_and_pending_form_changes_cancel_mutating_gestures ... ok
|
||||
test behavior::state_canvas::tests::creation_uses_the_explicit_deepest_owner_and_never_a_fallback_ancestor ... ok
|
||||
test behavior::state_canvas::tests::drag_uses_ordered_release_at_each_zoom_and_moves_descendants_in_one_undo ... ok
|
||||
test behavior::state_canvas::tests::escape_and_view_switch_discard_the_armed_transition_source ... ok
|
||||
test behavior::state_canvas::tests::internal_rows_and_pseudostate_hits_use_shared_persisted_geometry ... ok
|
||||
test behavior::state_canvas::tests::ordered_stationary_click_does_not_move_on_later_motion_in_the_same_batch ... ok
|
||||
test behavior::state_canvas::tests::pan_is_button_scoped_read_only_and_hover_does_not_reproject_the_scene ... ok
|
||||
test behavior::state_canvas::tests::pseudostate_names_avoid_rightward_and_downward_routes_and_share_hit_bounds ... ok
|
||||
test behavior::state_canvas::tests::relayout_does_not_turn_a_transition_click_into_a_drag_or_pan ... ok
|
||||
test behavior::state_canvas::tests::selected_endpoint_reconnect_preserves_identity_and_requires_handle_motion ... ok
|
||||
test behavior::state_canvas::tests::selection_relayout_does_not_move_nodes_or_change_drag_distance ... ok
|
||||
test behavior::state_canvas::tests::stacked_symbol_names_avoid_each_other_and_are_independent_of_input_order ... ok
|
||||
test behavior::state_canvas::tests::transition_supports_click_click_and_drag_without_coalesced_accidental_edges ... ok
|
||||
test behavior::state_canvas::tests::typed_state_actions_are_named_selectable_rows_before_internal_transitions_and_regions ... ok
|
||||
test behavior::state_canvas::tests::viewport_uses_full_canvas_coordinates_and_republishes_for_a_new_context ... ok
|
||||
test behavior::state_edit::tests::an_empty_machine_has_an_explicit_visible_owner_for_first_region_creation ... ok
|
||||
test behavior::state_edit::tests::connect_preserves_self_loops_and_rejects_hidden_or_incompatible_vertices ... ok
|
||||
test behavior::state_edit::tests::creation_places_missing_ancestry_and_unfolds_existing_owners_atomically ... ok
|
||||
test behavior::state_edit::tests::every_context_component_and_invalid_ownership_are_checked_before_planning ... ok
|
||||
test behavior::state_edit::tests::placing_existing_content_and_moving_a_folded_group_preserve_other_views_and_semantics ... ok
|
||||
test behavior::state_edit::tests::reconnect_preserves_the_complete_record_and_replaces_cardinality_in_place ... ok
|
||||
test behavior::state_edit::tests::view_initializes_only_its_machine_in_one_source_and_model_history_entry ... ok
|
||||
test behavior::states::tests::internal_choice_targets_self_and_edit_preserves_identity_and_description ... ok
|
||||
test behavior::states::tests::invalid_pseudo_trigger_keeps_draft_and_does_not_create_orphan_event ... ok
|
||||
test behavior::states::tests::selected_composite_owns_new_region_and_history_uses_selected_region ... ok
|
||||
test behavior::states::tests::timeout_and_work_trigger_commit_together_roundtrip_and_undo ... ok
|
||||
test behavior::tests::failed_document_commit_retains_typed_transition_and_time_event_for_repair ... ok
|
||||
test behavior::tests::legacy_process_and_chain_keep_their_ordered_exchange_scene ... ok
|
||||
test behavior::tests::one_behavior_form_survives_start_edit_and_unrelated_cancel_until_commit ... ok
|
||||
test behavior::tests::recovery_preserves_distinct_qualified_value_paths_and_rejects_invalid_payload_atomically ... ok
|
||||
test behavior::tests::recovery_retains_each_incomplete_behavior_form_without_executing_it ... ok
|
||||
test behavior::tests::selecting_state_transition_keeps_its_behavior_context ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_deleted_transient_selection_does_not_seed_or_hide_retained_authored_endpoint ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_nested_preview_folds_only_the_exact_reference_instance ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_rejected_endpoint_keeps_exact_raw_intent_after_recovery ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_repeated_sources_remain_distinct_and_apply_has_exact_source_history ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_scope_paging_and_search_reach_tail_beyond_512_without_losing_endpoints ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_native_x_to_first_b_keeps_visible_arrow_above_background_and_clear_of_other_references ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_nested_visible_hidden_and_parallel_paths_keep_exact_addresses_and_legacy_routes ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_shared_anchor_preserves_selected_direct_reconnect_at_fit_and_full_scale ... ok
|
||||
test behavior::topology::direct_tests::direct_process_append_preserves_existing_order_and_rejects_incompatible_exchange ... ok
|
||||
test behavior::topology::direct_tests::direct_process_controls_allow_incomplete_work_and_preserve_branch_semantics ... ok
|
||||
test behavior::topology::direct_tests::direct_process_empty_first_and_second_exchange_keep_the_same_interactive_renderer ... ok
|
||||
test behavior::topology::direct_tests::direct_process_imported_order_is_projected_without_mutation_and_first_canvas_edit_is_atomic ... ok
|
||||
test behavior::topology::direct_tests::direct_process_incompatible_imported_order_rejects_conversion_without_losing_draft ... ok
|
||||
test behavior::topology::direct_tests::direct_process_nested_source_reopen_and_api_command_use_one_transaction ... ok
|
||||
test behavior::topology::direct_tests::direct_process_oa_sa_repeated_occurrences_share_sources_and_split_one_guarded_link ... ok
|
||||
test behavior::topology::direct_tests::direct_process_palette_preserves_fit_and_manual_camera ... ok
|
||||
test behavior::topology::direct_tests::direct_process_pending_form_diff_retains_the_canvas_scroll_state ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_click_click_drag_insert_and_scroll_coordinates ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_endpoint_and_peer_reorder_handles_publish_exact_identity ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_stale_focus_scroll_bounds_and_pending_cancel ... ok
|
||||
test behavior::topology::direct_tests::direct_process_readable_default_fit_expansion_and_bounded_choices ... ok
|
||||
test behavior::topology::direct_tests::direct_process_real_picker_stays_bounded_and_search_keeps_selection ... ok
|
||||
test behavior::topology::direct_tests::direct_process_reconnect_delete_and_reorder_preserve_other_paths_and_sources ... ok
|
||||
test behavior::topology::direct_tests::direct_process_reuse_preview_is_local_expandable_and_recursive_sources_are_rejected ... ok
|
||||
test behavior::topology::direct_tests::direct_process_scaled_control_and_link_gestures_use_visible_positions ... ok
|
||||
test behavior::topology::direct_tests::direct_process_specific_parallel_link_and_incompatible_adjacency ... ok
|
||||
test behavior::topology::direct_tests::direct_process_three_ordered_exchanges_preserve_outer_paths_on_insertion ... ok
|
||||
test behavior::topology::tests::cycle_projection_terminates_and_retains_actual_links ... ok
|
||||
test behavior::topology::tests::empty_process_can_start_through_normal_authoring_events ... ok
|
||||
test behavior::topology::tests::fitting_a_branch_keeps_all_nodes_visible_and_selection_uses_scaled_coordinates ... ok
|
||||
test behavior::topology::tests::guarded_branch_is_one_transaction_with_distinct_source_identities ... ok
|
||||
test behavior::topology::tests::insertion_picker_only_offers_work_matching_adjacent_exchanges ... ok
|
||||
test behavior::topology::tests::legacy_branch_insertion_replaces_only_the_selected_implied_link ... ok
|
||||
test behavior::topology::tests::legacy_edit_preserves_order_and_new_work_in_one_undo ... ok
|
||||
test behavior::topology::tests::long_engineering_identifiers_stay_inside_label_width ... ok
|
||||
test behavior::topology::tests::process_fit_canvas_selection_ignores_retained_ordered_page_scroll ... ok
|
||||
test behavior::topology::tests::process_fit_disclosures_and_focus_preserve_rejected_raw_draft_and_accepted_source ... ok
|
||||
test behavior::topology::tests::process_fit_uses_measured_height_and_reports_minimum_without_changing_manual_zoom ... ok
|
||||
test behavior::topology::tests::reusable_preview_preserves_identity_and_filters_recursive_sources ... ok
|
||||
test behavior::topology::tests::stale_or_invalid_submit_preserves_inputs_and_creates_nothing ... ok
|
||||
test behavior::topology::tests::unlinked_contributions_do_not_gain_fictional_edges ... ok
|
||||
test behavior::topology::view::layout_tests::direct_process_pending_editor_uses_available_height_and_keeps_actions_visible ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_layout_disclosures_and_pending_editor_keep_real_manual_canvas_scroll ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_layout_measures_remaining_canvas_with_details_forms_and_window_resize ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_whole_app_focus_and_disclosures_retain_canvas_tree_with_pending_raw_form ... ok
|
||||
test connection_edit::tests::cancel_navigation_revision_and_dirty_drafts_cannot_commit_a_stale_connection ... ok
|
||||
test connection_edit::tests::visible_endpoint_drawing_commits_ports_and_exchange_once_with_exact_history ... ok
|
||||
test connection_tool::tests::boundary_candidates_match_core_orientation_and_reject_same_owner_or_mixed_kind ... ok
|
||||
test connection_tool::tests::boundary_feasibility_keeps_interface_warnings_and_final_carried_item_checks ... ok
|
||||
test connection_tool::tests::boundary_feasibility_rejects_dangling_identity_in_a_malformed_element_map ... ok
|
||||
test connection_tool::tests::direct_connections_share_exact_source_history_and_model_parity ... ok
|
||||
test connection_tool::tests::explicit_function_ports_keep_owners_contracts_and_do_not_invent_carried_items ... ok
|
||||
test connection_tool::tests::final_command_validation_rejects_invalid_models_without_mutation ... ok
|
||||
test connection_tool::tests::function_cards_use_unique_reuse_and_atomic_generation_when_ambiguous ... ok
|
||||
test connection_tool::tests::mismatched_port_owners_layers_and_contract_kinds_are_not_candidates ... ok
|
||||
test connection_tool::tests::operational_communication_uses_participants_without_creating_ports ... ok
|
||||
test connection_tool::tests::operational_interaction_targets_only_distinct_oa_activities ... ok
|
||||
test context_menu::tests::a_new_context_token_cannot_reuse_the_previous_mouse_press_or_scroll ... ok
|
||||
test context_menu::tests::actions_area_does_not_swallow_first_independent_click_after_overlay_consumed_its_release ... ok
|
||||
test context_menu::tests::anchors_outside_the_window_and_nonfinite_input_stay_bounded ... ok
|
||||
test context_menu::tests::clicking_disabled_or_dragging_off_an_action_never_executes_it ... ok
|
||||
test context_menu::tests::coalesced_dismissal_release_does_not_swallow_the_next_independent_click ... ok
|
||||
test context_menu::tests::empty_and_disabled_only_menus_still_capture_keys_and_escape_closes ... ok
|
||||
test context_menu::tests::keyboard_skips_headers_separators_and_disabled_actions_and_invokes_once ... ok
|
||||
test context_menu::tests::outside_dismissal_consumes_press_and_release_across_controlled_close ... ok
|
||||
test context_menu::tests::reconstructed_overlay_uses_retained_layout_for_rows_and_hit_testing ... ok
|
||||
test context_menu::tests::retained_overlay_layout_keeps_measured_width_and_scrollbar_after_reconstruction ... ok
|
||||
test context_menu::tests::tall_menu_clamps_to_viewport_and_keyboard_wheel_and_scrollbar_reach_the_end ... ok
|
||||
test data_values::tests::phase_choices_keep_reused_record_addresses_distinct ... ok
|
||||
test data_values::tests::recursive_picker_starts_with_distinct_leaf_names_and_sorts_them ... ok
|
||||
test data_values::tests::recursive_records_can_be_drilled_into_and_valid_imported_paths_resolve ... ok
|
||||
test data_values::tests::reference_parameter_stops_descent_and_unspecified_direction_remains_visible ... ok
|
||||
test data_values::tests::roots_and_one_hop_children_do_not_expand_unrelated_payload_branches ... ok
|
||||
test data_view::tests::allocation_rows_edit_relationship_identity_and_remove_only_that_allocation ... ok
|
||||
test data_view::tests::association_creation_is_a_separate_relation_with_editable_end_contracts ... ok
|
||||
test data_view::tests::browsing_pages_preserves_invalid_numeric_draft_and_inherited_allocation_identity ... ok
|
||||
test data_view::tests::contextual_data_actions_use_typed_defaults_and_one_undo ... ok
|
||||
test data_view::tests::large_inherited_dictionary_has_bounded_widgets_and_every_original_field_is_reachable ... ok
|
||||
test diagram::lifecycle_tests::menu_reset_and_draw_use_fresh_open_context ... ok
|
||||
test diagram::lifecycle_tests::middle_and_arrow_panning_preserve_source_and_history ... ok
|
||||
test diagram::lifecycle_tests::motion_after_release_must_not_move_clicked_port ... ok
|
||||
test diagram::lifecycle_tests::motion_after_source_click_release_must_not_create_connection ... ok
|
||||
test diagram::pointer_tests::coalesced_fe_ports_commit_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::coalesced_port_drag_commits_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::drag_from_already_selected_stationary_port_keeps_source_between_batches ... ok
|
||||
test diagram::pointer_tests::menu_captured_motion_must_not_turn_following_click_into_old_port_drag ... ok
|
||||
test diagram::pointer_tests::modal_and_stale_epoch_block_queued_connection_and_port_commits ... ok
|
||||
test diagram::port_hit_tests::coincident_ports_keep_selection_then_use_stable_identity ... ok
|
||||
test diagram::port_hit_tests::nearest_port_center_wins_on_all_borders_and_zoom_levels ... ok
|
||||
test diagram::port_hit_tests::nested_owner_palette_selection_drag_and_context_menu_pick_the_same_port ... ok
|
||||
test diagram::port_labels::tests::leaving_and_reentering_keeps_suppression_until_each_held_button_releases ... ok
|
||||
test diagram::port_labels::tests::menu_epoch_clears_suppression_when_the_overlay_consumes_release ... ok
|
||||
test diagram::port_labels::tests::outside_presses_do_not_suppress_and_cancel_or_focus_loss_clear_held_buttons ... ok
|
||||
test diagram::port_labels::tests::passive_layer_leaves_port_drag_selection_and_commit_with_the_interactive_canvas ... ok
|
||||
test diagram::tests::association_end_contracts_share_svg_geometry_and_select_without_moving_name_label ... ok
|
||||
test diagram::tests::bend_gestures_use_screen_hit_radius_and_commit_one_undo_at_three_zooms ... ok
|
||||
test diagram::tests::coincident_line_hit_retains_the_selected_connection ... ok
|
||||
test diagram::tests::connection_gestures_pick_real_ports_and_commit_coalesced_drag_at_every_zoom ... ok
|
||||
test diagram::tests::detached_label_selects_connection_and_occluding_card_owns_its_hit ... ok
|
||||
test diagram::tests::dragging_a_child_previews_the_same_enclosure_and_ports_as_commit ... ok
|
||||
test diagram::tests::fast_drags_commit_the_release_cursor_without_a_final_motion_event ... ok
|
||||
test diagram::tests::implicit_port_click_selects_semantics_and_drag_preview_svg_share_anchors ... ok
|
||||
test diagram::tests::route_cache_ignores_pan_zoom_and_cancelled_drag_cannot_commit ... ok
|
||||
test diagram::tests::routed_svg_has_same_polyline_label_and_bounds_as_canvas_scene ... ok
|
||||
test diagram::tests::svg_distinguishes_inferred_work_allocation_from_direct_allocation ... ok
|
||||
test diagram::tests::svg_preserves_visible_exchange_labels_and_capability_stereotypes ... ok
|
||||
test diagram::tests::typed_function_glyphs_and_unoriented_standard_connections_have_distinct_svg ... ok
|
||||
test diagram::view_options_tests::communication_svg_uses_saved_visibility_labels_and_direction ... ok
|
||||
test document::save_as_tests::save_as_preserves_explicit_source_entry_changes_in_history ... ok
|
||||
test document::save_as_tests::save_as_rebases_uniform_history_without_an_undo_step_or_lost_redo ... ok
|
||||
test document::save_as_tests::save_as_rejects_included_filename_collisions_in_past_and_future_without_mutation ... ok
|
||||
test document::save_as_tests::save_as_rejects_stale_or_content_changing_receipt_atomically ... ok
|
||||
test document::tests::accepted_history_keeps_the_latest_hundred_complete_snapshots ... ok
|
||||
test document::tests::altered_compiled_model_or_index_is_rejected_without_mutation ... ok
|
||||
test document::tests::asynchronous_save_marks_its_snapshot_without_cleaning_later_edits ... ok
|
||||
test document::tests::byte_budget_trims_oldest_history_without_discarding_a_large_current ... ok
|
||||
test document::tests::cached_view_index_tracks_accepted_creation_undo_and_redo ... ok
|
||||
test document::tests::comment_and_semantic_history_restore_exact_bytes_and_branch_together ... ok
|
||||
test document::tests::creation_selects_the_single_uuid_persisted_in_source ... ok
|
||||
test document::tests::invalid_project_is_rejected_before_format_can_normalize_it ... ok
|
||||
test document::tests::nested_cross_file_reparent_and_source_edit_share_exact_history ... ok
|
||||
test document::tests::no_op_command_or_source_apply_preserves_history_revision_and_redo ... ok
|
||||
test document::tests::omitted_id_stabilization_remains_dirty_until_exact_source_is_saved ... ok
|
||||
test document::tests::recreated_equal_record_does_not_inherit_deleted_source_ownership ... ok
|
||||
test document::tests::rejected_compile_command_and_writeback_preserve_state_and_redo ... ok
|
||||
test explorer::tests::collapse_and_search_retain_context_without_changing_collapse_state ... ok
|
||||
test explorer::tests::deep_containment_and_search_keep_the_full_path_without_recursion ... ok
|
||||
test explorer::tests::equal_names_have_stable_alias_and_identity_tie_breakers ... ok
|
||||
test explorer::tests::perspective_isolation_and_allocations_do_not_change_containment ... ok
|
||||
test explorer::tests::prefix_names_cannot_separate_a_parent_from_its_children ... ok
|
||||
test forms::data_fields::tests::defaults_distinguish_absent_empty_and_typed_literals_with_escaped_unicode ... ok
|
||||
test forms::data_fields::tests::field_browser_pages_every_direct_field_without_flattening_other_records ... ok
|
||||
test forms::data_fields::tests::independent_review_combined_take_type_informs_actual_default_form_in_both_directions ... ok
|
||||
test forms::data_fields::tests::numeric_bound_drafts_keep_partial_and_full_precision_values_out_of_accepted_state ... ok
|
||||
test forms::data_fields::tests::selecting_qualified_path_preserves_expression_typed_before_the_next_render ... ok
|
||||
test forms::data_fields::tests::semantic_reference_choices_follow_selected_mechanism_and_revert_on_keep ... ok
|
||||
test forms::data_fields::tests::supertype_picker_excludes_descendants_and_keeps_original_inherited_field_identity ... ok
|
||||
test forms::history_fields::tests::history_absent_baseline_and_empty_history_use_explicit_facts_and_exact_document_history ... ok
|
||||
test forms::history_fields::tests::history_clear_discards_inactive_invalid_constructors_before_reusing_the_same_row ... ok
|
||||
test forms::history_fields::tests::history_compound_value_and_constructor_variants_are_editable_without_live_context ... ok
|
||||
test forms::history_fields::tests::history_deleted_keys_and_observation_uuids_remain_exact_and_duplicate_history_rejects ... ok
|
||||
test forms::history_fields::tests::history_every_descriptor_fact_choice_matches_actual_closed_types_and_source_contract ... ok
|
||||
test forms::history_fields::tests::history_exact_strings_do_not_confuse_uuid_shaped_prose_or_literal_keys_with_references ... ok
|
||||
test forms::history_fields::tests::history_invalid_numbers_survive_constructor_switch_reorder_removal_and_recovery ... ok
|
||||
test forms::history_fields::tests::history_missing_semantic_field_can_be_added_and_removed_without_touching_prose_or_live_objects ... ok
|
||||
test forms::history_fields::tests::history_nested_optional_number_events_switch_absent_present_and_recover_invalid_raw ... ok
|
||||
test forms::history_fields::tests::history_nested_uuid_and_list_events_preserve_present_values_and_tagged_item_branches ... ok
|
||||
test forms::history_fields::tests::history_optional_uuid_and_text_seed_absence_without_inventing_observations ... ok
|
||||
test forms::history_fields::tests::history_primitive_type_choices_remain_visible_inside_the_tagged_union ... ok
|
||||
test forms::history_fields::tests::history_retained_text_constructors_follow_exact_mode_without_changing_the_observation ... ok
|
||||
test forms::port_fields::tests::all_demo_records_roundtrip_through_graphical_and_escaped_string_drafts ... ok
|
||||
test forms::port_fields::tests::boundary_choices_honor_draft_direction_same_kind_and_direct_interface_items ... ok
|
||||
test forms::port_fields::tests::contract_choices_follow_owner_and_never_offer_legacy_or_oa_typed_ports ... ok
|
||||
test forms::port_fields::tests::failed_shape_keeps_incomplete_text_and_saved_contract_payloads ... ok
|
||||
test forms::port_fields::tests::functional_endpoints_require_owner_direction_and_items_but_retain_bad_current_choice ... ok
|
||||
test forms::port_fields::tests::interface_roles_offer_participants_and_component_ports_independent_of_orientation ... ok
|
||||
test forms::port_fields::tests::port_allocation_choices_use_actual_owner_direction_and_ignore_edited_relation ... ok
|
||||
test forms::port_fields::tests::standard_switch_retains_incompatible_orientation_until_explicit_repair ... ok
|
||||
test forms::port_fields::tests::switching_function_direction_preserves_invalid_items_and_each_authored_payload ... ok
|
||||
test forms::tests::data_and_port_choices_are_typed_but_retain_invalid_current_values ... ok
|
||||
test forms::tests::editing_allocation_offers_other_performers_without_counting_itself_twice ... ok
|
||||
test forms::tests::moving_placement_and_changing_identity_is_one_lossless_undoable_edit ... ok
|
||||
test forms::tests::parent_choices_reject_cycles_without_removing_clear_or_current_choice ... ok
|
||||
test forms::tests::reply_and_reuse_forms_offer_semantically_compatible_references ... ok
|
||||
test forms::tests::scenario_choices_respect_owner_and_exchange_layer ... ok
|
||||
test forms::tests::semantic_port_group_choices_use_combined_owner_and_retain_invalid_transferred_items ... ok
|
||||
test forms::tests::shared_perspective_change_keeps_payload_and_rejects_incompatible_dependencies ... ok
|
||||
test forms::tests::state_observation_picker_keeps_work_lifelines_allocated_to_machine_owner ... ok
|
||||
test forms::tests::state_placement_form_uses_draft_destination_membership_without_changing_other_views ... ok
|
||||
test forms::tests::state_projection_form_keeps_string_variants_and_requires_a_typed_context ... ok
|
||||
test forms::view_fields::tests::category_family_change_retains_members_until_explicit_correction ... ok
|
||||
test forms::view_fields::tests::selective_view_property_apply_recovery_and_undo_preserve_semantics_and_empty_choices ... ok
|
||||
test guide::tests::filtering_and_related_navigation_keep_selection_visible ... ok
|
||||
test guide::tests::guide_topic_navigation_resets_only_article_and_same_topic_search_keeps_scroll ... ok
|
||||
test guide::tests::search_finds_concepts_in_walkthroughs_and_api_reference ... ok
|
||||
test home::tests::corrupt_future_and_oversized_history_are_preserved_with_usable_session_history ... ok
|
||||
test home::tests::failed_metadata_replace_keeps_previous_history_and_reports_memory_only_entry ... ok
|
||||
test home::tests::first_and_replaced_metadata_are_parseable_and_contain_no_model_bytes ... ok
|
||||
test home::tests::forgotten_and_missing_files_never_change_the_model_or_other_entries ... ok
|
||||
test home::tests::loading_missing_history_does_not_create_files_or_directories ... ok
|
||||
test home::tests::malformed_entries_and_unknown_fields_never_become_open_requests ... ok
|
||||
test home::tests::successful_local_history_is_bounded_ordered_deduplicated_and_durable ... ok
|
||||
test home::tests::unavailable_location_can_reappear_on_refresh_without_losing_identity ... ok
|
||||
test home::tests::walkthrough_uses_packaged_bundle_before_development_and_reports_missing_assets ... ok
|
||||
test hosted::client::tests::hosted_endpoint_validation_redacts_secrets_and_preserves_proxy_paths ... ok
|
||||
test hosted::client::tests::hosted_lost_publication_response_is_uncertain_without_retry ... ok
|
||||
test hosted::client::tests::hosted_open_rejects_incoherent_envelopes_missing_etags_and_unstable_ids ... ok
|
||||
test hosted::client::tests::hosted_oversized_local_bundle_is_rejected_before_network_admission ... ok
|
||||
test hosted::client::tests::hosted_production_auth_proxy_prefix_and_located_rejection ... ok
|
||||
test hosted::client::tests::hosted_production_roundtrip_preserves_comments_noops_and_conflicts ... ok
|
||||
test hosted::client::tests::hosted_publication_race_keeps_receipt_identity_for_review ... ok
|
||||
test hosted::client::tests::hosted_publication_retains_known_resource_after_failed_followup ... ok
|
||||
test hosted::client::tests::hosted_put_preserves_an_opaque_etag_and_compiles_the_accepted_bundle ... ok
|
||||
test hosted::client::tests::hosted_redirect_is_not_followed_or_retried_and_problem_tokens_are_redacted ... ok
|
||||
test hosted::client::tests::hosted_response_limits_cover_declared_and_chunked_bodies ... ok
|
||||
test hosted::client::tests::hosted_structured_mutation_failures_distinguish_precommit_rejections ... ok
|
||||
test hosted::client::tests::hosted_timeout_and_disconnect_leave_mutation_outcomes_explicit ... ok
|
||||
test model_menu::tests::add_bend_here_uses_context_point_and_one_source_aware_history_change ... ok
|
||||
test model_menu::tests::late_menu_actions_do_not_dismiss_new_menu_or_cross_view_context ... ok
|
||||
test model_menu::tests::menu_preserves_pending_properties_and_rejects_delayed_mutations ... ok
|
||||
test model_menu::tests::pending_source_allows_file_navigation_but_disables_model_actions ... ok
|
||||
test model_menu::tests::right_click_targets_actor_without_changing_selection_until_action ... ok
|
||||
test model_menu::tests::show_from_explorer_places_unfolds_and_keeps_semantic_selection ... ok
|
||||
test model_menu::tests::state_menu_folds_and_hides_only_its_captured_placement_and_rejects_stale_views ... ok
|
||||
test model_menu::tests::state_menu_keeps_typed_creation_reachable_and_preserves_pending_properties ... ok
|
||||
test navigation::tests::semantic_browser_finds_behavior_users_without_confusing_containment ... ok
|
||||
test port_edit::tests::all_border_drags_commit_exact_preview_and_restore_automatic_anchors_in_history ... ok
|
||||
test port_edit::tests::graphical_port_reparent_clears_old_anchors_in_the_same_history_operation ... ok
|
||||
test port_preview::tests::functional_creation_identifies_new_and_reused_endpoints_and_owners ... ok
|
||||
test port_preview::tests::legacy_split_discloses_endpoint_routing_item_origins_and_retained_evidence ... ok
|
||||
test port_preview::tests::reused_boundary_shows_item_union_and_existing_allocating_facts ... ok
|
||||
test port_preview::tests::synchronization_preview_exposes_contract_shrinkage_and_current_declaration_origin ... ok
|
||||
test port_workflow::recovery_tests::port_recovery_retains_authored_contract_and_identity_but_rebuilds_preview ... ok
|
||||
test port_workflow::tests::creating_typed_port_and_rejecting_stale_preview_preserve_drafts_and_identity ... ok
|
||||
test port_workflow::tests::graphical_function_exchange_and_component_generation_commit_and_undo_whole_contracts ... ok
|
||||
test port_workflow::tests::legacy_resolution_preserves_original_record_and_applies_as_one_undo ... ok
|
||||
test port_workflow::tests::port_creation_keeps_owner_diagram_and_unfolds_in_the_same_undo ... ok
|
||||
test port_workflow::tests::synchronization_uses_active_contract_instead_of_preserved_direction ... ok
|
||||
test recovery::source5::tests::source5_fingerprint_preserves_historical_field_order_and_diagram_shape ... ok
|
||||
test recovery::source5_tests::source4_checkpoint_remains_explicitly_unsupported_without_touching_disk ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_does_not_refresh_unrelated_clean_buffer_baseline ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_missing_identity_is_not_a_lossless_upgrade ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_old_diagram_property_shape_remains_editable ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_port_draft_replans_and_rejects_stale_base ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_preserves_dirty_invalid_text_and_baseline_exactly ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_preserves_distinct_unapplied_open_workspace ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_property_preserves_invalid_raw_input ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_upgrade_never_rewrites_checkpoint_or_origin ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_upgrades_only_header_and_clean_editor_baseline ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_workflow_rebinds_only_the_proven_old_revision ... ok
|
||||
test recovery::source7_tests::source7_current_combined_contextual_and_operation_drafts_survive_without_execution ... ok
|
||||
test recovery::source7_tests::source7_explicit_new_fields_cannot_enter_frozen_old_model_profiles ... ok
|
||||
test recovery::source7_tests::source7_legacy_inactive_constructor_path_is_structural_but_raw_prose_is_not ... ok
|
||||
test recovery::source7_tests::source7_legacy_profile_workflow_and_semantic_drafts_replan_with_exact_base ... ok
|
||||
test recovery::source7_tests::source7_legacy_profiles_preserve_dirty_source_property_and_behavior_raw_fields ... ok
|
||||
test recovery::source7_tests::source7_legacy_structural_intent_rejects_even_null_but_never_scans_raw_strings ... ok
|
||||
test recovery::source7_tests::source7_legacy_view_selector_refuses_new_relation_kind_without_rewriting_checkpoint ... ok
|
||||
test recovery::source7_tests::source7_recovers_nonempty_frozen_5_and_6_profiles_with_exact_historical_binding ... ok
|
||||
test recovery::tests::altered_accepted_identity_and_unrecognized_raw_property_fields_reject ... ok
|
||||
test recovery::tests::exact_source_and_unfinished_invalid_buffers_restore_without_model_overwrite ... ok
|
||||
test recovery::tests::excess_retained_buffers_cannot_replace_the_last_recoverable_checkpoint ... ok
|
||||
test recovery::tests::invalid_open_retains_distinct_accepted_model_and_repair_workspace ... ok
|
||||
test recovery::tests::missing_includes_remain_reachable_repair_targets_without_fabricated_buffers ... ok
|
||||
test recovery::tests::multiple_sessions_replace_only_their_own_checkpoint_and_corruption_is_retained ... ok
|
||||
test recovery::tests::raw_invalid_property_number_survives_and_stays_rejected_until_repaired ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_draft_cannot_target_an_unreserved_or_non_artifact_identity ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_raw_variants_duplicate_addresses_and_unknown_fields_are_refused ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_reservations_cannot_duplicate_or_claim_an_existing_identity_or_another_owner ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::legitimate_invalid_artifact_checkpoint_round_trips_and_prepares_only_after_explicit_repair ... ok
|
||||
test semantic_review::artifacts_tests::artifact_candidate_is_a_complete_record_not_a_tombstone_or_unattached_creation_shortcut ... ok
|
||||
test semantic_review::artifacts_tests::artifact_creation_and_identified_source_deletion_follow_core_metadata_and_history_boundary_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_gui_reserves_recovers_and_creates_only_after_all_seven_metadata_reviews_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_metadata_apply_and_exact_history_reset_are_one_source_preserving_undo_redo ... ok
|
||||
test semantic_review::artifacts_tests::artifact_move_metadata_none_empty_and_invalid_raw_recovery_are_independent_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_moved_source_absence_deletes_but_destination_only_take_retains_both_directions ... ok
|
||||
test semantic_review::attachments::tests::absent_attachment_payloads_migrate_v1_and_v2_and_source5_upgrade_requires_exact_legacy_base ... ok
|
||||
test semantic_review::attachments::tests::addressed_attachment_candidates_equal_direct_core_oracle_both_directions ... ok
|
||||
test semantic_review::attachments::tests::attachment_apply_is_one_exact_source_and_history_undo_redo ... ok
|
||||
test semantic_review::attachments::tests::attachment_candidate_and_direct_record_keep_conflict_on_actual_slot_without_losing_drafts ... ok
|
||||
test semantic_review::attachments::tests::attachment_pair_drafts_survive_family_switch_and_restore_without_mutating_model ... ok
|
||||
test semantic_review::attachments::tests::functional_incident_source_requires_explicit_matching_port_review_in_one_atomic_candidate ... ok
|
||||
test semantic_review::attachments::tests::parent_and_each_endpoint_candidate_preserve_other_fields_and_match_core_both_directions ... ok
|
||||
test semantic_review::attachments::tests::raw_rejected_attachment_reference_survives_recovery_and_wrong_scope_is_rejected ... ok
|
||||
test semantic_review::attachments::tests::source_only_absence_and_explicit_absent_endpoint_are_different ... ok
|
||||
test semantic_review::attachments::tests::two_incident_endpoint_candidates_form_one_complete_record_and_recover_invalid_excluded_draft ... ok
|
||||
test semantic_review::batch_tests::batch_apply_is_one_exact_source_and_history_undo_redo_roundtrip ... ok
|
||||
test semantic_review::batch_tests::batch_candidate_conflict_keeps_both_raw_values_and_keep_is_a_real_constraint ... ok
|
||||
test semantic_review::batch_tests::batch_complete_constructor_cannot_erase_another_rows_new_literal ... ok
|
||||
test semantic_review::batch_tests::batch_constructor_retirement_conflicts_with_another_rows_kept_bound_in_both_orders ... ok
|
||||
test semantic_review::batch_tests::batch_delayed_text_targets_its_original_row_and_facet_without_switching_focus ... ok
|
||||
test semantic_review::batch_tests::batch_excluded_invalid_row_survives_focus_reopen_and_v2_recovery ... ok
|
||||
test semantic_review::batch_tests::batch_first_equal_constructor_acknowledgement_allows_an_independent_bound ... ok
|
||||
test semantic_review::batch_tests::batch_joint_bounds_use_one_candidate_and_match_an_independent_atomic_core_oracle ... ok
|
||||
test semantic_review::batch_tests::batch_reverse_distinct_targets_work_and_reverse_convergence_is_explicit ... ok
|
||||
test semantic_review::batch_tests::batch_v2_rejects_duplicate_included_sources_bad_addresses_and_stale_model ... ok
|
||||
test semantic_review::batch_tests::category_family_and_members_are_independent_core_checked_facets_both_directions ... ok
|
||||
test semantic_review::batch_tests::recovered_trace_picker_names_existing_trace_instead_of_deleted_reference ... ok
|
||||
test semantic_review::batch_tests::rejected_direction_switch_at_row_limit_preserves_every_recoverable_draft ... ok
|
||||
test semantic_review::compose::diagnostic_tests::distinct_review_conflict_keeps_trace_aliases_even_when_names_are_equal ... ok
|
||||
test semantic_review::compose::diagnostic_tests::reserved_creation_conflict_uses_its_rows_seed_instead_of_a_deleted_reference ... ok
|
||||
test semantic_review::compose::diagnostic_tests::same_review_presence_and_owner_conflict_names_both_facets_and_owners_and_retains_drafts ... ok
|
||||
test semantic_review::compose::diagnostic_tests::typed_owner_display_does_not_reinterpret_uuid_shaped_artifact_text ... ok
|
||||
test semantic_review::constructor_tests::closed_data_and_event_take_composition_matches_core_across_every_kind_pair_and_direction ... ok
|
||||
test semantic_review::constructor_tests::data_group_candidates_cover_every_definition_and_companion_default_both_directions ... ok
|
||||
test semantic_review::constructor_tests::data_group_retains_invalid_sibling_drafts_companion_default_and_variant_editor_buffers ... ok
|
||||
test semantic_review::constructor_tests::exchange_constructor_takes_qualified_annotation_addresses_without_remapping_expression_text ... ok
|
||||
test semantic_review::constructor_tests::existing_fragment_and_branch_group_candidates_edit_complete_owned_order_without_deletion ... ok
|
||||
test semantic_review::constructor_tests::group_take_reference_payload_and_scalar_candidate_match_core_and_one_document_batch ... ok
|
||||
test semantic_review::constructor_tests::historical_event_keep_retires_only_obsolete_branch_and_unchanged_kind_acknowledges_no_payload ... ok
|
||||
test semantic_review::constructor_tests::historical_same_kind_take_preserves_target_only_literals_when_composed_with_candidate ... ok
|
||||
test semantic_review::constructor_tests::occurrence_and_event_candidate_variants_cover_closed_families_without_touching_headers ... ok
|
||||
test semantic_review::constructor_tests::outer_and_nested_constructor_candidates_require_explicit_resolution_and_retain_both_drafts ... ok
|
||||
test semantic_review::constructor_tests::port_group_companions_typed_owner_context_and_direction_restrictions_are_explicit ... ok
|
||||
test semantic_review::constructor_tests::reverse_existing_typed_port_reviews_keep_or_candidate_legacy_without_permitting_typed_oa_write ... ok
|
||||
test semantic_review::constructor_tests::scenario_use_group_takes_typed_binding_references_and_preserves_source_text_both_directions ... ok
|
||||
test semantic_review::keyed_rows_tests::annotation_address_browser_descends_qualified_fields_without_changing_rows ... ok
|
||||
test semantic_review::keyed_rows_tests::annotation_observations_keep_uuid_shaped_expression_text_in_both_sides_and_history ... ok
|
||||
test semantic_review::keyed_rows_tests::batch_keyed_rows_compare_exact_target_slots_and_retain_independent_values ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_choices_separate_reused_keys_from_local_lifelines ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_local_picker_follows_a_candidate_parent_before_the_review_is_valid ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_take_requires_local_correspondence_and_candidate_rejects_wrong_scenario ... ok
|
||||
test semantic_review::keyed_rows_tests::independent_rows_keep_take_candidate_match_core_and_preserve_siblings_both_directions ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_recovery_retains_raw_rows_and_staged_pairs_both_directions_without_applying ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_row_drafts_retain_expression_local_and_presence_across_decisions_and_staging ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_rows_distinguish_unpaired_source_from_explicit_absence_and_require_exact_reset ... ok
|
||||
test semantic_review::keyed_rows_tests::multiple_new_rows_compose_in_empty_collections_using_destination_key_order ... ok
|
||||
test semantic_review::keyed_rows_tests::row_review_apply_preserves_exact_source_and_semantic_history_through_undo_redo ... ok
|
||||
test semantic_review::keyed_tests::deleted_member_source_observation_removes_only_mapped_membership_both_directions ... ok
|
||||
test semantic_review::keyed_tests::exact_literal_new_rows_and_removals_commit_both_directions_without_default_loss ... ok
|
||||
test semantic_review::keyed_tests::exact_reset_only_is_one_history_source_transaction_and_undo_redo_both_directions ... ok
|
||||
test semantic_review::keyed_tests::function_port_members_use_existing_typed_choices_and_preserve_oa_legacy ... ok
|
||||
test semantic_review::keyed_tests::historical_one_sided_pair_migration_requires_exact_reset_and_explicit_overlap_resolution ... ok
|
||||
test semantic_review::keyed_tests::invalid_literal_removal_and_unselected_scalar_buffers_are_retained_and_repairable ... ok
|
||||
test semantic_review::keyed_tests::member_identity_labels_and_new_tabs_preserve_exact_names_and_deleted_keys ... ok
|
||||
test semantic_review::keyed_tests::reset_precedes_equal_constructor_candidate_and_preserves_independent_literal_draft ... ok
|
||||
test semantic_review::keyed_tests::staging_removal_and_obsolete_reset_recovery_keep_other_decisions_and_raw_presence ... ok
|
||||
test semantic_review::keyed_tests::stale_or_source_failed_reset_and_membership_apply_retain_exact_choices ... ok
|
||||
test semantic_review::keyed_tests::unordered_members_keep_take_candidate_preserve_other_rows_both_directions ... ok
|
||||
test semantic_review::keyed_tests::unsupported_independent_families_and_missing_identities_do_not_gain_edit_authority ... ok
|
||||
test semantic_review::message_kind_tests::message_group_candidate_closed_kinds_are_core_validated_in_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_candidate_timer_switches_preserve_both_drafts_and_overlap_is_explicit ... ok
|
||||
test semantic_review::message_kind_tests::message_group_initial_equal_take_acknowledges_only_kind_and_checks_authored_timer_agreement ... ok
|
||||
test semantic_review::message_kind_tests::message_group_keep_historical_switch_retires_timer_and_completed_no_switch_rejects ... ok
|
||||
test semantic_review::message_kind_tests::message_group_rejects_protected_edits_stale_plan_and_source_failure_without_losing_timer ... ok
|
||||
test semantic_review::message_kind_tests::message_group_reply_and_reference_take_require_explicit_call_mapping_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_take_full_timer_and_scalar_candidate_are_one_source_history_change_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_timer_does_not_erase_exchange_without_its_own_selected_decision ... ok
|
||||
test semantic_review::ordered_tests::ambiguous_order_preserves_local_member_and_requires_explicit_candidate_positions ... ok
|
||||
test semantic_review::ordered_tests::historical_pair_restore_uses_exact_member_keys_and_never_zips_order_observations ... ok
|
||||
test semantic_review::ordered_tests::order_take_preserves_destination_only_positions_and_order_alone_cannot_add_members ... ok
|
||||
test semantic_review::ordered_tests::ordered_membership_choices_stage_exact_pairs_in_all_owner_shapes ... ok
|
||||
test semantic_review::ordered_tests::ordered_presence_keep_take_candidate_remove_only_selected_entry_and_order_take_reorders_only ... ok
|
||||
test semantic_review::ordered_tests::ordered_review_apply_is_exact_source_history_transaction_with_reopen_and_undo_redo ... ok
|
||||
test semantic_review::ordered_tests::ordered_take_uses_unique_anchors_and_matches_core_with_unrelated_candidate_both_directions ... ok
|
||||
test semantic_review::ordered_tests::raw_order_survives_membership_changes_decisions_and_recovery_until_explicit_reconcile ... ok
|
||||
test semantic_review::ordered_tests::several_incoming_members_follow_source_order_despite_independent_identity_sorting ... ok
|
||||
test semantic_review::recovery::tests::raw_scalar_and_closed_constructor_drafts_recover_against_exact_model_only ... ok
|
||||
test semantic_review::recovery::tests::version_one_without_orders_restores_raw_intent_and_replans_without_execution ... ok
|
||||
test semantic_review::source7_tests::contextual_incident_leaf_keep_allows_path_change_but_conflicts_with_changed_leaf_both_directions ... ok
|
||||
test semantic_review::source7_tests::reverse_operation_omission_gui_requires_raw_rationale_and_matches_one_core_batch_after_recovery ... ok
|
||||
test semantic_review::source7_tests::semantic_operation_virtual_none_candidate_uses_exact_allocation_and_preserves_accepted_bytes ... ok
|
||||
test semantic_review::tests::candidate_mixed_with_reference_take_uses_typed_correspondence_not_text_guessing ... ok
|
||||
test semantic_review::tests::deselected_invalid_candidate_is_retained_but_does_not_poison_another_selected_scalar ... ok
|
||||
test semantic_review::tests::explicit_trace_selection_updates_only_that_history ... ok
|
||||
test semantic_review::tests::first_equal_constructor_acknowledges_only_kind_and_allows_independent_leaves ... ok
|
||||
test semantic_review::tests::independent_review_clear_bound_ignores_retained_invalid_other_facet ... ok
|
||||
test semantic_review::tests::independent_review_keyed_fact_titles_keep_live_deleted_and_qualified_identity ... ok
|
||||
test semantic_review::tests::inherited_annotation_impact_requires_exact_acceptance_and_edits_clear_approval ... ok
|
||||
test semantic_review::tests::invalid_numeric_draft_and_protected_edits_retain_workflow_and_source ... ok
|
||||
test semantic_review::tests::read_only_structured_facts_and_partial_rollup_are_honest ... ok
|
||||
test semantic_review::tests::relation_candidates_preserve_endpoints_and_combine_selected_roles_and_bounds ... ok
|
||||
test semantic_review::tests::scalar_keep_take_candidate_commit_exact_source_and_history_in_both_directions ... ok
|
||||
test semantic_review::tests::scoped_literal_list_edits_preserve_unfinished_values_and_other_facet_buffers ... ok
|
||||
test semantic_review::tests::stale_plan_and_source_writeback_failure_do_not_lose_decisions_or_history ... ok
|
||||
test semantic_review::tests::state_kind_scalar_uses_typed_candidate_and_core_validation ... ok
|
||||
test semantic_review::view::reserved_artifact_tests::reserved_artifact_facet_and_reference_labels_survive_recovery_without_calling_it_deleted ... ok
|
||||
test source_navigation::tests::search_uses_utf8_columns_wraps_and_refreshes_after_edits ... ok
|
||||
test source_tree::tests::active_scroll_offset_uses_the_visible_order_and_retains_ancestor_context ... ok
|
||||
test source_tree::tests::collapsed_folders_retain_active_dirty_and_diagnostic_markers ... ok
|
||||
test source_tree::tests::deep_paths_build_expand_and_drop_on_a_small_stack ... ok
|
||||
test source_tree::tests::detached_buffers_keep_paths_and_only_clean_buffers_are_closable ... ok
|
||||
test source_tree::tests::exact_unicode_spaces_and_file_folder_name_collisions_are_not_normalized ... ok
|
||||
test source_tree::tests::folders_are_compact_and_sorted_before_files_without_losing_duplicate_basenames ... ok
|
||||
test source_workspace::tests::draft_history_budget_covers_inactive_files_without_discarding_drafts ... ok
|
||||
test source_workspace::tests::switching_retains_invalid_drafts_and_independent_history ... ok
|
||||
test tests::actor_port_creation_updates_containment_and_locate_reveals_its_owner ... ok
|
||||
test tests::adding_bend_between_close_ports_stays_outside_owner_clearance ... ok
|
||||
test tests::behavior_and_data_authoring_do_not_place_nodes_in_unrelated_architecture_views ... ok
|
||||
test tests::bidirectional_transition_ui_commits_once_and_preserves_other_diagrams ... ok
|
||||
test tests::counterpart_creation_focuses_visible_target_and_reuse_keeps_views ... ok
|
||||
test tests::creation_from_capabilities_routes_work_to_architecture_and_folded_allocation_inserts_below_existing_work ... ok
|
||||
test tests::dragging_keeps_semantic_selection_and_same_node_remains_editable ... ok
|
||||
test tests::escaped_string_mode_preserves_exact_control_characters ... ok
|
||||
test tests::every_demo_record_has_a_lossless_graphical_draft ... ok
|
||||
test tests::explicit_relationship_builder_never_mutates_on_preview ... ok
|
||||
test tests::explorer_and_creation_selection_follow_their_own_placement ... ok
|
||||
test tests::fit_adapts_to_canvas_returning_after_help_but_preserves_manual_navigation ... ok
|
||||
test tests::fit_uses_measured_canvas_bounds_and_preserves_them_on_open ... ok
|
||||
test tests::focused_explorer_follows_reparenting_without_changing_identity ... ok
|
||||
test tests::graphical_rename_keeps_aliases_and_references_and_undo ... ok
|
||||
test tests::identity_property_change_is_atomic_and_rewrites_all_live_references ... ok
|
||||
test tests::invalid_numeric_draft_survives_navigation_save_and_help ... ok
|
||||
test tests::invalid_save_and_continue_returns_to_repairable_draft ... ok
|
||||
test tests::malformed_source_preserves_model_and_is_recoverable ... ok
|
||||
test tests::manual_trace_requires_target_and_selection_normalizes_creation_kind ... ok
|
||||
test tests::mission_capability_authoring_is_contextual_atomic_and_text_equivalent ... ok
|
||||
test tests::modal_owns_background_commands_and_shortcuts ... ok
|
||||
test tests::nested_allocation_insertion_reflows_sibling_subtrees_and_preserves_fold_state ... ok
|
||||
test tests::opening_and_creating_models_preserve_the_actual_window_size_for_fit ... ok
|
||||
test tests::opening_legacy_source_surfaces_report_without_modifying_original_bytes ... ok
|
||||
test tests::pending_source_prevents_property_draft_collision_and_preserves_both_if_present ... ok
|
||||
test tests::placement_identity_edit_then_drag_and_diagram_identity_then_arrange ... ok
|
||||
test tests::placement_relocation_follows_cross_layer_traceability_view ... ok
|
||||
test tests::property_enum_and_optional_reference_roundtrip ... ok
|
||||
test tests::reopening_canvas_for_a_modal_preserves_viewport_after_route_edits ... ok
|
||||
test tests::revealing_an_implicit_function_port_unfolds_its_visible_architecture_owner ... ok
|
||||
test tests::routing_actions_are_atomic_guarded_and_fit_the_authored_detour ... ok
|
||||
test tests::selecting_current_constructors_preserves_payloads ... ok
|
||||
test tests::source_find_navigates_an_invalid_draft_without_applying_or_losing_it ... ok
|
||||
test tests::source_navigation_waits_for_editor_layout_and_cancels_on_edit ... ok
|
||||
test tests::system_only_models_open_the_populated_perspective ... ok
|
||||
test tests::transition_resolutions_belong_to_the_effective_target_and_kind ... ok
|
||||
test view_copy::tests::duplicate_retains_ports_routes_options_and_artifact_claims_with_exact_undo_redo ... ok
|
||||
test view_copy::tests::duplicate_state_view_preserves_machine_nesting_and_collapse_with_unique_aliases ... ok
|
||||
test view_copy::tests::missing_view_does_not_propose_an_empty_replacement ... ok
|
||||
test views::traceability::tests::traceability_browsing_retains_invalid_property_draft_and_existing_select_guard ... ok
|
||||
test views::traceability::tests::traceability_filter_reaches_artifacts_after_68_traces_and_searches_all_metadata ... ok
|
||||
test workflow::communication::tests::communication_requires_two_explicit_ports_and_recovers_the_partial_choice ... ok
|
||||
test workflow::port_authoring_tests::boundary_picker_matches_exact_commands_across_contracts_and_ownership ... ok
|
||||
test workflow::port_authoring_tests::boundary_picker_recomputes_for_unoriented_reverse_endpoints_without_relaxing_contracts ... ok
|
||||
test workflow::port_authoring_tests::duplicate_port_names_show_owner_contract_and_unique_alias ... ok
|
||||
test workflow::port_authoring_tests::fresh_functions_are_actual_picker_targets_and_plan_enables_apply ... ok
|
||||
test workflow::port_authoring_tests::generic_component_port_connection_keeps_its_endpoint_and_direction ... ok
|
||||
test workflow::port_authoring_tests::ordinary_standard_connections_default_unoriented_and_new_roles_exclude_legacy ... ok
|
||||
test workflow::recovery::tests::incomplete_relationship_and_trace_recover_raw_fields_and_reject_changed_model ... ok
|
||||
test workflow::recovery::tests::transition_recovery_replans_typed_request_without_persisted_commands ... ok
|
||||
test workflow::transition_tests::basic_transition_boundary_choice_is_required_without_an_inferred_system ... ok
|
||||
test workflow::transition_tests::basic_transition_creates_overview_when_existing_views_cannot_show_result ... ok
|
||||
test workflow::transition_tests::basic_transition_explicit_destination_appends_below_existing_bounds_and_is_one_source_edit ... ok
|
||||
test workflow::transition_tests::basic_transition_invalid_explicit_destination_retains_choice_and_refuses ... ok
|
||||
test workflow::transition_tests::basic_transition_reconcile_keeps_existing_selected_view_placement_and_route_exact ... ok
|
||||
test workflow::transition_tests::basic_transition_skips_lowest_uuid_state_view_and_preserves_oa ... ok
|
||||
|
||||
test result: ok. 675 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 448.33s
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"command": "arcadia-studio-tests.exe --test-threads=1",
|
||||
"started": "2026-09-11T12:01:47.3639508+00:00",
|
||||
"ended": "2026-09-11T12:09:15.9218331+00:00",
|
||||
"seconds": 448.5578823,
|
||||
"exit_code": 0,
|
||||
"executable_sha256": "6E677F58458B6122EA1886AAC98882640CD9CF260651FE3ECE62BDDA4BE38CC0"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"artifacts": [
|
||||
{
|
||||
"sha256": "6E677F58458B6122EA1886AAC98882640CD9CF260651FE3ECE62BDDA4BE38CC0",
|
||||
"file": "arcadia-studio-tests.exe",
|
||||
"bytes": 107061248
|
||||
},
|
||||
{
|
||||
"sha256": "F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4",
|
||||
"file": "libunwind.dll",
|
||||
"bytes": 190976
|
||||
}
|
||||
],
|
||||
"created": "2026-09-11T12:00:28.0285570Z",
|
||||
"testResult": "focused4:22 passed,0 failed,653 filtered; test inventory675",
|
||||
"sourceInputs": "../focused4-inputs.json"
|
||||
}
|
||||
@@ -0,0 +1,244 @@
|
||||
{
|
||||
"format_version": 1,
|
||||
"created_utc": "2026-09-11T13:04:09.8807042Z",
|
||||
"scope": "37 byte-exact raw evidence records and 2 generated explanatory/readback files; inventory excludes itself",
|
||||
"raw_file_count": 37,
|
||||
"raw_bytes": 201835,
|
||||
"directory_file_count": 40,
|
||||
"files": [
|
||||
{
|
||||
"path": "desktop/clippy1-status.json",
|
||||
"source": ".local/contextual-source-20260911/clippy1-status.json",
|
||||
"bytes": 118,
|
||||
"sha256": "2D85A6E841E743B564B7AAFFA756F372739567F7728EE616B7122076218B77D6"
|
||||
},
|
||||
{
|
||||
"path": "desktop/clippy1.log",
|
||||
"source": ".local/contextual-source-20260911/clippy1.log",
|
||||
"bytes": 3126,
|
||||
"sha256": "75BB52CB0CAD69FF257F6C9F05D0514644975AA333BA2645BBEE41925FFFD432"
|
||||
},
|
||||
{
|
||||
"path": "desktop/clippy2-status.json",
|
||||
"source": ".local/contextual-source-20260911/clippy2-status.json",
|
||||
"bytes": 257,
|
||||
"sha256": "F876F56FA20383C206DBCA137E1A8999963C0A61A4B0547B22CEA67032E3827C"
|
||||
},
|
||||
{
|
||||
"path": "desktop/clippy2.log",
|
||||
"source": ".local/contextual-source-20260911/clippy2.log",
|
||||
"bytes": 157,
|
||||
"sha256": "DACDAADE0BFCF36EAC3550425B8D28AE0F266FE7AD57538F5B4D9C41FF8EEA87"
|
||||
},
|
||||
{
|
||||
"path": "desktop/fmt-final-status.json",
|
||||
"source": ".local/contextual-source-20260911/fmt-final-status.json",
|
||||
"bytes": 187,
|
||||
"sha256": "4FB53DC797C682977A180042219AA065B91C955081D0C1FA342D39CCFDE4FCA8"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused1-status.json",
|
||||
"source": ".local/contextual-source-20260911/focused1-status.json",
|
||||
"bytes": 118,
|
||||
"sha256": "114DBEAF0BF83EB2FDE30229D1CBEAAD9A877F804258719EACE9F71A5CDD9D5A"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused1.log",
|
||||
"source": ".local/contextual-source-20260911/focused1.log",
|
||||
"bytes": 4059,
|
||||
"sha256": "47D3071A768200CBF07972E602F64C586C428D444C49FD8C3757E05F33DADF2E"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused2-status.json",
|
||||
"source": ".local/contextual-source-20260911/focused2-status.json",
|
||||
"bytes": 118,
|
||||
"sha256": "751B73AABFB359352E70923DA243B33B2EF6EF11FBA7B3219C53372895776C40"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused2.log",
|
||||
"source": ".local/contextual-source-20260911/focused2.log",
|
||||
"bytes": 4738,
|
||||
"sha256": "5511947F161FBBA804DAF9F94A376A35D0FF7D0A137A98909C9872C25CC2BD7D"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused3-status.json",
|
||||
"source": ".local/contextual-source-20260911/focused3-status.json",
|
||||
"bytes": 118,
|
||||
"sha256": "71EAD5DBCA70CF34202BA02952A7291E4C0A9C65B14642FF8461377650251744"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused3.log",
|
||||
"source": ".local/contextual-source-20260911/focused3.log",
|
||||
"bytes": 3303,
|
||||
"sha256": "C7CF8FDBF4A5D2FAEA42053826D69791CE9235F9E6EE4350E74003DEB43F15A1"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused4-inputs.json",
|
||||
"source": ".local/contextual-source-20260911/focused4-inputs.json",
|
||||
"bytes": 44197,
|
||||
"sha256": "396255153B439B8427874E288E6C10D880A83CBDEDA345082B3F7D9A9722D629"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused4-status.json",
|
||||
"source": ".local/contextual-source-20260911/focused4-status.json",
|
||||
"bytes": 116,
|
||||
"sha256": "D1BBB26A1735523C2816003C98D6DB73841667886369B00DDB2639FAD5557FC4"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused4.log",
|
||||
"source": ".local/contextual-source-20260911/focused4.log",
|
||||
"bytes": 3211,
|
||||
"sha256": "3A286BC01FC19B9B48EF371E21659DFC215B7D7883D5FFD10DBC3406AAB4037A"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused5-delta.json",
|
||||
"source": ".local/contextual-source-20260911/focused5-delta.json",
|
||||
"bytes": 1681,
|
||||
"sha256": "14162287460DF568F2CB513146651691862DE4C16F57D165A9F047A9CA49C792"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused5-inputs.json",
|
||||
"source": ".local/contextual-source-20260911/focused5-inputs.json",
|
||||
"bytes": 44179,
|
||||
"sha256": "C0FB04418539D42186144BEC263F4A6D3B98BC51661B8460113E51292460A05B"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused5-status.json",
|
||||
"source": ".local/contextual-source-20260911/focused5-status.json",
|
||||
"bytes": 293,
|
||||
"sha256": "405169976AC379546E129E6D1FCA072B8F3660FE124B59CAE78584D61C3EC81A"
|
||||
},
|
||||
{
|
||||
"path": "desktop/focused5.log",
|
||||
"source": ".local/contextual-source-20260911/focused5.log",
|
||||
"bytes": 3341,
|
||||
"sha256": "80121F2815E2446891B6845140B5FCD106D78A37F543465177F5BDA4B8C8AE93"
|
||||
},
|
||||
{
|
||||
"path": "desktop/gui-final-status.json",
|
||||
"source": ".local/contextual-source-20260911/gui-final-status.json",
|
||||
"bytes": 232,
|
||||
"sha256": "976D790EAA2DD98CD86D56F1E8FDC571BD18DB6E1C06962E9BB4EA2F311BD935"
|
||||
},
|
||||
{
|
||||
"path": "desktop/gui-final.log",
|
||||
"source": ".local/contextual-source-20260911/gui-final.log",
|
||||
"bytes": 157,
|
||||
"sha256": "1D82FDE70BB41C4E2AF0DA35F970CCCBB91FC30247D28BC8D4AA6896EBE30DA5"
|
||||
},
|
||||
{
|
||||
"path": "desktop/gui-verified/manifest.json",
|
||||
"source": ".local/contextual-source-20260911/gui-verified/manifest.json",
|
||||
"bytes": 609,
|
||||
"sha256": "8B6F8938B66F5BB2E1BE805CB840F57765264B9C29B41845D94407037A561108"
|
||||
},
|
||||
{
|
||||
"path": "desktop/guide-final-status.json",
|
||||
"source": ".local/contextual-source-20260911/guide-final-status.json",
|
||||
"bytes": 281,
|
||||
"sha256": "A2F07DB7BD9FD5FCC28DE506A20EACCFFC9BE157CFB83258198443B19F21193C"
|
||||
},
|
||||
{
|
||||
"path": "desktop/guide-final.log",
|
||||
"source": ".local/contextual-source-20260911/guide-final.log",
|
||||
"bytes": 560,
|
||||
"sha256": "8A84A57A967097E16E320ED78818305487B5CED25159CD6DB2C54345C6D1788C"
|
||||
},
|
||||
{
|
||||
"path": "desktop/run-final-gates.ps1",
|
||||
"source": ".local/contextual-source-20260911/run-final-gates.ps1",
|
||||
"bytes": 1389,
|
||||
"sha256": "885C165B9937B6BDF8043AC945FF60C3CF31EAB7DB8323A0A16BD262F920124F"
|
||||
},
|
||||
{
|
||||
"path": "desktop/stage-final.ps1",
|
||||
"source": ".local/contextual-source-20260911/stage-final.ps1",
|
||||
"bytes": 2638,
|
||||
"sha256": "41D292C7066A265BB220BF3D67919BD531651931EEAC0301D7655A11DB668044"
|
||||
},
|
||||
{
|
||||
"path": "desktop/tests-final/manifest.json",
|
||||
"source": ".local/contextual-source-20260911/tests-final/manifest.json",
|
||||
"bytes": 623,
|
||||
"sha256": "0F143F45B4415C174E3D4879FB85A09851B10B2FFDC6B3F4435452C2A840EF84"
|
||||
},
|
||||
{
|
||||
"path": "desktop/tests-verified/full-desktop.log",
|
||||
"source": ".local/contextual-source-20260911/tests-verified/full-desktop.log",
|
||||
"bytes": 76384,
|
||||
"sha256": "DAD6B821863262F6420DF6D60D2225C529C79310E24F75D5DDA2C7892BF15D57"
|
||||
},
|
||||
{
|
||||
"path": "desktop/tests-verified/full-result.json",
|
||||
"source": ".local/contextual-source-20260911/tests-verified/full-result.json",
|
||||
"bytes": 302,
|
||||
"sha256": "737BC7053D7B63EC660C930EC578E6E21E3905BEE6D85A3BE9FDC9C49D97D561"
|
||||
},
|
||||
{
|
||||
"path": "desktop/tests-verified/manifest.json",
|
||||
"source": ".local/contextual-source-20260911/tests-verified/manifest.json",
|
||||
"bytes": 524,
|
||||
"sha256": "17AEA1E6AF2C86A77BBAE0AB41932CAE8CB82E8D197644B3C0BF2CF2A196B4C4"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/baseline-check.log",
|
||||
"source": ".local/staged-source-oracle-20260911/baseline-check.log",
|
||||
"bytes": 82,
|
||||
"sha256": "2D82DF14FB345414E164B57177D5A21C426F65C18EB5EF9E010984A92AD2E731"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/baseline-cli-check-result.json",
|
||||
"source": ".local/staged-source-oracle-20260911/baseline-cli-check-result.json",
|
||||
"bytes": 169,
|
||||
"sha256": "C9376E2458743B162E69EA67A16992D6F7D0D813636E82D8E616D0EB504A25E3"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/baseline-cli-check.json",
|
||||
"source": ".local/staged-source-oracle-20260911/baseline-cli-check.json",
|
||||
"bytes": 1902,
|
||||
"sha256": "66004F0718E5071F5F08C7DE11A4E8C503DF72EF018C799610111780D36A228F"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/build-initial-result.json",
|
||||
"source": ".local/staged-source-oracle-20260911/build-initial-result.json",
|
||||
"bytes": 94,
|
||||
"sha256": "14BF8DD87ADE8DFE2D230F350ADBC2BA9285B1488FB654AC4EB8C62C0C34F7C8"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/build-initial.log",
|
||||
"source": ".local/staged-source-oracle-20260911/build-initial.log",
|
||||
"bytes": 0,
|
||||
"sha256": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/checks-initial-result.json",
|
||||
"source": ".local/staged-source-oracle-20260911/checks-initial-result.json",
|
||||
"bytes": 100,
|
||||
"sha256": "28F505AF226299E2FF2660DF2BF73E84161D22AEA41229C6997F5B416738607B"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/manifest.json",
|
||||
"source": ".local/staged-source-oracle-20260911/manifest.json",
|
||||
"bytes": 1709,
|
||||
"sha256": "C76C7C6FF4EC1901662A0FCFB949761F6F112029D901D3BBE70E63068E83564A"
|
||||
},
|
||||
{
|
||||
"path": "oracle-preparation/self-check-initial.log",
|
||||
"source": ".local/staged-source-oracle-20260911/self-check-initial.log",
|
||||
"bytes": 763,
|
||||
"sha256": "6114C5BF9B75A27B4333E3DE38B3CAB08B976B2F01F3158AD8A7127FF7EE0ABB"
|
||||
},
|
||||
{
|
||||
"path": "README.md",
|
||||
"source": null,
|
||||
"bytes": 5833,
|
||||
"sha256": "AA559AFB8C75B6905E31F95D191BAE8688496FD1C0911330B9E2BCD043156CF6"
|
||||
},
|
||||
{
|
||||
"path": "source-freeze-readback.json",
|
||||
"source": null,
|
||||
"bytes": 3766,
|
||||
"sha256": "0CFA05BB91E52E6F0D4D9E11B5DBF84E0DD90DAA570D4422F3E4CCCDEA3C10E1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
PASS Baseline: complete Project + 2 exact source/disk files, original role UUIDs
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"Command": "arcadia check harness/fixtures/staged-source-authoring/base/project.arcadia --json",
|
||||
"Exit": 0,
|
||||
"RecordedUtc": "2026-09-11T11:54:47.3267470Z"
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"format_version": 1,
|
||||
"entry": "harness/fixtures/staged-source-authoring/base/project.arcadia",
|
||||
"operation": "check",
|
||||
"status": "checked",
|
||||
"exit_code": 0,
|
||||
"written": false,
|
||||
"diagnostics": [
|
||||
{
|
||||
"severity": "warning",
|
||||
"code": "missing_system",
|
||||
"message": "Identify the SA system of interest.",
|
||||
"coordinate_space": "input",
|
||||
"location": {
|
||||
"path": "project.arcadia",
|
||||
"start": 11,
|
||||
"end": 121,
|
||||
"line": 2,
|
||||
"column": 1
|
||||
},
|
||||
"related": [],
|
||||
"object_id": "d1510000-0000-4000-8000-000000000001",
|
||||
"field": "elements"
|
||||
},
|
||||
{
|
||||
"severity": "warning",
|
||||
"code": "empty_sequence",
|
||||
"message": "Add ordered occurrences.",
|
||||
"coordinate_space": "input",
|
||||
"location": {
|
||||
"path": "project.arcadia",
|
||||
"start": 375,
|
||||
"end": 377,
|
||||
"line": 8,
|
||||
"column": 15
|
||||
},
|
||||
"related": [],
|
||||
"object_id": "d1510000-0000-4000-8000-000000000002",
|
||||
"field": "steps"
|
||||
},
|
||||
{
|
||||
"severity": "warning",
|
||||
"code": "empty_sequence",
|
||||
"message": "Add ordered occurrences.",
|
||||
"coordinate_space": "input",
|
||||
"location": {
|
||||
"path": "project.arcadia",
|
||||
"start": 581,
|
||||
"end": 583,
|
||||
"line": 13,
|
||||
"column": 15
|
||||
},
|
||||
"related": [],
|
||||
"object_id": "d1510000-0000-4000-8000-000000000003",
|
||||
"field": "steps"
|
||||
}
|
||||
],
|
||||
"changes": [],
|
||||
"identities_to_stabilize": 0,
|
||||
"migration": null,
|
||||
"notes": [
|
||||
"Diagnostic object IDs are omitted for declarations without authored IDs; lint's temporary identities are not the candidate's identities.",
|
||||
"Disk writes use the core journal/conflict checks. This is not cross-process atomic visibility or a power-loss durability guarantee; pending saves are never implicitly recovered. A failed write may require explicit journal recovery."
|
||||
]
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"Exit": 0,
|
||||
"Seconds": 7.5659589,
|
||||
"FinishedUtc": "2026-09-11T12:01:48.0539296Z"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"SelfCheckExit": 0,
|
||||
"BaselineExit": 0,
|
||||
"FinishedUtc": "2026-09-11T12:02:24.4408700Z"
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"RecordedUtc": "2026-09-11T12:03:07.0603355Z",
|
||||
"Build": {
|
||||
"Exit": 0,
|
||||
"Seconds": 7.5659589,
|
||||
"FinishedUtc": "2026-09-11T12:01:48.0539296Z"
|
||||
},
|
||||
"Checks": {
|
||||
"SelfCheckExit": 0,
|
||||
"BaselineExit": 0,
|
||||
"FinishedUtc": "2026-09-11T12:02:24.44087Z"
|
||||
},
|
||||
"Artifacts": [
|
||||
{
|
||||
"Path": "harness/staged-source-authoring-contract.rs",
|
||||
"Bytes": 22693,
|
||||
"SHA256": "9EB9DD3868B6CB772F907D16AE02995AD10A16F85C087012C24948E6E6FE775D"
|
||||
},
|
||||
{
|
||||
"Path": "harness/fixtures/staged-source-authoring/base/project.arcadia",
|
||||
"Bytes": 593,
|
||||
"SHA256": "AA844950EC4FB86F262A257E1FC370A26557EA7978D8A4CAB78265037660234C"
|
||||
},
|
||||
{
|
||||
"Path": "harness/fixtures/staged-source-authoring/base/notes.arcadia",
|
||||
"Bytes": 63,
|
||||
"SHA256": "AD9DE02963C20D1F43856455A797DEB05CA674659E45F2C4B96B52783024F8BD"
|
||||
},
|
||||
{
|
||||
"Path": ".local/target-gnullvm/debug/deps/liboa_core-3e81c616fea1d901.rlib",
|
||||
"Bytes": 99971382,
|
||||
"SHA256": "5018A1FD7286ED9DFEDCBBF5B68B399AD5D143F2A9AAAED3078CFC934C9589C4"
|
||||
},
|
||||
{
|
||||
"Path": ".local/staged-source-oracle-20260911/staged-source-authoring-contract.exe",
|
||||
"Bytes": 20864512,
|
||||
"SHA256": "967D9BA3C6FB3A7EFB410833903EC94556CA2D48A67D5072C8BB160F40A00F9C"
|
||||
},
|
||||
{
|
||||
"Path": ".local/staged-source-oracle-20260911/self-check-initial.log",
|
||||
"Bytes": 763,
|
||||
"SHA256": "6114C5BF9B75A27B4333E3DE38B3CAB08B976B2F01F3158AD8A7127FF7EE0ABB"
|
||||
},
|
||||
{
|
||||
"Path": ".local/staged-source-oracle-20260911/baseline-check.log",
|
||||
"Bytes": 82,
|
||||
"SHA256": "2D82DF14FB345414E164B57177D5A21C426F65C18EB5EF9E010984A92AD2E731"
|
||||
}
|
||||
]
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
PASS Lifeline: complete model/source fixed point, false-carrier metadata ignored, repeated-command refusal, one Undo/Redo, comment drift and explicit retained-file falsifiers; 3 reachable files
|
||||
PASS Chain: complete model/source fixed point, false-carrier metadata ignored, repeated-command refusal, one Undo/Redo, comment drift and explicit retained-file falsifiers; 4 reachable files
|
||||
PASS Machine: complete model/source fixed point, false-carrier metadata ignored, repeated-command refusal, one Undo/Redo, comment drift and explicit retained-file falsifiers; 6 reachable files
|
||||
PASS wrong source binding, machine owner and view geometry rejected; no native acceptance claimed
|
||||
PASS earlier-stage role identities remain pinned independently of a later carrier
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"checked_utc": "2026-09-11T13:02:51.2773935Z",
|
||||
"scope": "Read-only comparison of 13 desktop inputs with original focused5-inputs.json; no new build/test/native execution",
|
||||
"files": [
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app.rs",
|
||||
"expected": "B10BFA57F331DA3928D5FE27D2AEBDB13F6054C6E3D48C4CFD24FF81726094AD",
|
||||
"actual": "B10BFA57F331DA3928D5FE27D2AEBDB13F6054C6E3D48C4CFD24FF81726094AD",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/checkpoints.rs",
|
||||
"expected": "55E5BABDCABEF767AF3BC8BE9CC3153B3F5CC0695701B890820EC0225643852E",
|
||||
"actual": "55E5BABDCABEF767AF3BC8BE9CC3153B3F5CC0695701B890820EC0225643852E",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior.rs",
|
||||
"expected": "C9E0AEA6A24CC982D0D82EE2B9B66F250CDFAC037B36BF6B1B9D7DD38246CD3C",
|
||||
"actual": "C9E0AEA6A24CC982D0D82EE2B9B66F250CDFAC037B36BF6B1B9D7DD38246CD3C",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/creation.rs",
|
||||
"expected": "CA7275B5C0118CBB78F5D16254E50FADDC26DBB53816D01950064C852E296B2E",
|
||||
"actual": "CA7275B5C0118CBB78F5D16254E50FADDC26DBB53816D01950064C852E296B2E",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/scenario.rs",
|
||||
"expected": "D12A4B1CAA61C08F69C4D2A64BD15568C4B7158DEA91AAC5A52A58A35ADB863C",
|
||||
"actual": "D12A4B1CAA61C08F69C4D2A64BD15568C4B7158DEA91AAC5A52A58A35ADB863C",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/scenario/workspace.rs",
|
||||
"expected": "69C7AD32E4BDC39F42D2E6C7764CFE1FA7867CD7DBCF9B904DEC805E6C912666",
|
||||
"actual": "69C7AD32E4BDC39F42D2E6C7764CFE1FA7867CD7DBCF9B904DEC805E6C912666",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/topology.rs",
|
||||
"expected": "D06B2F0FC39B4814E94200297E148F1D4D97E04CB167766030AC9DF18689E3B0",
|
||||
"actual": "D06B2F0FC39B4814E94200297E148F1D4D97E04CB167766030AC9DF18689E3B0",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/topology/contextual.rs",
|
||||
"expected": "EDC84FC69D8D4A8F4CE81A4452C4E2E35CFAF98ADDEED10235F392506C74E8B0",
|
||||
"actual": "EDC84FC69D8D4A8F4CE81A4452C4E2E35CFAF98ADDEED10235F392506C74E8B0",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/topology/direct.rs",
|
||||
"expected": "413AA2009EE4CBA0941836B43E41F16A04C8FC8568B6E92DB5BB08516E95C287",
|
||||
"actual": "413AA2009EE4CBA0941836B43E41F16A04C8FC8568B6E92DB5BB08516E95C287",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/topology/view.rs",
|
||||
"expected": "A7D806CD621BDF857C4E4861685CD3EB556B320DE3985B9CC3D9D131DAD370DC",
|
||||
"actual": "A7D806CD621BDF857C4E4861685CD3EB556B320DE3985B9CC3D9D131DAD370DC",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/guide.rs",
|
||||
"expected": "47EEB3CC0A48D5712720096015A08387CD354FB91559B0BD6FA106B5CAC6292C",
|
||||
"actual": "47EEB3CC0A48D5712720096015A08387CD354FB91559B0BD6FA106B5CAC6292C",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/source_draft.rs",
|
||||
"expected": "68F396C420FFF132FF0EAB82CB2C6251477412F6F9F90AD2E76C51A259F8A69A",
|
||||
"actual": "68F396C420FFF132FF0EAB82CB2C6251477412F6F9F90AD2E76C51A259F8A69A",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/behavior/contextual_source_tests.rs",
|
||||
"expected": "5F05318A6533503B9D6FEBF1EC4DD7256F192394BC1B952A7904C8175BD8DDAE",
|
||||
"actual": "5F05318A6533503B9D6FEBF1EC4DD7256F192394BC1B952A7904C8175BD8DDAE",
|
||||
"unchanged": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
# Immutable full desktop test run — 2026-09-11
|
||||
|
||||
Root authorized one full run after the separate native-recovery evidence was preserved. Codex-9e8r6t /root/release_audit executed the existing Windows test binary without Cargo, rebuilding, source edits, native automation or WSL actions.
|
||||
|
||||
Result: **679 passed, 0 failed, 0 ignored, 0 measured, 0 filtered out**, terminal exit 0. The test harness reports 576.67 seconds; the wrapper records 576.782 seconds, from 15:38:16 to 15:47:53 UTC. Stdout and stderr are preserved separately; stderr is empty.
|
||||
|
||||
Before running, the exact executable SHA256 `75AB0E151D85473631D5A145527F3F6B9768A3CD61CE66A0603A574E09557017` and libunwind.dll SHA256 `F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4` were checked. The executable's --list command exited 0 with exactly 679 unique tests. The run used --test-threads=1, ordinary Windows/Rust stack defaults with no RUST_MIN_STACK override, and a distinct private TEMP/TMP/APPDATA/LOCALAPPDATA. The executable hash matched again afterward. The private profile and test output models are excluded.
|
||||
|
||||
Seven exact raw records/helper copies are mapped by copy-provenance.json. Manifest.json hashes every other file and excludes itself. The preserved runner refuses existing output and a mismatched binary/inventory. It is an executed-method record, not an instruction to repeat this full run. No binary/rlib is copied here. Original artifacts remain under .local/contextual-source-layout-20260911/tests-final; their [stage manifest](../contextual-source-layout-verified-20260911/tests-final-manifest.json) and [source inputs4](../contextual-source-layout-postboot-20260911/inputs4.json) retain the exact build provenance.
|
||||
|
||||
This later result supersedes the earlier 'full 679 not run' limitation for this exact immutable test artifact only. Earlier frozen gate archives truthfully retain their pre-full-run scope. It does not establish direct native Create/history/Machine behavior, a different source revision, another binary or Linux acceptance. GUI5657 native recovery/cancellation is preserved separately in [the recovery archive](../contextual-source-recovery-20260911/README.md).
|
||||
|
||||
Root owns staging and the narrow attribute rule `harness/experiments/contextual-source-layout-full-20260911/** -text whitespace=-blank-at-eof,cr-at-eol`. Four actual .log payloads, including empty stderr records, require explicit inclusion under the global *.log ignore rule. This worker did not change that rule or the index. Test execution lease is released and no owned process remains.
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"checkedUtc": "2026-09-11T15:38:14.483827+00:00",
|
||||
"executable": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\contextual-source-layout-20260911\\tests-final\\arcadia-studio-tests.exe",
|
||||
"sha256": "75AB0E151D85473631D5A145527F3F6B9768A3CD61CE66A0603A574E09557017",
|
||||
"bytes": 107735040,
|
||||
"runtimeSha256": "F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4",
|
||||
"inventoryExitCode": 0,
|
||||
"tests": 679,
|
||||
"uniqueTests": 679,
|
||||
"threadStack": "ordinary Windows/Rust defaults; no RUST_MIN_STACK override",
|
||||
"testThreads": 1,
|
||||
"profileAndTemp": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\contextual-source-layout-20260911\\full-679",
|
||||
"scope": "Immutable full desktop tests only; no native or Linux acceptance"
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"copiedUtc": "2026-09-11T15:48:52.494771+00:00",
|
||||
"scope": "One authorized immutable full Windows desktop run; not new native/Linux acceptance",
|
||||
"copies": [
|
||||
{
|
||||
"path": "admission.json",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/admission.json",
|
||||
"bytes": 773,
|
||||
"sha256": "c48cca915d26fd6d259a9a8039a5bab5a7485ab310b4bf259aec62da5a68dfc3"
|
||||
},
|
||||
{
|
||||
"path": "inventory.stdout.log",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/inventory.stdout.log",
|
||||
"bytes": 72077,
|
||||
"sha256": "a478c0fb2c5a814fa9d352a3147fb5a25f16763590d5e83b700e00be68c74407"
|
||||
},
|
||||
{
|
||||
"path": "inventory.stderr.log",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/inventory.stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "full.stdout.log",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/full.stdout.log",
|
||||
"bytes": 76245,
|
||||
"sha256": "9040fa1991626fee9a54d866c0021c88a07adb76f4e9a6e4c8cdabde89deb177"
|
||||
},
|
||||
{
|
||||
"path": "full.stderr.log",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/full.stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "full-result.json",
|
||||
"source": ".local/contextual-source-layout-20260911/full-679/full-result.json",
|
||||
"bytes": 669,
|
||||
"sha256": "a87d2634fe8be05e7de387346a43056db150f1846ac54a18d02650fe81b9c80d"
|
||||
},
|
||||
{
|
||||
"path": "run-full-679.py",
|
||||
"source": ".local/contextual-source-layout-20260911/run-full-679.py",
|
||||
"bytes": 3672,
|
||||
"sha256": "dfa77a364be282f927302bbe78887bbfb789e6be3574a888c3efd59e55ba54e4"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"command": [
|
||||
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\contextual-source-layout-20260911\\tests-final\\arcadia-studio-tests.exe",
|
||||
"--test-threads=1"
|
||||
],
|
||||
"started": "2026-09-11T15:38:16.318188+00:00",
|
||||
"finished": "2026-09-11T15:47:53.099927+00:00",
|
||||
"seconds": 576.7820000000002,
|
||||
"exitCode": 0,
|
||||
"executableSha256": "75AB0E151D85473631D5A145527F3F6B9768A3CD61CE66A0603A574E09557017",
|
||||
"inputIdentityUnchanged": true,
|
||||
"summary": "test result: ok. 679 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 576.67s",
|
||||
"passed": 679,
|
||||
"failed": 0,
|
||||
"ignored": 0,
|
||||
"measured": 0,
|
||||
"filtered": 0
|
||||
}
|
||||
@@ -0,0 +1,684 @@
|
||||
|
||||
running 679 tests
|
||||
test app::architecture_authoring::tests::architecture_allocated_work_is_root_owned_and_one_exact_history_change ... ok
|
||||
test app::architecture_authoring::tests::architecture_blank_names_and_escape_never_accept_placeholder_or_rename ... ok
|
||||
test app::architecture_authoring::tests::architecture_captured_escape_does_not_cancel_other_controls_or_placement ... ok
|
||||
test app::architecture_authoring::tests::architecture_f2_routes_selected_node_to_inline_rename_and_exact_undo ... ok
|
||||
test app::architecture_authoring::tests::architecture_first_focused_input_escape_cancels_create_and_rename ... ok
|
||||
test app::architecture_authoring::tests::architecture_invalid_click_cannot_poison_inline_or_checkpoint_geometry ... ok
|
||||
test app::architecture_authoring::tests::architecture_stale_submit_keeps_create_and_rename_visible_and_exact ... ok
|
||||
test app::architecture_authoring_tests::architecture_cancelled_gesture_cannot_commit_a_later_named_draft ... ok
|
||||
test app::architecture_authoring_tests::architecture_canvas_left_click_uses_world_coordinate_once_at_zoom_and_pan ... ok
|
||||
test app::architecture_authoring_tests::architecture_checkpoint_retains_exact_name_point_and_fresh_binding_without_commands ... ok
|
||||
test app::architecture_authoring_tests::architecture_context_choices_are_small_and_system_is_singleton ... ok
|
||||
test app::architecture_authoring_tests::architecture_contextual_allocation_creates_work_relation_and_node_in_one_undo ... ok
|
||||
test app::architecture_authoring_tests::architecture_creation_names_before_commit_preserves_camera_and_undoes_once ... ok
|
||||
test app::architecture_authoring_tests::architecture_existing_inventory_is_contextual_and_placement_never_implies_allocation ... ok
|
||||
test app::architecture_authoring_tests::architecture_f2_rename_preserves_identity_placement_and_atomic_history ... ok
|
||||
test app::architecture_authoring_tests::architecture_name_survives_rejected_click_resize_navigation_and_escape_is_explicit ... ok
|
||||
test app::architecture_authoring_tests::architecture_rejected_submission_keeps_inline_name_visible_and_invalid_click_is_ignored ... ok
|
||||
test app::architecture_authoring_tests::basic_transition_explicit_overview_focus_wins_over_an_already_populated_architecture ... ok
|
||||
test app::behavior_lifecycle_tests::incomplete_behavior_form_is_dirty_close_save_retains_it_and_cancel_allows_switching ... ok
|
||||
test app::behavior_lifecycle_tests::passive_behavior_canvas_events_do_not_apply_property_drafts ... ok
|
||||
test app::behavior_lifecycle_tests::pending_behavior_blocks_navigation_property_edits_and_model_history ... ok
|
||||
test app::behavior_lifecycle_tests::pending_behavior_blocks_source_creation_and_source_history_replay ... ok
|
||||
test app::behavior_lifecycle_tests::save_prepares_behavior_before_opening_destination_and_cancel_keeps_one_undo ... ok
|
||||
test app::behavior_lifecycle_tests::source_writeback_failure_keeps_typed_behavior_form_for_repair_and_one_undo ... ok
|
||||
test app::checkpoints::tests::checkpoint_completion_releases_the_writer_while_a_context_menu_is_open ... ok
|
||||
test app::checkpoints::tests::checkpoint_inline_create_and_rename_restore_focus_without_changing_drafts_or_history ... ok
|
||||
test app::checkpoints::tests::checkpoint_noninline_contexts_keep_other_focus_and_still_lint ... ok
|
||||
test app::checkpoints::tests::discard_and_close_waits_for_the_late_checkpoint_then_retires_it ... ok
|
||||
test app::checkpoints::tests::home_resume_keeps_state_view_while_explicit_architecture_remains_reachable ... ok
|
||||
test app::checkpoints::tests::home_resume_retains_invalid_source_and_property_drafts ... ok
|
||||
test app::checkpoints::tests::home_resume_returns_to_each_actual_workspace_without_model_edits ... ok
|
||||
test app::checkpoints::tests::malformed_checkpoint_does_not_replace_the_current_model ... ok
|
||||
test app::checkpoints::tests::recent_and_recovery_navigation_respect_unsaved_decision ... ok
|
||||
test app::checkpoints::tests::restored_copy_keeps_raw_property_and_requires_save_without_local_or_hosted_binding ... ok
|
||||
test app::checkpoints::tests::saving_an_older_snapshot_keeps_recovery_for_newer_unsaved_work ... ok
|
||||
test app::checkpoints::tests::stale_write_completion_cannot_recover_a_discarded_document ... ok
|
||||
test app::checkpoints::tests::walkthrough_request_keeps_unfinished_source_behind_the_normal_pending_guard ... ok
|
||||
test app::data_paging_lifecycle_tests::paging_preserves_same_context_and_resets_on_layer_or_document_replacement ... ok
|
||||
test app::diagram_selection_tests::changing_visible_view_follows_its_clean_inspector_without_a_model_edit ... ok
|
||||
test app::diagram_selection_tests::diagram_switch_preserves_an_independent_semantic_inspection ... ok
|
||||
test app::diagram_selection_tests::diagram_uuid_edit_follows_the_same_view_or_a_different_picker_target ... ok
|
||||
test app::diagram_selection_tests::invalid_view_draft_blocks_the_switch_and_retains_raw_input ... ok
|
||||
test app::diagram_selection_tests::stale_diagram_choice_never_applies_an_unrelated_valid_draft ... ok
|
||||
test app::diagram_selection_tests::valid_pending_view_edit_applies_to_old_view_then_inspects_the_new_view ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_creation_and_reorder_preserve_selection_and_each_undo_once ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_rejects_every_stale_context_and_preserves_property_drafts ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_scroll_and_real_resize_invalidate_only_pointer_context ... ok
|
||||
test app::direct_scenario_tests::direct_scenario_source_failure_and_navigation_keep_form_until_success ... ok
|
||||
test app::hosted::tests::hosted_actual_app_tasks_publish_edit_conflict_correct_credentials_reload_and_open ... ok
|
||||
test app::hosted::tests::hosted_catalog_invalidation_follows_service_writes_and_observed_revision_changes ... ok
|
||||
test app::hosted::tests::hosted_catalog_search_credentials_and_failed_refresh_never_mix_result_scopes ... ok
|
||||
test app::hosted::tests::hosted_changed_bound_head_does_not_invalidate_another_services_empty_filter ... ok
|
||||
test app::hosted::tests::hosted_conflict_fetches_review_without_adoption_and_reload_is_undoable ... ok
|
||||
test app::hosted::tests::hosted_detached_drafts_and_recovery_remain_available_after_rejected_publish ... ok
|
||||
test app::hosted::tests::hosted_failed_cross_service_publication_checks_and_reloads_its_own_resource ... ok
|
||||
test app::hosted::tests::hosted_failed_or_cancelled_local_open_keeps_the_existing_document_and_destination ... ok
|
||||
test app::hosted::tests::hosted_invalid_and_detached_source_drafts_never_start_network_writes ... ok
|
||||
test app::hosted::tests::hosted_invalid_local_open_repair_saves_locally_and_never_replaces_old_resource ... ok
|
||||
test app::hosted::tests::hosted_modal_blocks_underlying_edits_and_credentials_are_redacted ... ok
|
||||
test app::hosted::tests::hosted_new_revision_invalidates_filtered_catalog_even_without_a_displayed_row ... ok
|
||||
test app::hosted::tests::hosted_only_successful_source_save_as_changes_the_active_destination ... ok
|
||||
test app::hosted::tests::hosted_open_waits_for_unsaved_guard_and_failed_open_preserves_current_document ... ok
|
||||
test app::hosted::tests::hosted_publish_acknowledges_only_the_sent_snapshot_and_retains_undo ... ok
|
||||
test app::hosted::tests::hosted_stale_completions_do_not_clear_current_busy_or_adopt_another_document ... ok
|
||||
test app::hosted::tests::hosted_unknown_save_is_acknowledged_by_exact_readback_without_retry ... ok
|
||||
test app::lint_tests::committed_check_cache_follows_edit_and_undo_while_drafts_stay_separate ... ok
|
||||
test app::lint_tests::lint_coalesces_work_and_rejects_obsolete_results ... ok
|
||||
test app::lint_tests::prior_document_lint_cannot_enter_reopened_model_or_block_next_checks ... ok
|
||||
test app::port_view_tests::catalog_creation_follows_the_new_port_and_keeps_group_browsing_explicit ... ok
|
||||
test app::port_view_tests::filtered_active_view_cannot_hide_a_created_port_when_eligible_owner_view_is_folded ... ok
|
||||
test app::process_canvas::direct_process_dirty_source_blocks_canvas_creation_without_losing_text ... ok
|
||||
test app::process_canvas::tests::direct_process_app_open_source_and_back_preserve_local_reference_identity ... ok
|
||||
test app::process_canvas::tests::direct_process_app_same_owner_selection_preserves_tool_but_owner_change_resets_it ... ok
|
||||
test app::process_canvas::tests::direct_process_app_save_scroll_resize_and_passive_geometry_keep_drafts_and_current_origin ... ok
|
||||
test app::process_canvas::tests::direct_process_app_source_failure_retains_form_then_commits_once_and_selects_occurrence ... ok
|
||||
test app::process_canvas::tests::direct_process_app_stale_context_dirty_source_and_properties_never_mutate ... ok
|
||||
test app::process_canvas::tests::direct_process_append_empty_first_second_exchange_has_exact_source_history ... ok
|
||||
test app::process_canvas::tests::process_focus_retains_rejected_draft_and_guards_selection_until_panels_restore ... ok
|
||||
test app::review_navigation_tests::rejected_semantic_source_writeback_retains_review_camera_and_original_navigation ... ok
|
||||
test app::review_navigation_tests::review_already_showing_the_target_keeps_its_camera_and_query ... ok
|
||||
test app::review_navigation_tests::semantic_name_take_selects_the_counterpart_view_in_both_directions_with_one_exact_history_entry ... ok
|
||||
test app::review_navigation_tests::semantic_review_without_a_destination_view_clears_the_old_layer_canvas_without_creating_a_view ... ok
|
||||
test app::save_as_tests::save_as_late_receipt_preserves_newer_raw_source_draft_and_destination ... ok
|
||||
test app::save_as_tests::save_as_preflight_rejects_historical_collision_before_starting_io ... ok
|
||||
test app::save_as_tests::save_as_receipt_then_one_undo_restores_meaning_and_saving_preserves_redo ... ok
|
||||
test app::source_project_tests::closed_detached_file_keeps_first_save_conflict_then_can_be_reloaded_fresh ... ok
|
||||
test app::source_project_tests::inactive_invalid_draft_blocks_graphical_changes_and_diagnostic_switches_files ... ok
|
||||
test app::source_project_tests::json_export_and_rejected_save_as_preserve_source_location_history_and_bytes ... ok
|
||||
test app::source_project_tests::missing_include_open_keeps_old_model_and_can_be_repaired_and_saved ... ok
|
||||
test app::source_project_tests::recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path ... ok
|
||||
test app::source_project_tests::recovery_of_previous_save_as_target_does_not_redirect_current_project ... ok
|
||||
test app::source_project_tests::recovery_open_finds_first_save_journal_without_an_entry_file ... ok
|
||||
test app::source_project_tests::recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success ... ok
|
||||
test app::source_project_tests::source3_native_open_preserves_report_comments_nesting_and_save_reopen ... ok
|
||||
test app::source_project_tests::two_file_apply_graphical_edit_exact_undo_save_as_and_reopen ... ok
|
||||
test app::state_diagram_tests::all_context_dimensions_reject_stale_selection_camera_and_model_messages ... ok
|
||||
test app::state_diagram_tests::create_view_places_only_its_machine_and_restores_exact_source_in_one_undo ... ok
|
||||
test app::state_diagram_tests::direct_create_connect_select_and_move_keep_semantic_identity_and_atomic_history ... ok
|
||||
test app::state_diagram_tests::fallback_owner_first_selection_keeps_the_captured_context_for_its_first_move ... ok
|
||||
test app::state_diagram_tests::pending_drafts_block_every_direct_mutation_and_passive_camera_preserves_inputs ... ok
|
||||
test app::state_diagram_tests::real_view_tool_and_history_changes_invalidate_old_release_events ... ok
|
||||
test app::state_diagram_tests::rejected_creation_keeps_source_and_selection_then_valid_owner_can_retry ... ok
|
||||
test app::state_diagram_tests::same_size_viewport_after_revision_or_tool_epoch_does_not_refit_the_camera ... ok
|
||||
test app::state_diagram_tests::shared_semantic_states_keep_architecture_and_behavior_placements_independent ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_constructor_and_source_open_to_the_existing_workspace_without_edits ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_picker_and_reveal_but_explicit_architecture_does_not_bounce ... ok
|
||||
test app::state_diagram_tests::state_diagram_routes_preserve_selected_raw_properties_and_pending_behavior_guards ... ok
|
||||
test app::state_diagram_tests::state_navigation_catalog_selection_across_layers_resets_camera_and_tool ... ok
|
||||
test app::state_diagram_tests::state_navigation_catalog_selection_of_another_machine_resets_camera_and_tool ... ok
|
||||
test app::state_diagram_tests::state_navigation_layer_change_resets_the_new_machine_at_the_same_viewport_size ... ok
|
||||
test app::state_diagram_tests::state_navigation_return_to_the_same_view_preserves_camera_tool_and_fit_mode ... ok
|
||||
test app::state_diagram_tests::state_navigation_root_event_and_same_layer_keep_the_current_camera_and_tool ... ok
|
||||
test app::transition_context_tests::explicit_behavior_internal_and_process_roots_keep_their_workspace_without_creating_a_view ... ok
|
||||
test app::transition_context_tests::explicit_destination_is_honored_and_ordinary_work_transition_still_places_in_architecture ... ok
|
||||
test app::transition_context_tests::machine_and_typed_action_transitions_resolve_the_owner_and_reusing_that_context_retains_camera ... ok
|
||||
test app::transition_context_tests::rejected_source_writeback_keeps_review_and_navigation_and_invalid_draft_still_blocks_start ... ok
|
||||
test app::transition_context_tests::scenario_transition_focuses_requested_counterpart_and_preserves_unrelated_views_in_both_directions ... ok
|
||||
test app::view_copy_tests::copying_architecture_keeps_architecture_even_with_a_retained_state_view ... ok
|
||||
test app::view_copy_tests::copying_the_current_state_view_uses_its_own_identity_and_is_one_source_undo ... ok
|
||||
test app::view_copy_tests::duplicate_rejection_preserves_an_incomplete_source_buffer ... ok
|
||||
test app::view_copy_tests::duplicate_rejection_preserves_invalid_property_and_pending_behavior_drafts ... ok
|
||||
test app::view_copy_tests::stale_copy_does_not_apply_an_unrelated_valid_property_draft ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_original_document_remains_bound_after_back_or_choosing_existing ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo ... ok
|
||||
test behavior::creation::app_tests::app_choosing_another_behavior_or_layer_cannot_commit_a_creation_draft ... ok
|
||||
test behavior::creation::app_tests::app_creation_opens_the_actual_new_owner_instead_of_first_or_previously_active_behavior ... ok
|
||||
test behavior::creation::app_tests::app_first_captured_escape_dismisses_file_or_pending_overlay_before_creation ... ok
|
||||
test behavior::creation::app_tests::app_lesson_request_cancel_retains_creation_then_escape_discards_only_the_draft ... ok
|
||||
test behavior::creation::app_tests::app_machine_behavior_submit_opens_its_opted_in_view_as_one_undoable_transaction ... ok
|
||||
test behavior::creation::app_tests::app_new_never_auto_applies_valid_or_invalid_property_and_source_drafts ... ok
|
||||
test behavior::creation::app_tests::app_recovered_rootless_sa_creation_retains_layer_ids_and_other_raw_drafts ... ok
|
||||
test behavior::creation::app_tests::app_stale_layer_open_never_starts_or_replaces_a_draft ... ok
|
||||
test behavior::creation::tests::all_four_viewpoints_are_explicit_and_survive_source_history_reopen ... ok
|
||||
test behavior::creation::tests::cancel_and_illegal_family_layer_switches_never_create_model_objects ... ok
|
||||
test behavior::creation::tests::corrupted_recovery_and_reserved_identity_collision_refuse_without_repairing_raw_values ... ok
|
||||
test behavior::creation::tests::creation_selection_rejects_changed_scenario_body_and_post_creation_operations ... ok
|
||||
test behavior::creation::tests::machine_requires_valid_owner_and_first_view_adds_no_region_or_state ... ok
|
||||
test behavior::creation::tests::mounted_creation_keeps_actions_visible_and_renders_only_six_owner_candidates ... ok
|
||||
test behavior::creation::tests::oa_process_and_sa_chain_keep_exact_names_root_ownership_and_one_history_entry ... ok
|
||||
test behavior::creation::tests::optional_context_collapses_without_losing_authored_reference_or_raw_search ... ok
|
||||
test behavior::creation::tests::owner_search_is_name_ordered_filtered_and_page_sized_not_a_catalog ... ok
|
||||
test behavior::creation::tests::post_commit_selection_is_correlated_with_exact_created_behavior_and_view ... ok
|
||||
test behavior::creation::tests::recovery_preserves_exact_raw_inputs_reserved_ids_and_revalidates_stale_owner ... ok
|
||||
test behavior::creation::tests::rejected_source_transaction_keeps_draft_and_every_accepted_source_byte ... ok
|
||||
test behavior::creation::tests::repeated_owner_names_remain_distinguishable_by_searchable_parent_context_and_alias ... ok
|
||||
test behavior::direct_canvas_tests::direct_alt_execution_stops_each_operand_at_its_reply_and_marks_open_operand ... ok
|
||||
test behavior::direct_canvas_tests::direct_bounds_change_during_held_drag_never_commits_old_slot ... ok
|
||||
test behavior::direct_canvas_tests::direct_clicked_occurrence_capture_cancels_on_view_and_context_changes ... ok
|
||||
test behavior::direct_canvas_tests::direct_context_escape_unfocus_and_pending_form_cancel_gestures ... ok
|
||||
test behavior::direct_canvas_tests::direct_drag_and_click_click_use_ordered_sources_and_publish_once ... ok
|
||||
test behavior::direct_canvas_tests::direct_execution_span_ends_at_its_correlated_reply_and_marks_an_open_call ... ok
|
||||
test behavior::direct_canvas_tests::direct_scroll_resize_and_bounds_changes_cancel_captured_slots ... ok
|
||||
test behavior::direct_canvas_tests::direct_scrolled_canvas_maps_raw_pointer_events_to_the_visible_slot ... ok
|
||||
test behavior::direct_canvas_tests::direct_selected_handle_reorders_and_hits_keep_semantic_identity ... ok
|
||||
test behavior::direct_canvas_tests::reused_exchange_messages_display_their_distinct_occurrence_names ... ok
|
||||
test behavior::scenario::data_contract_tests::large_payload_has_one_editor_with_reachable_field_and_authored_pages ... ok
|
||||
test behavior::scenario::data_contract_tests::recursive_browsing_up_and_root_keep_values_and_report_the_depth_limit ... ok
|
||||
test behavior::scenario::data_contract_tests::recursive_value_focus_exposes_authored_leaf_and_phase_changes_retain_surviving_keys ... ok
|
||||
test behavior::scenario::data_contract_tests::reply_call_picker_previews_the_same_value_reset_as_selecting_another_exchange ... ok
|
||||
test behavior::scenario::data_contract_tests::scenario_form_commits_two_reused_record_values_and_correlated_reply_atomically ... ok
|
||||
test behavior::scenario::direct_tests::direct_busy_save_keeps_observed_scroll_current_for_the_next_pointer_gesture ... ok
|
||||
test behavior::scenario::direct_tests::direct_clicked_occurrence_rejects_stale_slots_and_retains_recoverable_drafts ... ok
|
||||
test behavior::scenario::direct_tests::direct_clicked_occurrences_use_root_and_operand_slots_with_exact_source_history ... ok
|
||||
test behavior::scenario::direct_tests::direct_exchange_compatibility_browsing_preserves_final_slot_validation ... ok
|
||||
test behavior::scenario::direct_tests::direct_exchange_picker_is_bounded_and_browsing_keeps_pending_values ... ok
|
||||
test behavior::scenario::direct_tests::direct_five_hundred_exchange_choice_render_probe ... ok
|
||||
test behavior::scenario::direct_tests::direct_form_keeps_the_same_canvas_in_the_widget_tree ... ok
|
||||
test behavior::scenario::direct_tests::direct_middle_pair_insertion_is_one_exact_source_and_model_undo ... ok
|
||||
test behavior::scenario::direct_tests::direct_operand_pair_keeps_parent_sequence_and_cannot_reorder_across_operands ... ok
|
||||
test behavior::scenario::direct_tests::direct_reply_choices_cache_keeps_typing_fast_and_revalidates_changed_contexts ... ok
|
||||
test behavior::scenario::direct_tests::direct_reply_choices_validate_the_actual_slot_and_reorder_rejects_reverse_order ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_navigation_blocks_pending_drafts_and_stale_contexts ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_navigation_retains_each_exact_caller_without_history ... ok
|
||||
test behavior::scenario::direct_tests::direct_scenario_reference_return_survives_rename_and_rejects_deleted_or_changed_use ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_async_picker_uses_request_root_and_nested_directions_without_erasing_rejected_values ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_selects_two_parameterless_allocations_without_inventing_refinement_and_reply_derives_call ... ok
|
||||
test behavior::scenario::operation_tests::operation_gui_unresolved_and_disabled_selection_recovery_preserves_rejected_raw_values ... ok
|
||||
test behavior::scenario::tests::fragment_operands_accept_paired_messages_through_normal_destination_picker ... ok
|
||||
test behavior::scenario::tests::graphical_call_reply_is_atomic_correlated_and_source_equivalent ... ok
|
||||
test behavior::scenario::tests::invalid_lifecycle_edit_keeps_draft_and_timer_has_no_global_exchange ... ok
|
||||
test behavior::scenario::tests::lifeline_picker_uses_core_viewpoint_contract ... ok
|
||||
test behavior::scenario::tests::reverse_communication_canvas_choices_and_correlated_reply_share_core_direction ... ok
|
||||
test behavior::scenario::tests::scenario_reuse_requires_explicit_compatible_bindings ... ok
|
||||
test behavior::scenario::tests::tagged_scenario_commit_is_not_redirected_by_other_editor_events ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_allocates_remaining_height_and_pins_actions_at_minimum_and_wide_sizes ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_caller_restores_actual_mounted_canvas_and_shelf_with_camera ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_canvas_and_form_scroll_survive_disclosures_focus_width_and_resize ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_choosing_tools_preserves_valid_and_invalid_pending_editors ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_fit_reobserves_same_sized_owner_and_document_changes ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_fit_uses_measured_inner_viewport_and_rejects_nonfinite_inputs ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_open_and_back_restore_owner_and_mounted_scroll_after_preselection ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_scaled_and_scrolled_scene_keeps_clicked_slots_and_message_endpoints ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_scaled_nested_occurrences_and_reorder_keep_exact_sequence_identity ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_viewport_events_are_passive_guarded_and_do_not_apply_raw_forms ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_whole_app_canvas_tree_survives_pending_shelves_and_focus ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scenario_caller_restores_mounted_scroll_once_with_clamping_and_app_receipt ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scenario_restore_cannot_scroll_another_document_owner_or_process_view ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scroll_mounted_identity_resets_navigation_but_preserves_edits_before_first_report ... ok
|
||||
test behavior::scenario_scroll::tests::direct_scroll_observer_reports_actual_initial_clamped_and_remounted_offsets_once ... ok
|
||||
test behavior::scenario_scroll::tests::independent_process_owner_change_resets_actual_scroll_offsets ... ok
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_initial_essentials_fit_short_composed_host_with_real_paragraphs ... ok
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data ... ok
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_visible_kind_click_keeps_choice_explicit_and_name_input_works ... ok
|
||||
test behavior::state_canvas::tests::context_menu_keeps_window_anchor_and_explicit_placement_identity ... ok
|
||||
test behavior::state_canvas::tests::context_tool_and_pending_form_changes_cancel_mutating_gestures ... ok
|
||||
test behavior::state_canvas::tests::creation_uses_the_explicit_deepest_owner_and_never_a_fallback_ancestor ... ok
|
||||
test behavior::state_canvas::tests::drag_uses_ordered_release_at_each_zoom_and_moves_descendants_in_one_undo ... ok
|
||||
test behavior::state_canvas::tests::escape_and_view_switch_discard_the_armed_transition_source ... ok
|
||||
test behavior::state_canvas::tests::internal_rows_and_pseudostate_hits_use_shared_persisted_geometry ... ok
|
||||
test behavior::state_canvas::tests::ordered_stationary_click_does_not_move_on_later_motion_in_the_same_batch ... ok
|
||||
test behavior::state_canvas::tests::pan_is_button_scoped_read_only_and_hover_does_not_reproject_the_scene ... ok
|
||||
test behavior::state_canvas::tests::pseudostate_names_avoid_rightward_and_downward_routes_and_share_hit_bounds ... ok
|
||||
test behavior::state_canvas::tests::relayout_does_not_turn_a_transition_click_into_a_drag_or_pan ... ok
|
||||
test behavior::state_canvas::tests::selected_endpoint_reconnect_preserves_identity_and_requires_handle_motion ... ok
|
||||
test behavior::state_canvas::tests::selection_relayout_does_not_move_nodes_or_change_drag_distance ... ok
|
||||
test behavior::state_canvas::tests::stacked_symbol_names_avoid_each_other_and_are_independent_of_input_order ... ok
|
||||
test behavior::state_canvas::tests::transition_supports_click_click_and_drag_without_coalesced_accidental_edges ... ok
|
||||
test behavior::state_canvas::tests::typed_state_actions_are_named_selectable_rows_before_internal_transitions_and_regions ... ok
|
||||
test behavior::state_canvas::tests::viewport_uses_full_canvas_coordinates_and_republishes_for_a_new_context ... ok
|
||||
test behavior::state_edit::tests::an_empty_machine_has_an_explicit_visible_owner_for_first_region_creation ... ok
|
||||
test behavior::state_edit::tests::connect_preserves_self_loops_and_rejects_hidden_or_incompatible_vertices ... ok
|
||||
test behavior::state_edit::tests::creation_places_missing_ancestry_and_unfolds_existing_owners_atomically ... ok
|
||||
test behavior::state_edit::tests::every_context_component_and_invalid_ownership_are_checked_before_planning ... ok
|
||||
test behavior::state_edit::tests::placing_existing_content_and_moving_a_folded_group_preserve_other_views_and_semantics ... ok
|
||||
test behavior::state_edit::tests::reconnect_preserves_the_complete_record_and_replaces_cardinality_in_place ... ok
|
||||
test behavior::state_edit::tests::view_initializes_only_its_machine_in_one_source_and_model_history_entry ... ok
|
||||
test behavior::states::tests::internal_choice_targets_self_and_edit_preserves_identity_and_description ... ok
|
||||
test behavior::states::tests::invalid_pseudo_trigger_keeps_draft_and_does_not_create_orphan_event ... ok
|
||||
test behavior::states::tests::selected_composite_owns_new_region_and_history_uses_selected_region ... ok
|
||||
test behavior::states::tests::timeout_and_work_trigger_commit_together_roundtrip_and_undo ... ok
|
||||
test behavior::tests::failed_document_commit_retains_typed_transition_and_time_event_for_repair ... ok
|
||||
test behavior::tests::legacy_process_and_chain_keep_their_ordered_exchange_scene ... ok
|
||||
test behavior::tests::one_behavior_form_survives_start_edit_and_unrelated_cancel_until_commit ... ok
|
||||
test behavior::tests::recovery_preserves_distinct_qualified_value_paths_and_rejects_invalid_payload_atomically ... ok
|
||||
test behavior::tests::recovery_retains_each_incomplete_behavior_form_without_executing_it ... ok
|
||||
test behavior::tests::selecting_state_transition_keeps_its_behavior_context ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_deleted_transient_selection_does_not_seed_or_hide_retained_authored_endpoint ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_nested_preview_folds_only_the_exact_reference_instance ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_rejected_endpoint_keeps_exact_raw_intent_after_recovery ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_repeated_sources_remain_distinct_and_apply_has_exact_source_history ... ok
|
||||
test behavior::topology::contextual::tests::qualified_link_gui_scope_paging_and_search_reach_tail_beyond_512_without_losing_endpoints ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_native_x_to_first_b_keeps_visible_arrow_above_background_and_clear_of_other_references ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_nested_visible_hidden_and_parallel_paths_keep_exact_addresses_and_legacy_routes ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_shared_anchor_preserves_selected_direct_reconnect_at_fit_and_full_scale ... ok
|
||||
test behavior::topology::direct_tests::direct_process_append_preserves_existing_order_and_rejects_incompatible_exchange ... ok
|
||||
test behavior::topology::direct_tests::direct_process_controls_allow_incomplete_work_and_preserve_branch_semantics ... ok
|
||||
test behavior::topology::direct_tests::direct_process_empty_first_and_second_exchange_keep_the_same_interactive_renderer ... ok
|
||||
test behavior::topology::direct_tests::direct_process_imported_order_is_projected_without_mutation_and_first_canvas_edit_is_atomic ... ok
|
||||
test behavior::topology::direct_tests::direct_process_incompatible_imported_order_rejects_conversion_without_losing_draft ... ok
|
||||
test behavior::topology::direct_tests::direct_process_nested_source_reopen_and_api_command_use_one_transaction ... ok
|
||||
test behavior::topology::direct_tests::direct_process_oa_sa_repeated_occurrences_share_sources_and_split_one_guarded_link ... ok
|
||||
test behavior::topology::direct_tests::direct_process_palette_preserves_fit_and_manual_camera ... ok
|
||||
test behavior::topology::direct_tests::direct_process_pending_form_diff_retains_the_canvas_scroll_state ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_click_click_drag_insert_and_scroll_coordinates ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_endpoint_and_peer_reorder_handles_publish_exact_identity ... ok
|
||||
test behavior::topology::direct_tests::direct_process_production_stale_focus_scroll_bounds_and_pending_cancel ... ok
|
||||
test behavior::topology::direct_tests::direct_process_readable_default_fit_expansion_and_bounded_choices ... ok
|
||||
test behavior::topology::direct_tests::direct_process_real_picker_stays_bounded_and_search_keeps_selection ... ok
|
||||
test behavior::topology::direct_tests::direct_process_reconnect_delete_and_reorder_preserve_other_paths_and_sources ... ok
|
||||
test behavior::topology::direct_tests::direct_process_reuse_preview_is_local_expandable_and_recursive_sources_are_rejected ... ok
|
||||
test behavior::topology::direct_tests::direct_process_scaled_control_and_link_gestures_use_visible_positions ... ok
|
||||
test behavior::topology::direct_tests::direct_process_specific_parallel_link_and_incompatible_adjacency ... ok
|
||||
test behavior::topology::direct_tests::direct_process_three_ordered_exchanges_preserve_outer_paths_on_insertion ... ok
|
||||
test behavior::topology::tests::cycle_projection_terminates_and_retains_actual_links ... ok
|
||||
test behavior::topology::tests::empty_process_can_start_through_normal_authoring_events ... ok
|
||||
test behavior::topology::tests::fitting_a_branch_keeps_all_nodes_visible_and_selection_uses_scaled_coordinates ... ok
|
||||
test behavior::topology::tests::guarded_branch_is_one_transaction_with_distinct_source_identities ... ok
|
||||
test behavior::topology::tests::insertion_picker_only_offers_work_matching_adjacent_exchanges ... ok
|
||||
test behavior::topology::tests::legacy_branch_insertion_replaces_only_the_selected_implied_link ... ok
|
||||
test behavior::topology::tests::legacy_edit_preserves_order_and_new_work_in_one_undo ... ok
|
||||
test behavior::topology::tests::long_engineering_identifiers_stay_inside_label_width ... ok
|
||||
test behavior::topology::tests::process_fit_canvas_selection_ignores_retained_ordered_page_scroll ... ok
|
||||
test behavior::topology::tests::process_fit_disclosures_and_focus_preserve_rejected_raw_draft_and_accepted_source ... ok
|
||||
test behavior::topology::tests::process_fit_uses_measured_height_and_reports_minimum_without_changing_manual_zoom ... ok
|
||||
test behavior::topology::tests::reusable_preview_preserves_identity_and_filters_recursive_sources ... ok
|
||||
test behavior::topology::tests::stale_or_invalid_submit_preserves_inputs_and_creates_nothing ... ok
|
||||
test behavior::topology::tests::unlinked_contributions_do_not_gain_fictional_edges ... ok
|
||||
test behavior::topology::view::layout_tests::direct_process_pending_editor_uses_available_height_and_keeps_actions_visible ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_layout_disclosures_and_pending_editor_keep_real_manual_canvas_scroll ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_layout_measures_remaining_canvas_with_details_forms_and_window_resize ... ok
|
||||
test behavior::topology::view::layout_tests::process_fit_whole_app_focus_and_disclosures_retain_canvas_tree_with_pending_raw_form ... ok
|
||||
test connection_edit::tests::cancel_navigation_revision_and_dirty_drafts_cannot_commit_a_stale_connection ... ok
|
||||
test connection_edit::tests::visible_endpoint_drawing_commits_ports_and_exchange_once_with_exact_history ... ok
|
||||
test connection_tool::tests::boundary_candidates_match_core_orientation_and_reject_same_owner_or_mixed_kind ... ok
|
||||
test connection_tool::tests::boundary_feasibility_keeps_interface_warnings_and_final_carried_item_checks ... ok
|
||||
test connection_tool::tests::boundary_feasibility_rejects_dangling_identity_in_a_malformed_element_map ... ok
|
||||
test connection_tool::tests::direct_connections_share_exact_source_history_and_model_parity ... ok
|
||||
test connection_tool::tests::explicit_function_ports_keep_owners_contracts_and_do_not_invent_carried_items ... ok
|
||||
test connection_tool::tests::final_command_validation_rejects_invalid_models_without_mutation ... ok
|
||||
test connection_tool::tests::function_cards_use_unique_reuse_and_atomic_generation_when_ambiguous ... ok
|
||||
test connection_tool::tests::mismatched_port_owners_layers_and_contract_kinds_are_not_candidates ... ok
|
||||
test connection_tool::tests::operational_communication_uses_participants_without_creating_ports ... ok
|
||||
test connection_tool::tests::operational_interaction_targets_only_distinct_oa_activities ... ok
|
||||
test context_menu::tests::a_new_context_token_cannot_reuse_the_previous_mouse_press_or_scroll ... ok
|
||||
test context_menu::tests::actions_area_does_not_swallow_first_independent_click_after_overlay_consumed_its_release ... ok
|
||||
test context_menu::tests::anchors_outside_the_window_and_nonfinite_input_stay_bounded ... ok
|
||||
test context_menu::tests::clicking_disabled_or_dragging_off_an_action_never_executes_it ... ok
|
||||
test context_menu::tests::coalesced_dismissal_release_does_not_swallow_the_next_independent_click ... ok
|
||||
test context_menu::tests::empty_and_disabled_only_menus_still_capture_keys_and_escape_closes ... ok
|
||||
test context_menu::tests::keyboard_skips_headers_separators_and_disabled_actions_and_invokes_once ... ok
|
||||
test context_menu::tests::outside_dismissal_consumes_press_and_release_across_controlled_close ... ok
|
||||
test context_menu::tests::reconstructed_overlay_uses_retained_layout_for_rows_and_hit_testing ... ok
|
||||
test context_menu::tests::retained_overlay_layout_keeps_measured_width_and_scrollbar_after_reconstruction ... ok
|
||||
test context_menu::tests::tall_menu_clamps_to_viewport_and_keyboard_wheel_and_scrollbar_reach_the_end ... ok
|
||||
test data_values::tests::phase_choices_keep_reused_record_addresses_distinct ... ok
|
||||
test data_values::tests::recursive_picker_starts_with_distinct_leaf_names_and_sorts_them ... ok
|
||||
test data_values::tests::recursive_records_can_be_drilled_into_and_valid_imported_paths_resolve ... ok
|
||||
test data_values::tests::reference_parameter_stops_descent_and_unspecified_direction_remains_visible ... ok
|
||||
test data_values::tests::roots_and_one_hop_children_do_not_expand_unrelated_payload_branches ... ok
|
||||
test data_view::tests::allocation_rows_edit_relationship_identity_and_remove_only_that_allocation ... ok
|
||||
test data_view::tests::association_creation_is_a_separate_relation_with_editable_end_contracts ... ok
|
||||
test data_view::tests::browsing_pages_preserves_invalid_numeric_draft_and_inherited_allocation_identity ... ok
|
||||
test data_view::tests::contextual_data_actions_use_typed_defaults_and_one_undo ... ok
|
||||
test data_view::tests::large_inherited_dictionary_has_bounded_widgets_and_every_original_field_is_reachable ... ok
|
||||
test diagram::lifecycle_tests::menu_reset_and_draw_use_fresh_open_context ... ok
|
||||
test diagram::lifecycle_tests::middle_and_arrow_panning_preserve_source_and_history ... ok
|
||||
test diagram::lifecycle_tests::motion_after_release_must_not_move_clicked_port ... ok
|
||||
test diagram::lifecycle_tests::motion_after_source_click_release_must_not_create_connection ... ok
|
||||
test diagram::pointer_tests::coalesced_fe_ports_commit_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::coalesced_port_drag_commits_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::drag_from_already_selected_stationary_port_keeps_source_between_batches ... ok
|
||||
test diagram::pointer_tests::menu_captured_motion_must_not_turn_following_click_into_old_port_drag ... ok
|
||||
test diagram::pointer_tests::modal_and_stale_epoch_block_queued_connection_and_port_commits ... ok
|
||||
test diagram::port_hit_tests::coincident_ports_keep_selection_then_use_stable_identity ... ok
|
||||
test diagram::port_hit_tests::nearest_port_center_wins_on_all_borders_and_zoom_levels ... ok
|
||||
test diagram::port_hit_tests::nested_owner_palette_selection_drag_and_context_menu_pick_the_same_port ... ok
|
||||
test diagram::port_labels::tests::leaving_and_reentering_keeps_suppression_until_each_held_button_releases ... ok
|
||||
test diagram::port_labels::tests::menu_epoch_clears_suppression_when_the_overlay_consumes_release ... ok
|
||||
test diagram::port_labels::tests::outside_presses_do_not_suppress_and_cancel_or_focus_loss_clear_held_buttons ... ok
|
||||
test diagram::port_labels::tests::passive_layer_leaves_port_drag_selection_and_commit_with_the_interactive_canvas ... ok
|
||||
test diagram::tests::association_end_contracts_share_svg_geometry_and_select_without_moving_name_label ... ok
|
||||
test diagram::tests::bend_gestures_use_screen_hit_radius_and_commit_one_undo_at_three_zooms ... ok
|
||||
test diagram::tests::coincident_line_hit_retains_the_selected_connection ... ok
|
||||
test diagram::tests::connection_gestures_pick_real_ports_and_commit_coalesced_drag_at_every_zoom ... ok
|
||||
test diagram::tests::detached_label_selects_connection_and_occluding_card_owns_its_hit ... ok
|
||||
test diagram::tests::dragging_a_child_previews_the_same_enclosure_and_ports_as_commit ... ok
|
||||
test diagram::tests::fast_drags_commit_the_release_cursor_without_a_final_motion_event ... ok
|
||||
test diagram::tests::implicit_port_click_selects_semantics_and_drag_preview_svg_share_anchors ... ok
|
||||
test diagram::tests::route_cache_ignores_pan_zoom_and_cancelled_drag_cannot_commit ... ok
|
||||
test diagram::tests::routed_svg_has_same_polyline_label_and_bounds_as_canvas_scene ... ok
|
||||
test diagram::tests::svg_distinguishes_inferred_work_allocation_from_direct_allocation ... ok
|
||||
test diagram::tests::svg_preserves_visible_exchange_labels_and_capability_stereotypes ... ok
|
||||
test diagram::tests::typed_function_glyphs_and_unoriented_standard_connections_have_distinct_svg ... ok
|
||||
test diagram::view_options_tests::communication_svg_uses_saved_visibility_labels_and_direction ... ok
|
||||
test document::save_as_tests::save_as_preserves_explicit_source_entry_changes_in_history ... ok
|
||||
test document::save_as_tests::save_as_rebases_uniform_history_without_an_undo_step_or_lost_redo ... ok
|
||||
test document::save_as_tests::save_as_rejects_included_filename_collisions_in_past_and_future_without_mutation ... ok
|
||||
test document::save_as_tests::save_as_rejects_stale_or_content_changing_receipt_atomically ... ok
|
||||
test document::tests::accepted_history_keeps_the_latest_hundred_complete_snapshots ... ok
|
||||
test document::tests::altered_compiled_model_or_index_is_rejected_without_mutation ... ok
|
||||
test document::tests::asynchronous_save_marks_its_snapshot_without_cleaning_later_edits ... ok
|
||||
test document::tests::byte_budget_trims_oldest_history_without_discarding_a_large_current ... ok
|
||||
test document::tests::cached_view_index_tracks_accepted_creation_undo_and_redo ... ok
|
||||
test document::tests::comment_and_semantic_history_restore_exact_bytes_and_branch_together ... ok
|
||||
test document::tests::creation_selects_the_single_uuid_persisted_in_source ... ok
|
||||
test document::tests::invalid_project_is_rejected_before_format_can_normalize_it ... ok
|
||||
test document::tests::nested_cross_file_reparent_and_source_edit_share_exact_history ... ok
|
||||
test document::tests::no_op_command_or_source_apply_preserves_history_revision_and_redo ... ok
|
||||
test document::tests::omitted_id_stabilization_remains_dirty_until_exact_source_is_saved ... ok
|
||||
test document::tests::recreated_equal_record_does_not_inherit_deleted_source_ownership ... ok
|
||||
test document::tests::rejected_compile_command_and_writeback_preserve_state_and_redo ... ok
|
||||
test explorer::tests::collapse_and_search_retain_context_without_changing_collapse_state ... ok
|
||||
test explorer::tests::deep_containment_and_search_keep_the_full_path_without_recursion ... ok
|
||||
test explorer::tests::equal_names_have_stable_alias_and_identity_tie_breakers ... ok
|
||||
test explorer::tests::perspective_isolation_and_allocations_do_not_change_containment ... ok
|
||||
test explorer::tests::prefix_names_cannot_separate_a_parent_from_its_children ... ok
|
||||
test forms::data_fields::tests::defaults_distinguish_absent_empty_and_typed_literals_with_escaped_unicode ... ok
|
||||
test forms::data_fields::tests::field_browser_pages_every_direct_field_without_flattening_other_records ... ok
|
||||
test forms::data_fields::tests::independent_review_combined_take_type_informs_actual_default_form_in_both_directions ... ok
|
||||
test forms::data_fields::tests::numeric_bound_drafts_keep_partial_and_full_precision_values_out_of_accepted_state ... ok
|
||||
test forms::data_fields::tests::selecting_qualified_path_preserves_expression_typed_before_the_next_render ... ok
|
||||
test forms::data_fields::tests::semantic_reference_choices_follow_selected_mechanism_and_revert_on_keep ... ok
|
||||
test forms::data_fields::tests::supertype_picker_excludes_descendants_and_keeps_original_inherited_field_identity ... ok
|
||||
test forms::history_fields::tests::history_absent_baseline_and_empty_history_use_explicit_facts_and_exact_document_history ... ok
|
||||
test forms::history_fields::tests::history_clear_discards_inactive_invalid_constructors_before_reusing_the_same_row ... ok
|
||||
test forms::history_fields::tests::history_compound_value_and_constructor_variants_are_editable_without_live_context ... ok
|
||||
test forms::history_fields::tests::history_deleted_keys_and_observation_uuids_remain_exact_and_duplicate_history_rejects ... ok
|
||||
test forms::history_fields::tests::history_every_descriptor_fact_choice_matches_actual_closed_types_and_source_contract ... ok
|
||||
test forms::history_fields::tests::history_exact_strings_do_not_confuse_uuid_shaped_prose_or_literal_keys_with_references ... ok
|
||||
test forms::history_fields::tests::history_invalid_numbers_survive_constructor_switch_reorder_removal_and_recovery ... ok
|
||||
test forms::history_fields::tests::history_missing_semantic_field_can_be_added_and_removed_without_touching_prose_or_live_objects ... ok
|
||||
test forms::history_fields::tests::history_nested_optional_number_events_switch_absent_present_and_recover_invalid_raw ... ok
|
||||
test forms::history_fields::tests::history_nested_uuid_and_list_events_preserve_present_values_and_tagged_item_branches ... ok
|
||||
test forms::history_fields::tests::history_optional_uuid_and_text_seed_absence_without_inventing_observations ... ok
|
||||
test forms::history_fields::tests::history_primitive_type_choices_remain_visible_inside_the_tagged_union ... ok
|
||||
test forms::history_fields::tests::history_retained_text_constructors_follow_exact_mode_without_changing_the_observation ... ok
|
||||
test forms::port_fields::tests::all_demo_records_roundtrip_through_graphical_and_escaped_string_drafts ... ok
|
||||
test forms::port_fields::tests::boundary_choices_honor_draft_direction_same_kind_and_direct_interface_items ... ok
|
||||
test forms::port_fields::tests::contract_choices_follow_owner_and_never_offer_legacy_or_oa_typed_ports ... ok
|
||||
test forms::port_fields::tests::failed_shape_keeps_incomplete_text_and_saved_contract_payloads ... ok
|
||||
test forms::port_fields::tests::functional_endpoints_require_owner_direction_and_items_but_retain_bad_current_choice ... ok
|
||||
test forms::port_fields::tests::interface_roles_offer_participants_and_component_ports_independent_of_orientation ... ok
|
||||
test forms::port_fields::tests::port_allocation_choices_use_actual_owner_direction_and_ignore_edited_relation ... ok
|
||||
test forms::port_fields::tests::standard_switch_retains_incompatible_orientation_until_explicit_repair ... ok
|
||||
test forms::port_fields::tests::switching_function_direction_preserves_invalid_items_and_each_authored_payload ... ok
|
||||
test forms::tests::data_and_port_choices_are_typed_but_retain_invalid_current_values ... ok
|
||||
test forms::tests::editing_allocation_offers_other_performers_without_counting_itself_twice ... ok
|
||||
test forms::tests::moving_placement_and_changing_identity_is_one_lossless_undoable_edit ... ok
|
||||
test forms::tests::parent_choices_reject_cycles_without_removing_clear_or_current_choice ... ok
|
||||
test forms::tests::reply_and_reuse_forms_offer_semantically_compatible_references ... ok
|
||||
test forms::tests::scenario_choices_respect_owner_and_exchange_layer ... ok
|
||||
test forms::tests::semantic_port_group_choices_use_combined_owner_and_retain_invalid_transferred_items ... ok
|
||||
test forms::tests::shared_perspective_change_keeps_payload_and_rejects_incompatible_dependencies ... ok
|
||||
test forms::tests::state_observation_picker_keeps_work_lifelines_allocated_to_machine_owner ... ok
|
||||
test forms::tests::state_placement_form_uses_draft_destination_membership_without_changing_other_views ... ok
|
||||
test forms::tests::state_projection_form_keeps_string_variants_and_requires_a_typed_context ... ok
|
||||
test forms::view_fields::tests::category_family_change_retains_members_until_explicit_correction ... ok
|
||||
test forms::view_fields::tests::selective_view_property_apply_recovery_and_undo_preserve_semantics_and_empty_choices ... ok
|
||||
test guide::tests::filtering_and_related_navigation_keep_selection_visible ... ok
|
||||
test guide::tests::guide_topic_navigation_resets_only_article_and_same_topic_search_keeps_scroll ... ok
|
||||
test guide::tests::search_finds_concepts_in_walkthroughs_and_api_reference ... ok
|
||||
test home::tests::corrupt_future_and_oversized_history_are_preserved_with_usable_session_history ... ok
|
||||
test home::tests::failed_metadata_replace_keeps_previous_history_and_reports_memory_only_entry ... ok
|
||||
test home::tests::first_and_replaced_metadata_are_parseable_and_contain_no_model_bytes ... ok
|
||||
test home::tests::forgotten_and_missing_files_never_change_the_model_or_other_entries ... ok
|
||||
test home::tests::loading_missing_history_does_not_create_files_or_directories ... ok
|
||||
test home::tests::malformed_entries_and_unknown_fields_never_become_open_requests ... ok
|
||||
test home::tests::successful_local_history_is_bounded_ordered_deduplicated_and_durable ... ok
|
||||
test home::tests::unavailable_location_can_reappear_on_refresh_without_losing_identity ... ok
|
||||
test home::tests::walkthrough_uses_packaged_bundle_before_development_and_reports_missing_assets ... ok
|
||||
test hosted::client::tests::hosted_endpoint_validation_redacts_secrets_and_preserves_proxy_paths ... ok
|
||||
test hosted::client::tests::hosted_lost_publication_response_is_uncertain_without_retry ... ok
|
||||
test hosted::client::tests::hosted_open_rejects_incoherent_envelopes_missing_etags_and_unstable_ids ... ok
|
||||
test hosted::client::tests::hosted_oversized_local_bundle_is_rejected_before_network_admission ... ok
|
||||
test hosted::client::tests::hosted_production_auth_proxy_prefix_and_located_rejection ... ok
|
||||
test hosted::client::tests::hosted_production_roundtrip_preserves_comments_noops_and_conflicts ... ok
|
||||
test hosted::client::tests::hosted_publication_race_keeps_receipt_identity_for_review ... ok
|
||||
test hosted::client::tests::hosted_publication_retains_known_resource_after_failed_followup ... ok
|
||||
test hosted::client::tests::hosted_put_preserves_an_opaque_etag_and_compiles_the_accepted_bundle ... ok
|
||||
test hosted::client::tests::hosted_redirect_is_not_followed_or_retried_and_problem_tokens_are_redacted ... ok
|
||||
test hosted::client::tests::hosted_response_limits_cover_declared_and_chunked_bodies ... ok
|
||||
test hosted::client::tests::hosted_structured_mutation_failures_distinguish_precommit_rejections ... ok
|
||||
test hosted::client::tests::hosted_timeout_and_disconnect_leave_mutation_outcomes_explicit ... ok
|
||||
test model_menu::tests::add_bend_here_uses_context_point_and_one_source_aware_history_change ... ok
|
||||
test model_menu::tests::late_menu_actions_do_not_dismiss_new_menu_or_cross_view_context ... ok
|
||||
test model_menu::tests::menu_preserves_pending_properties_and_rejects_delayed_mutations ... ok
|
||||
test model_menu::tests::pending_source_allows_file_navigation_but_disables_model_actions ... ok
|
||||
test model_menu::tests::right_click_targets_actor_without_changing_selection_until_action ... ok
|
||||
test model_menu::tests::show_from_explorer_places_unfolds_and_keeps_semantic_selection ... ok
|
||||
test model_menu::tests::state_menu_folds_and_hides_only_its_captured_placement_and_rejects_stale_views ... ok
|
||||
test model_menu::tests::state_menu_keeps_typed_creation_reachable_and_preserves_pending_properties ... ok
|
||||
test navigation::tests::semantic_browser_finds_behavior_users_without_confusing_containment ... ok
|
||||
test port_edit::tests::all_border_drags_commit_exact_preview_and_restore_automatic_anchors_in_history ... ok
|
||||
test port_edit::tests::graphical_port_reparent_clears_old_anchors_in_the_same_history_operation ... ok
|
||||
test port_preview::tests::functional_creation_identifies_new_and_reused_endpoints_and_owners ... ok
|
||||
test port_preview::tests::legacy_split_discloses_endpoint_routing_item_origins_and_retained_evidence ... ok
|
||||
test port_preview::tests::reused_boundary_shows_item_union_and_existing_allocating_facts ... ok
|
||||
test port_preview::tests::synchronization_preview_exposes_contract_shrinkage_and_current_declaration_origin ... ok
|
||||
test port_workflow::recovery_tests::port_recovery_retains_authored_contract_and_identity_but_rebuilds_preview ... ok
|
||||
test port_workflow::tests::creating_typed_port_and_rejecting_stale_preview_preserve_drafts_and_identity ... ok
|
||||
test port_workflow::tests::graphical_function_exchange_and_component_generation_commit_and_undo_whole_contracts ... ok
|
||||
test port_workflow::tests::legacy_resolution_preserves_original_record_and_applies_as_one_undo ... ok
|
||||
test port_workflow::tests::port_creation_keeps_owner_diagram_and_unfolds_in_the_same_undo ... ok
|
||||
test port_workflow::tests::synchronization_uses_active_contract_instead_of_preserved_direction ... ok
|
||||
test recovery::source5::tests::source5_fingerprint_preserves_historical_field_order_and_diagram_shape ... ok
|
||||
test recovery::source5_tests::source4_checkpoint_remains_explicitly_unsupported_without_touching_disk ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_does_not_refresh_unrelated_clean_buffer_baseline ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_missing_identity_is_not_a_lossless_upgrade ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_old_diagram_property_shape_remains_editable ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_port_draft_replans_and_rejects_stale_base ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_preserves_dirty_invalid_text_and_baseline_exactly ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_preserves_distinct_unapplied_open_workspace ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_property_preserves_invalid_raw_input ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_upgrade_never_rewrites_checkpoint_or_origin ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_upgrades_only_header_and_clean_editor_baseline ... ok
|
||||
test recovery::source5_tests::source5_checkpoint_workflow_rebinds_only_the_proven_old_revision ... ok
|
||||
test recovery::source7_tests::source7_current_combined_contextual_and_operation_drafts_survive_without_execution ... ok
|
||||
test recovery::source7_tests::source7_explicit_new_fields_cannot_enter_frozen_old_model_profiles ... ok
|
||||
test recovery::source7_tests::source7_legacy_inactive_constructor_path_is_structural_but_raw_prose_is_not ... ok
|
||||
test recovery::source7_tests::source7_legacy_profile_workflow_and_semantic_drafts_replan_with_exact_base ... ok
|
||||
test recovery::source7_tests::source7_legacy_profiles_preserve_dirty_source_property_and_behavior_raw_fields ... ok
|
||||
test recovery::source7_tests::source7_legacy_structural_intent_rejects_even_null_but_never_scans_raw_strings ... ok
|
||||
test recovery::source7_tests::source7_legacy_view_selector_refuses_new_relation_kind_without_rewriting_checkpoint ... ok
|
||||
test recovery::source7_tests::source7_recovers_nonempty_frozen_5_and_6_profiles_with_exact_historical_binding ... ok
|
||||
test recovery::tests::altered_accepted_identity_and_unrecognized_raw_property_fields_reject ... ok
|
||||
test recovery::tests::exact_source_and_unfinished_invalid_buffers_restore_without_model_overwrite ... ok
|
||||
test recovery::tests::excess_retained_buffers_cannot_replace_the_last_recoverable_checkpoint ... ok
|
||||
test recovery::tests::invalid_open_retains_distinct_accepted_model_and_repair_workspace ... ok
|
||||
test recovery::tests::missing_includes_remain_reachable_repair_targets_without_fabricated_buffers ... ok
|
||||
test recovery::tests::multiple_sessions_replace_only_their_own_checkpoint_and_corruption_is_retained ... ok
|
||||
test recovery::tests::raw_invalid_property_number_survives_and_stays_rejected_until_repaired ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_draft_cannot_target_an_unreserved_or_non_artifact_identity ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_raw_variants_duplicate_addresses_and_unknown_fields_are_refused ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_reservations_cannot_duplicate_or_claim_an_existing_identity_or_another_owner ... ok
|
||||
test semantic_review::artifacts_recovery_falsifier_tests::legitimate_invalid_artifact_checkpoint_round_trips_and_prepares_only_after_explicit_repair ... ok
|
||||
test semantic_review::artifacts_tests::artifact_candidate_is_a_complete_record_not_a_tombstone_or_unattached_creation_shortcut ... ok
|
||||
test semantic_review::artifacts_tests::artifact_creation_and_identified_source_deletion_follow_core_metadata_and_history_boundary_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_gui_reserves_recovers_and_creates_only_after_all_seven_metadata_reviews_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_metadata_apply_and_exact_history_reset_are_one_source_preserving_undo_redo ... ok
|
||||
test semantic_review::artifacts_tests::artifact_move_metadata_none_empty_and_invalid_raw_recovery_are_independent_both_directions ... ok
|
||||
test semantic_review::artifacts_tests::artifact_moved_source_absence_deletes_but_destination_only_take_retains_both_directions ... ok
|
||||
test semantic_review::attachments::tests::absent_attachment_payloads_migrate_v1_and_v2_and_source5_upgrade_requires_exact_legacy_base ... ok
|
||||
test semantic_review::attachments::tests::addressed_attachment_candidates_equal_direct_core_oracle_both_directions ... ok
|
||||
test semantic_review::attachments::tests::attachment_apply_is_one_exact_source_and_history_undo_redo ... ok
|
||||
test semantic_review::attachments::tests::attachment_candidate_and_direct_record_keep_conflict_on_actual_slot_without_losing_drafts ... ok
|
||||
test semantic_review::attachments::tests::attachment_pair_drafts_survive_family_switch_and_restore_without_mutating_model ... ok
|
||||
test semantic_review::attachments::tests::functional_incident_source_requires_explicit_matching_port_review_in_one_atomic_candidate ... ok
|
||||
test semantic_review::attachments::tests::parent_and_each_endpoint_candidate_preserve_other_fields_and_match_core_both_directions ... ok
|
||||
test semantic_review::attachments::tests::raw_rejected_attachment_reference_survives_recovery_and_wrong_scope_is_rejected ... ok
|
||||
test semantic_review::attachments::tests::source_only_absence_and_explicit_absent_endpoint_are_different ... ok
|
||||
test semantic_review::attachments::tests::two_incident_endpoint_candidates_form_one_complete_record_and_recover_invalid_excluded_draft ... ok
|
||||
test semantic_review::batch_tests::batch_apply_is_one_exact_source_and_history_undo_redo_roundtrip ... ok
|
||||
test semantic_review::batch_tests::batch_candidate_conflict_keeps_both_raw_values_and_keep_is_a_real_constraint ... ok
|
||||
test semantic_review::batch_tests::batch_complete_constructor_cannot_erase_another_rows_new_literal ... ok
|
||||
test semantic_review::batch_tests::batch_constructor_retirement_conflicts_with_another_rows_kept_bound_in_both_orders ... ok
|
||||
test semantic_review::batch_tests::batch_delayed_text_targets_its_original_row_and_facet_without_switching_focus ... ok
|
||||
test semantic_review::batch_tests::batch_excluded_invalid_row_survives_focus_reopen_and_v2_recovery ... ok
|
||||
test semantic_review::batch_tests::batch_first_equal_constructor_acknowledgement_allows_an_independent_bound ... ok
|
||||
test semantic_review::batch_tests::batch_joint_bounds_use_one_candidate_and_match_an_independent_atomic_core_oracle ... ok
|
||||
test semantic_review::batch_tests::batch_reverse_distinct_targets_work_and_reverse_convergence_is_explicit ... ok
|
||||
test semantic_review::batch_tests::batch_v2_rejects_duplicate_included_sources_bad_addresses_and_stale_model ... ok
|
||||
test semantic_review::batch_tests::category_family_and_members_are_independent_core_checked_facets_both_directions ... ok
|
||||
test semantic_review::batch_tests::recovered_trace_picker_names_existing_trace_instead_of_deleted_reference ... ok
|
||||
test semantic_review::batch_tests::rejected_direction_switch_at_row_limit_preserves_every_recoverable_draft ... ok
|
||||
test semantic_review::compose::diagnostic_tests::distinct_review_conflict_keeps_trace_aliases_even_when_names_are_equal ... ok
|
||||
test semantic_review::compose::diagnostic_tests::reserved_creation_conflict_uses_its_rows_seed_instead_of_a_deleted_reference ... ok
|
||||
test semantic_review::compose::diagnostic_tests::same_review_presence_and_owner_conflict_names_both_facets_and_owners_and_retains_drafts ... ok
|
||||
test semantic_review::compose::diagnostic_tests::typed_owner_display_does_not_reinterpret_uuid_shaped_artifact_text ... ok
|
||||
test semantic_review::constructor_tests::closed_data_and_event_take_composition_matches_core_across_every_kind_pair_and_direction ... ok
|
||||
test semantic_review::constructor_tests::data_group_candidates_cover_every_definition_and_companion_default_both_directions ... ok
|
||||
test semantic_review::constructor_tests::data_group_retains_invalid_sibling_drafts_companion_default_and_variant_editor_buffers ... ok
|
||||
test semantic_review::constructor_tests::exchange_constructor_takes_qualified_annotation_addresses_without_remapping_expression_text ... ok
|
||||
test semantic_review::constructor_tests::existing_fragment_and_branch_group_candidates_edit_complete_owned_order_without_deletion ... ok
|
||||
test semantic_review::constructor_tests::group_take_reference_payload_and_scalar_candidate_match_core_and_one_document_batch ... ok
|
||||
test semantic_review::constructor_tests::historical_event_keep_retires_only_obsolete_branch_and_unchanged_kind_acknowledges_no_payload ... ok
|
||||
test semantic_review::constructor_tests::historical_same_kind_take_preserves_target_only_literals_when_composed_with_candidate ... ok
|
||||
test semantic_review::constructor_tests::occurrence_and_event_candidate_variants_cover_closed_families_without_touching_headers ... ok
|
||||
test semantic_review::constructor_tests::outer_and_nested_constructor_candidates_require_explicit_resolution_and_retain_both_drafts ... ok
|
||||
test semantic_review::constructor_tests::port_group_companions_typed_owner_context_and_direction_restrictions_are_explicit ... ok
|
||||
test semantic_review::constructor_tests::reverse_existing_typed_port_reviews_keep_or_candidate_legacy_without_permitting_typed_oa_write ... ok
|
||||
test semantic_review::constructor_tests::scenario_use_group_takes_typed_binding_references_and_preserves_source_text_both_directions ... ok
|
||||
test semantic_review::keyed_rows_tests::annotation_address_browser_descends_qualified_fields_without_changing_rows ... ok
|
||||
test semantic_review::keyed_rows_tests::annotation_observations_keep_uuid_shaped_expression_text_in_both_sides_and_history ... ok
|
||||
test semantic_review::keyed_rows_tests::batch_keyed_rows_compare_exact_target_slots_and_retain_independent_values ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_choices_separate_reused_keys_from_local_lifelines ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_local_picker_follows_a_candidate_parent_before_the_review_is_valid ... ok
|
||||
test semantic_review::keyed_rows_tests::binding_take_requires_local_correspondence_and_candidate_rejects_wrong_scenario ... ok
|
||||
test semantic_review::keyed_rows_tests::independent_rows_keep_take_candidate_match_core_and_preserve_siblings_both_directions ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_recovery_retains_raw_rows_and_staged_pairs_both_directions_without_applying ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_row_drafts_retain_expression_local_and_presence_across_decisions_and_staging ... ok
|
||||
test semantic_review::keyed_rows_tests::keyed_rows_distinguish_unpaired_source_from_explicit_absence_and_require_exact_reset ... ok
|
||||
test semantic_review::keyed_rows_tests::multiple_new_rows_compose_in_empty_collections_using_destination_key_order ... ok
|
||||
test semantic_review::keyed_rows_tests::row_review_apply_preserves_exact_source_and_semantic_history_through_undo_redo ... ok
|
||||
test semantic_review::keyed_tests::deleted_member_source_observation_removes_only_mapped_membership_both_directions ... ok
|
||||
test semantic_review::keyed_tests::exact_literal_new_rows_and_removals_commit_both_directions_without_default_loss ... ok
|
||||
test semantic_review::keyed_tests::exact_reset_only_is_one_history_source_transaction_and_undo_redo_both_directions ... ok
|
||||
test semantic_review::keyed_tests::function_port_members_use_existing_typed_choices_and_preserve_oa_legacy ... ok
|
||||
test semantic_review::keyed_tests::historical_one_sided_pair_migration_requires_exact_reset_and_explicit_overlap_resolution ... ok
|
||||
test semantic_review::keyed_tests::invalid_literal_removal_and_unselected_scalar_buffers_are_retained_and_repairable ... ok
|
||||
test semantic_review::keyed_tests::member_identity_labels_and_new_tabs_preserve_exact_names_and_deleted_keys ... ok
|
||||
test semantic_review::keyed_tests::reset_precedes_equal_constructor_candidate_and_preserves_independent_literal_draft ... ok
|
||||
test semantic_review::keyed_tests::staging_removal_and_obsolete_reset_recovery_keep_other_decisions_and_raw_presence ... ok
|
||||
test semantic_review::keyed_tests::stale_or_source_failed_reset_and_membership_apply_retain_exact_choices ... ok
|
||||
test semantic_review::keyed_tests::unordered_members_keep_take_candidate_preserve_other_rows_both_directions ... ok
|
||||
test semantic_review::keyed_tests::unsupported_independent_families_and_missing_identities_do_not_gain_edit_authority ... ok
|
||||
test semantic_review::message_kind_tests::message_group_candidate_closed_kinds_are_core_validated_in_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_candidate_timer_switches_preserve_both_drafts_and_overlap_is_explicit ... ok
|
||||
test semantic_review::message_kind_tests::message_group_initial_equal_take_acknowledges_only_kind_and_checks_authored_timer_agreement ... ok
|
||||
test semantic_review::message_kind_tests::message_group_keep_historical_switch_retires_timer_and_completed_no_switch_rejects ... ok
|
||||
test semantic_review::message_kind_tests::message_group_rejects_protected_edits_stale_plan_and_source_failure_without_losing_timer ... ok
|
||||
test semantic_review::message_kind_tests::message_group_reply_and_reference_take_require_explicit_call_mapping_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_take_full_timer_and_scalar_candidate_are_one_source_history_change_both_directions ... ok
|
||||
test semantic_review::message_kind_tests::message_group_timer_does_not_erase_exchange_without_its_own_selected_decision ... ok
|
||||
test semantic_review::ordered_tests::ambiguous_order_preserves_local_member_and_requires_explicit_candidate_positions ... ok
|
||||
test semantic_review::ordered_tests::historical_pair_restore_uses_exact_member_keys_and_never_zips_order_observations ... ok
|
||||
test semantic_review::ordered_tests::order_take_preserves_destination_only_positions_and_order_alone_cannot_add_members ... ok
|
||||
test semantic_review::ordered_tests::ordered_membership_choices_stage_exact_pairs_in_all_owner_shapes ... ok
|
||||
test semantic_review::ordered_tests::ordered_presence_keep_take_candidate_remove_only_selected_entry_and_order_take_reorders_only ... ok
|
||||
test semantic_review::ordered_tests::ordered_review_apply_is_exact_source_history_transaction_with_reopen_and_undo_redo ... ok
|
||||
test semantic_review::ordered_tests::ordered_take_uses_unique_anchors_and_matches_core_with_unrelated_candidate_both_directions ... ok
|
||||
test semantic_review::ordered_tests::raw_order_survives_membership_changes_decisions_and_recovery_until_explicit_reconcile ... ok
|
||||
test semantic_review::ordered_tests::several_incoming_members_follow_source_order_despite_independent_identity_sorting ... ok
|
||||
test semantic_review::recovery::tests::raw_scalar_and_closed_constructor_drafts_recover_against_exact_model_only ... ok
|
||||
test semantic_review::recovery::tests::version_one_without_orders_restores_raw_intent_and_replans_without_execution ... ok
|
||||
test semantic_review::source7_tests::contextual_incident_leaf_keep_allows_path_change_but_conflicts_with_changed_leaf_both_directions ... ok
|
||||
test semantic_review::source7_tests::reverse_operation_omission_gui_requires_raw_rationale_and_matches_one_core_batch_after_recovery ... ok
|
||||
test semantic_review::source7_tests::semantic_operation_virtual_none_candidate_uses_exact_allocation_and_preserves_accepted_bytes ... ok
|
||||
test semantic_review::tests::candidate_mixed_with_reference_take_uses_typed_correspondence_not_text_guessing ... ok
|
||||
test semantic_review::tests::deselected_invalid_candidate_is_retained_but_does_not_poison_another_selected_scalar ... ok
|
||||
test semantic_review::tests::explicit_trace_selection_updates_only_that_history ... ok
|
||||
test semantic_review::tests::first_equal_constructor_acknowledges_only_kind_and_allows_independent_leaves ... ok
|
||||
test semantic_review::tests::independent_review_clear_bound_ignores_retained_invalid_other_facet ... ok
|
||||
test semantic_review::tests::independent_review_keyed_fact_titles_keep_live_deleted_and_qualified_identity ... ok
|
||||
test semantic_review::tests::inherited_annotation_impact_requires_exact_acceptance_and_edits_clear_approval ... ok
|
||||
test semantic_review::tests::invalid_numeric_draft_and_protected_edits_retain_workflow_and_source ... ok
|
||||
test semantic_review::tests::read_only_structured_facts_and_partial_rollup_are_honest ... ok
|
||||
test semantic_review::tests::relation_candidates_preserve_endpoints_and_combine_selected_roles_and_bounds ... ok
|
||||
test semantic_review::tests::scalar_keep_take_candidate_commit_exact_source_and_history_in_both_directions ... ok
|
||||
test semantic_review::tests::scoped_literal_list_edits_preserve_unfinished_values_and_other_facet_buffers ... ok
|
||||
test semantic_review::tests::stale_plan_and_source_writeback_failure_do_not_lose_decisions_or_history ... ok
|
||||
test semantic_review::tests::state_kind_scalar_uses_typed_candidate_and_core_validation ... ok
|
||||
test semantic_review::view::reserved_artifact_tests::reserved_artifact_facet_and_reference_labels_survive_recovery_without_calling_it_deleted ... ok
|
||||
test source_navigation::tests::search_uses_utf8_columns_wraps_and_refreshes_after_edits ... ok
|
||||
test source_tree::tests::active_scroll_offset_uses_the_visible_order_and_retains_ancestor_context ... ok
|
||||
test source_tree::tests::collapsed_folders_retain_active_dirty_and_diagnostic_markers ... ok
|
||||
test source_tree::tests::deep_paths_build_expand_and_drop_on_a_small_stack ... ok
|
||||
test source_tree::tests::detached_buffers_keep_paths_and_only_clean_buffers_are_closable ... ok
|
||||
test source_tree::tests::exact_unicode_spaces_and_file_folder_name_collisions_are_not_normalized ... ok
|
||||
test source_tree::tests::folders_are_compact_and_sorted_before_files_without_losing_duplicate_basenames ... ok
|
||||
test source_workspace::tests::draft_history_budget_covers_inactive_files_without_discarding_drafts ... ok
|
||||
test source_workspace::tests::switching_retains_invalid_drafts_and_independent_history ... ok
|
||||
test tests::actor_port_creation_updates_containment_and_locate_reveals_its_owner ... ok
|
||||
test tests::adding_bend_between_close_ports_stays_outside_owner_clearance ... ok
|
||||
test tests::behavior_and_data_authoring_do_not_place_nodes_in_unrelated_architecture_views ... ok
|
||||
test tests::bidirectional_transition_ui_commits_once_and_preserves_other_diagrams ... ok
|
||||
test tests::counterpart_creation_focuses_visible_target_and_reuse_keeps_views ... ok
|
||||
test tests::creation_from_capabilities_routes_work_to_architecture_and_folded_allocation_inserts_below_existing_work ... ok
|
||||
test tests::dragging_keeps_semantic_selection_and_same_node_remains_editable ... ok
|
||||
test tests::escaped_string_mode_preserves_exact_control_characters ... ok
|
||||
test tests::every_demo_record_has_a_lossless_graphical_draft ... ok
|
||||
test tests::explicit_relationship_builder_never_mutates_on_preview ... ok
|
||||
test tests::explorer_and_creation_selection_follow_their_own_placement ... ok
|
||||
test tests::fit_adapts_to_canvas_returning_after_help_but_preserves_manual_navigation ... ok
|
||||
test tests::fit_uses_measured_canvas_bounds_and_preserves_them_on_open ... ok
|
||||
test tests::focused_explorer_follows_reparenting_without_changing_identity ... ok
|
||||
test tests::graphical_rename_keeps_aliases_and_references_and_undo ... ok
|
||||
test tests::identity_property_change_is_atomic_and_rewrites_all_live_references ... ok
|
||||
test tests::invalid_numeric_draft_survives_navigation_save_and_help ... ok
|
||||
test tests::invalid_save_and_continue_returns_to_repairable_draft ... ok
|
||||
test tests::malformed_source_preserves_model_and_is_recoverable ... ok
|
||||
test tests::manual_trace_requires_target_and_selection_normalizes_creation_kind ... ok
|
||||
test tests::mission_capability_authoring_is_contextual_atomic_and_text_equivalent ... ok
|
||||
test tests::modal_owns_background_commands_and_shortcuts ... ok
|
||||
test tests::nested_allocation_insertion_reflows_sibling_subtrees_and_preserves_fold_state ... ok
|
||||
test tests::opening_and_creating_models_preserve_the_actual_window_size_for_fit ... ok
|
||||
test tests::opening_legacy_source_surfaces_report_without_modifying_original_bytes ... ok
|
||||
test tests::pending_source_prevents_property_draft_collision_and_preserves_both_if_present ... ok
|
||||
test tests::placement_identity_edit_then_drag_and_diagram_identity_then_arrange ... ok
|
||||
test tests::placement_relocation_follows_cross_layer_traceability_view ... ok
|
||||
test tests::property_enum_and_optional_reference_roundtrip ... ok
|
||||
test tests::reopening_canvas_for_a_modal_preserves_viewport_after_route_edits ... ok
|
||||
test tests::revealing_an_implicit_function_port_unfolds_its_visible_architecture_owner ... ok
|
||||
test tests::routing_actions_are_atomic_guarded_and_fit_the_authored_detour ... ok
|
||||
test tests::selecting_current_constructors_preserves_payloads ... ok
|
||||
test tests::source_find_navigates_an_invalid_draft_without_applying_or_losing_it ... ok
|
||||
test tests::source_navigation_waits_for_editor_layout_and_cancels_on_edit ... ok
|
||||
test tests::system_only_models_open_the_populated_perspective ... ok
|
||||
test tests::transition_resolutions_belong_to_the_effective_target_and_kind ... ok
|
||||
test view_copy::tests::duplicate_retains_ports_routes_options_and_artifact_claims_with_exact_undo_redo ... ok
|
||||
test view_copy::tests::duplicate_state_view_preserves_machine_nesting_and_collapse_with_unique_aliases ... ok
|
||||
test view_copy::tests::missing_view_does_not_propose_an_empty_replacement ... ok
|
||||
test views::traceability::tests::traceability_browsing_retains_invalid_property_draft_and_existing_select_guard ... ok
|
||||
test views::traceability::tests::traceability_filter_reaches_artifacts_after_68_traces_and_searches_all_metadata ... ok
|
||||
test workflow::communication::tests::communication_requires_two_explicit_ports_and_recovers_the_partial_choice ... ok
|
||||
test workflow::port_authoring_tests::boundary_picker_matches_exact_commands_across_contracts_and_ownership ... ok
|
||||
test workflow::port_authoring_tests::boundary_picker_recomputes_for_unoriented_reverse_endpoints_without_relaxing_contracts ... ok
|
||||
test workflow::port_authoring_tests::duplicate_port_names_show_owner_contract_and_unique_alias ... ok
|
||||
test workflow::port_authoring_tests::fresh_functions_are_actual_picker_targets_and_plan_enables_apply ... ok
|
||||
test workflow::port_authoring_tests::generic_component_port_connection_keeps_its_endpoint_and_direction ... ok
|
||||
test workflow::port_authoring_tests::ordinary_standard_connections_default_unoriented_and_new_roles_exclude_legacy ... ok
|
||||
test workflow::recovery::tests::incomplete_relationship_and_trace_recover_raw_fields_and_reject_changed_model ... ok
|
||||
test workflow::recovery::tests::transition_recovery_replans_typed_request_without_persisted_commands ... ok
|
||||
test workflow::transition_tests::basic_transition_boundary_choice_is_required_without_an_inferred_system ... ok
|
||||
test workflow::transition_tests::basic_transition_creates_overview_when_existing_views_cannot_show_result ... ok
|
||||
test workflow::transition_tests::basic_transition_explicit_destination_appends_below_existing_bounds_and_is_one_source_edit ... ok
|
||||
test workflow::transition_tests::basic_transition_invalid_explicit_destination_retains_choice_and_refuses ... ok
|
||||
test workflow::transition_tests::basic_transition_reconcile_keeps_existing_selected_view_placement_and_route_exact ... ok
|
||||
test workflow::transition_tests::basic_transition_skips_lowest_uuid_state_view_and_preserves_oa ... ok
|
||||
|
||||
test result: ok. 679 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 576.67s
|
||||
|
||||
@@ -0,0 +1,681 @@
|
||||
app::architecture_authoring::tests::architecture_allocated_work_is_root_owned_and_one_exact_history_change: test
|
||||
app::architecture_authoring::tests::architecture_blank_names_and_escape_never_accept_placeholder_or_rename: test
|
||||
app::architecture_authoring::tests::architecture_captured_escape_does_not_cancel_other_controls_or_placement: test
|
||||
app::architecture_authoring::tests::architecture_f2_routes_selected_node_to_inline_rename_and_exact_undo: test
|
||||
app::architecture_authoring::tests::architecture_first_focused_input_escape_cancels_create_and_rename: test
|
||||
app::architecture_authoring::tests::architecture_invalid_click_cannot_poison_inline_or_checkpoint_geometry: test
|
||||
app::architecture_authoring::tests::architecture_stale_submit_keeps_create_and_rename_visible_and_exact: test
|
||||
app::architecture_authoring_tests::architecture_cancelled_gesture_cannot_commit_a_later_named_draft: test
|
||||
app::architecture_authoring_tests::architecture_canvas_left_click_uses_world_coordinate_once_at_zoom_and_pan: test
|
||||
app::architecture_authoring_tests::architecture_checkpoint_retains_exact_name_point_and_fresh_binding_without_commands: test
|
||||
app::architecture_authoring_tests::architecture_context_choices_are_small_and_system_is_singleton: test
|
||||
app::architecture_authoring_tests::architecture_contextual_allocation_creates_work_relation_and_node_in_one_undo: test
|
||||
app::architecture_authoring_tests::architecture_creation_names_before_commit_preserves_camera_and_undoes_once: test
|
||||
app::architecture_authoring_tests::architecture_existing_inventory_is_contextual_and_placement_never_implies_allocation: test
|
||||
app::architecture_authoring_tests::architecture_f2_rename_preserves_identity_placement_and_atomic_history: test
|
||||
app::architecture_authoring_tests::architecture_name_survives_rejected_click_resize_navigation_and_escape_is_explicit: test
|
||||
app::architecture_authoring_tests::architecture_rejected_submission_keeps_inline_name_visible_and_invalid_click_is_ignored: test
|
||||
app::architecture_authoring_tests::basic_transition_explicit_overview_focus_wins_over_an_already_populated_architecture: test
|
||||
app::behavior_lifecycle_tests::incomplete_behavior_form_is_dirty_close_save_retains_it_and_cancel_allows_switching: test
|
||||
app::behavior_lifecycle_tests::passive_behavior_canvas_events_do_not_apply_property_drafts: test
|
||||
app::behavior_lifecycle_tests::pending_behavior_blocks_navigation_property_edits_and_model_history: test
|
||||
app::behavior_lifecycle_tests::pending_behavior_blocks_source_creation_and_source_history_replay: test
|
||||
app::behavior_lifecycle_tests::save_prepares_behavior_before_opening_destination_and_cancel_keeps_one_undo: test
|
||||
app::behavior_lifecycle_tests::source_writeback_failure_keeps_typed_behavior_form_for_repair_and_one_undo: test
|
||||
app::checkpoints::tests::checkpoint_completion_releases_the_writer_while_a_context_menu_is_open: test
|
||||
app::checkpoints::tests::checkpoint_inline_create_and_rename_restore_focus_without_changing_drafts_or_history: test
|
||||
app::checkpoints::tests::checkpoint_noninline_contexts_keep_other_focus_and_still_lint: test
|
||||
app::checkpoints::tests::discard_and_close_waits_for_the_late_checkpoint_then_retires_it: test
|
||||
app::checkpoints::tests::home_resume_keeps_state_view_while_explicit_architecture_remains_reachable: test
|
||||
app::checkpoints::tests::home_resume_retains_invalid_source_and_property_drafts: test
|
||||
app::checkpoints::tests::home_resume_returns_to_each_actual_workspace_without_model_edits: test
|
||||
app::checkpoints::tests::malformed_checkpoint_does_not_replace_the_current_model: test
|
||||
app::checkpoints::tests::recent_and_recovery_navigation_respect_unsaved_decision: test
|
||||
app::checkpoints::tests::restored_copy_keeps_raw_property_and_requires_save_without_local_or_hosted_binding: test
|
||||
app::checkpoints::tests::saving_an_older_snapshot_keeps_recovery_for_newer_unsaved_work: test
|
||||
app::checkpoints::tests::stale_write_completion_cannot_recover_a_discarded_document: test
|
||||
app::checkpoints::tests::walkthrough_request_keeps_unfinished_source_behind_the_normal_pending_guard: test
|
||||
app::data_paging_lifecycle_tests::paging_preserves_same_context_and_resets_on_layer_or_document_replacement: test
|
||||
app::diagram_selection_tests::changing_visible_view_follows_its_clean_inspector_without_a_model_edit: test
|
||||
app::diagram_selection_tests::diagram_switch_preserves_an_independent_semantic_inspection: test
|
||||
app::diagram_selection_tests::diagram_uuid_edit_follows_the_same_view_or_a_different_picker_target: test
|
||||
app::diagram_selection_tests::invalid_view_draft_blocks_the_switch_and_retains_raw_input: test
|
||||
app::diagram_selection_tests::stale_diagram_choice_never_applies_an_unrelated_valid_draft: test
|
||||
app::diagram_selection_tests::valid_pending_view_edit_applies_to_old_view_then_inspects_the_new_view: test
|
||||
app::direct_scenario_tests::direct_scenario_creation_and_reorder_preserve_selection_and_each_undo_once: test
|
||||
app::direct_scenario_tests::direct_scenario_rejects_every_stale_context_and_preserves_property_drafts: test
|
||||
app::direct_scenario_tests::direct_scenario_scroll_and_real_resize_invalidate_only_pointer_context: test
|
||||
app::direct_scenario_tests::direct_scenario_source_failure_and_navigation_keep_form_until_success: test
|
||||
app::hosted::tests::hosted_actual_app_tasks_publish_edit_conflict_correct_credentials_reload_and_open: test
|
||||
app::hosted::tests::hosted_catalog_invalidation_follows_service_writes_and_observed_revision_changes: test
|
||||
app::hosted::tests::hosted_catalog_search_credentials_and_failed_refresh_never_mix_result_scopes: test
|
||||
app::hosted::tests::hosted_changed_bound_head_does_not_invalidate_another_services_empty_filter: test
|
||||
app::hosted::tests::hosted_conflict_fetches_review_without_adoption_and_reload_is_undoable: test
|
||||
app::hosted::tests::hosted_detached_drafts_and_recovery_remain_available_after_rejected_publish: test
|
||||
app::hosted::tests::hosted_failed_cross_service_publication_checks_and_reloads_its_own_resource: test
|
||||
app::hosted::tests::hosted_failed_or_cancelled_local_open_keeps_the_existing_document_and_destination: test
|
||||
app::hosted::tests::hosted_invalid_and_detached_source_drafts_never_start_network_writes: test
|
||||
app::hosted::tests::hosted_invalid_local_open_repair_saves_locally_and_never_replaces_old_resource: test
|
||||
app::hosted::tests::hosted_modal_blocks_underlying_edits_and_credentials_are_redacted: test
|
||||
app::hosted::tests::hosted_new_revision_invalidates_filtered_catalog_even_without_a_displayed_row: test
|
||||
app::hosted::tests::hosted_only_successful_source_save_as_changes_the_active_destination: test
|
||||
app::hosted::tests::hosted_open_waits_for_unsaved_guard_and_failed_open_preserves_current_document: test
|
||||
app::hosted::tests::hosted_publish_acknowledges_only_the_sent_snapshot_and_retains_undo: test
|
||||
app::hosted::tests::hosted_stale_completions_do_not_clear_current_busy_or_adopt_another_document: test
|
||||
app::hosted::tests::hosted_unknown_save_is_acknowledged_by_exact_readback_without_retry: test
|
||||
app::lint_tests::committed_check_cache_follows_edit_and_undo_while_drafts_stay_separate: test
|
||||
app::lint_tests::lint_coalesces_work_and_rejects_obsolete_results: test
|
||||
app::lint_tests::prior_document_lint_cannot_enter_reopened_model_or_block_next_checks: test
|
||||
app::port_view_tests::catalog_creation_follows_the_new_port_and_keeps_group_browsing_explicit: test
|
||||
app::port_view_tests::filtered_active_view_cannot_hide_a_created_port_when_eligible_owner_view_is_folded: test
|
||||
app::process_canvas::direct_process_dirty_source_blocks_canvas_creation_without_losing_text: test
|
||||
app::process_canvas::tests::direct_process_app_open_source_and_back_preserve_local_reference_identity: test
|
||||
app::process_canvas::tests::direct_process_app_same_owner_selection_preserves_tool_but_owner_change_resets_it: test
|
||||
app::process_canvas::tests::direct_process_app_save_scroll_resize_and_passive_geometry_keep_drafts_and_current_origin: test
|
||||
app::process_canvas::tests::direct_process_app_source_failure_retains_form_then_commits_once_and_selects_occurrence: test
|
||||
app::process_canvas::tests::direct_process_app_stale_context_dirty_source_and_properties_never_mutate: test
|
||||
app::process_canvas::tests::direct_process_append_empty_first_second_exchange_has_exact_source_history: test
|
||||
app::process_canvas::tests::process_focus_retains_rejected_draft_and_guards_selection_until_panels_restore: test
|
||||
app::review_navigation_tests::rejected_semantic_source_writeback_retains_review_camera_and_original_navigation: test
|
||||
app::review_navigation_tests::review_already_showing_the_target_keeps_its_camera_and_query: test
|
||||
app::review_navigation_tests::semantic_name_take_selects_the_counterpart_view_in_both_directions_with_one_exact_history_entry: test
|
||||
app::review_navigation_tests::semantic_review_without_a_destination_view_clears_the_old_layer_canvas_without_creating_a_view: test
|
||||
app::save_as_tests::save_as_late_receipt_preserves_newer_raw_source_draft_and_destination: test
|
||||
app::save_as_tests::save_as_preflight_rejects_historical_collision_before_starting_io: test
|
||||
app::save_as_tests::save_as_receipt_then_one_undo_restores_meaning_and_saving_preserves_redo: test
|
||||
app::source_project_tests::closed_detached_file_keeps_first_save_conflict_then_can_be_reloaded_fresh: test
|
||||
app::source_project_tests::inactive_invalid_draft_blocks_graphical_changes_and_diagnostic_switches_files: test
|
||||
app::source_project_tests::json_export_and_rejected_save_as_preserve_source_location_history_and_bytes: test
|
||||
app::source_project_tests::missing_include_open_keeps_old_model_and_can_be_repaired_and_saved: test
|
||||
app::source_project_tests::recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path: test
|
||||
app::source_project_tests::recovery_of_previous_save_as_target_does_not_redirect_current_project: test
|
||||
app::source_project_tests::recovery_open_finds_first_save_journal_without_an_entry_file: test
|
||||
app::source_project_tests::recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success: test
|
||||
app::source_project_tests::source3_native_open_preserves_report_comments_nesting_and_save_reopen: test
|
||||
app::source_project_tests::two_file_apply_graphical_edit_exact_undo_save_as_and_reopen: test
|
||||
app::state_diagram_tests::all_context_dimensions_reject_stale_selection_camera_and_model_messages: test
|
||||
app::state_diagram_tests::create_view_places_only_its_machine_and_restores_exact_source_in_one_undo: test
|
||||
app::state_diagram_tests::direct_create_connect_select_and_move_keep_semantic_identity_and_atomic_history: test
|
||||
app::state_diagram_tests::fallback_owner_first_selection_keeps_the_captured_context_for_its_first_move: test
|
||||
app::state_diagram_tests::pending_drafts_block_every_direct_mutation_and_passive_camera_preserves_inputs: test
|
||||
app::state_diagram_tests::real_view_tool_and_history_changes_invalidate_old_release_events: test
|
||||
app::state_diagram_tests::rejected_creation_keeps_source_and_selection_then_valid_owner_can_retry: test
|
||||
app::state_diagram_tests::same_size_viewport_after_revision_or_tool_epoch_does_not_refit_the_camera: test
|
||||
app::state_diagram_tests::shared_semantic_states_keep_architecture_and_behavior_placements_independent: test
|
||||
app::state_diagram_tests::state_diagram_routes_constructor_and_source_open_to_the_existing_workspace_without_edits: test
|
||||
app::state_diagram_tests::state_diagram_routes_picker_and_reveal_but_explicit_architecture_does_not_bounce: test
|
||||
app::state_diagram_tests::state_diagram_routes_preserve_selected_raw_properties_and_pending_behavior_guards: test
|
||||
app::state_diagram_tests::state_navigation_catalog_selection_across_layers_resets_camera_and_tool: test
|
||||
app::state_diagram_tests::state_navigation_catalog_selection_of_another_machine_resets_camera_and_tool: test
|
||||
app::state_diagram_tests::state_navigation_layer_change_resets_the_new_machine_at_the_same_viewport_size: test
|
||||
app::state_diagram_tests::state_navigation_return_to_the_same_view_preserves_camera_tool_and_fit_mode: test
|
||||
app::state_diagram_tests::state_navigation_root_event_and_same_layer_keep_the_current_camera_and_tool: test
|
||||
app::transition_context_tests::explicit_behavior_internal_and_process_roots_keep_their_workspace_without_creating_a_view: test
|
||||
app::transition_context_tests::explicit_destination_is_honored_and_ordinary_work_transition_still_places_in_architecture: test
|
||||
app::transition_context_tests::machine_and_typed_action_transitions_resolve_the_owner_and_reusing_that_context_retains_camera: test
|
||||
app::transition_context_tests::rejected_source_writeback_keeps_review_and_navigation_and_invalid_draft_still_blocks_start: test
|
||||
app::transition_context_tests::scenario_transition_focuses_requested_counterpart_and_preserves_unrelated_views_in_both_directions: test
|
||||
app::view_copy_tests::copying_architecture_keeps_architecture_even_with_a_retained_state_view: test
|
||||
app::view_copy_tests::copying_the_current_state_view_uses_its_own_identity_and_is_one_source_undo: test
|
||||
app::view_copy_tests::duplicate_rejection_preserves_an_incomplete_source_buffer: test
|
||||
app::view_copy_tests::duplicate_rejection_preserves_invalid_property_and_pending_behavior_drafts: test
|
||||
app::view_copy_tests::stale_copy_does_not_apply_an_unrelated_valid_property_draft: test
|
||||
behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption: test
|
||||
behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors: test
|
||||
behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source: test
|
||||
behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors: test
|
||||
behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event: test
|
||||
behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection: test
|
||||
behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback: test
|
||||
behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step: test
|
||||
behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency: test
|
||||
behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes: test
|
||||
behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking: test
|
||||
behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict: test
|
||||
behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry: test
|
||||
behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically: test
|
||||
behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll: test
|
||||
behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated: test
|
||||
behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning: test
|
||||
behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer: test
|
||||
behavior::contextual_source_tests::contextual_source_original_document_remains_bound_after_back_or_choosing_existing: test
|
||||
behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source: test
|
||||
behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner: test
|
||||
behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback: test
|
||||
behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo: test
|
||||
behavior::creation::app_tests::app_choosing_another_behavior_or_layer_cannot_commit_a_creation_draft: test
|
||||
behavior::creation::app_tests::app_creation_opens_the_actual_new_owner_instead_of_first_or_previously_active_behavior: test
|
||||
behavior::creation::app_tests::app_first_captured_escape_dismisses_file_or_pending_overlay_before_creation: test
|
||||
behavior::creation::app_tests::app_lesson_request_cancel_retains_creation_then_escape_discards_only_the_draft: test
|
||||
behavior::creation::app_tests::app_machine_behavior_submit_opens_its_opted_in_view_as_one_undoable_transaction: test
|
||||
behavior::creation::app_tests::app_new_never_auto_applies_valid_or_invalid_property_and_source_drafts: test
|
||||
behavior::creation::app_tests::app_recovered_rootless_sa_creation_retains_layer_ids_and_other_raw_drafts: test
|
||||
behavior::creation::app_tests::app_stale_layer_open_never_starts_or_replaces_a_draft: test
|
||||
behavior::creation::tests::all_four_viewpoints_are_explicit_and_survive_source_history_reopen: test
|
||||
behavior::creation::tests::cancel_and_illegal_family_layer_switches_never_create_model_objects: test
|
||||
behavior::creation::tests::corrupted_recovery_and_reserved_identity_collision_refuse_without_repairing_raw_values: test
|
||||
behavior::creation::tests::creation_selection_rejects_changed_scenario_body_and_post_creation_operations: test
|
||||
behavior::creation::tests::machine_requires_valid_owner_and_first_view_adds_no_region_or_state: test
|
||||
behavior::creation::tests::mounted_creation_keeps_actions_visible_and_renders_only_six_owner_candidates: test
|
||||
behavior::creation::tests::oa_process_and_sa_chain_keep_exact_names_root_ownership_and_one_history_entry: test
|
||||
behavior::creation::tests::optional_context_collapses_without_losing_authored_reference_or_raw_search: test
|
||||
behavior::creation::tests::owner_search_is_name_ordered_filtered_and_page_sized_not_a_catalog: test
|
||||
behavior::creation::tests::post_commit_selection_is_correlated_with_exact_created_behavior_and_view: test
|
||||
behavior::creation::tests::recovery_preserves_exact_raw_inputs_reserved_ids_and_revalidates_stale_owner: test
|
||||
behavior::creation::tests::rejected_source_transaction_keeps_draft_and_every_accepted_source_byte: test
|
||||
behavior::creation::tests::repeated_owner_names_remain_distinguishable_by_searchable_parent_context_and_alias: test
|
||||
behavior::direct_canvas_tests::direct_alt_execution_stops_each_operand_at_its_reply_and_marks_open_operand: test
|
||||
behavior::direct_canvas_tests::direct_bounds_change_during_held_drag_never_commits_old_slot: test
|
||||
behavior::direct_canvas_tests::direct_clicked_occurrence_capture_cancels_on_view_and_context_changes: test
|
||||
behavior::direct_canvas_tests::direct_context_escape_unfocus_and_pending_form_cancel_gestures: test
|
||||
behavior::direct_canvas_tests::direct_drag_and_click_click_use_ordered_sources_and_publish_once: test
|
||||
behavior::direct_canvas_tests::direct_execution_span_ends_at_its_correlated_reply_and_marks_an_open_call: test
|
||||
behavior::direct_canvas_tests::direct_scroll_resize_and_bounds_changes_cancel_captured_slots: test
|
||||
behavior::direct_canvas_tests::direct_scrolled_canvas_maps_raw_pointer_events_to_the_visible_slot: test
|
||||
behavior::direct_canvas_tests::direct_selected_handle_reorders_and_hits_keep_semantic_identity: test
|
||||
behavior::direct_canvas_tests::reused_exchange_messages_display_their_distinct_occurrence_names: test
|
||||
behavior::scenario::data_contract_tests::large_payload_has_one_editor_with_reachable_field_and_authored_pages: test
|
||||
behavior::scenario::data_contract_tests::recursive_browsing_up_and_root_keep_values_and_report_the_depth_limit: test
|
||||
behavior::scenario::data_contract_tests::recursive_value_focus_exposes_authored_leaf_and_phase_changes_retain_surviving_keys: test
|
||||
behavior::scenario::data_contract_tests::reply_call_picker_previews_the_same_value_reset_as_selecting_another_exchange: test
|
||||
behavior::scenario::data_contract_tests::scenario_form_commits_two_reused_record_values_and_correlated_reply_atomically: test
|
||||
behavior::scenario::direct_tests::direct_busy_save_keeps_observed_scroll_current_for_the_next_pointer_gesture: test
|
||||
behavior::scenario::direct_tests::direct_clicked_occurrence_rejects_stale_slots_and_retains_recoverable_drafts: test
|
||||
behavior::scenario::direct_tests::direct_clicked_occurrences_use_root_and_operand_slots_with_exact_source_history: test
|
||||
behavior::scenario::direct_tests::direct_exchange_compatibility_browsing_preserves_final_slot_validation: test
|
||||
behavior::scenario::direct_tests::direct_exchange_picker_is_bounded_and_browsing_keeps_pending_values: test
|
||||
behavior::scenario::direct_tests::direct_five_hundred_exchange_choice_render_probe: test
|
||||
behavior::scenario::direct_tests::direct_form_keeps_the_same_canvas_in_the_widget_tree: test
|
||||
behavior::scenario::direct_tests::direct_middle_pair_insertion_is_one_exact_source_and_model_undo: test
|
||||
behavior::scenario::direct_tests::direct_operand_pair_keeps_parent_sequence_and_cannot_reorder_across_operands: test
|
||||
behavior::scenario::direct_tests::direct_reply_choices_cache_keeps_typing_fast_and_revalidates_changed_contexts: test
|
||||
behavior::scenario::direct_tests::direct_reply_choices_validate_the_actual_slot_and_reorder_rejects_reverse_order: test
|
||||
behavior::scenario::direct_tests::direct_scenario_reference_navigation_blocks_pending_drafts_and_stale_contexts: test
|
||||
behavior::scenario::direct_tests::direct_scenario_reference_navigation_retains_each_exact_caller_without_history: test
|
||||
behavior::scenario::direct_tests::direct_scenario_reference_return_survives_rename_and_rejects_deleted_or_changed_use: test
|
||||
behavior::scenario::operation_tests::operation_gui_async_picker_uses_request_root_and_nested_directions_without_erasing_rejected_values: test
|
||||
behavior::scenario::operation_tests::operation_gui_selects_two_parameterless_allocations_without_inventing_refinement_and_reply_derives_call: test
|
||||
behavior::scenario::operation_tests::operation_gui_unresolved_and_disabled_selection_recovery_preserves_rejected_raw_values: test
|
||||
behavior::scenario::tests::fragment_operands_accept_paired_messages_through_normal_destination_picker: test
|
||||
behavior::scenario::tests::graphical_call_reply_is_atomic_correlated_and_source_equivalent: test
|
||||
behavior::scenario::tests::invalid_lifecycle_edit_keeps_draft_and_timer_has_no_global_exchange: test
|
||||
behavior::scenario::tests::lifeline_picker_uses_core_viewpoint_contract: test
|
||||
behavior::scenario::tests::reverse_communication_canvas_choices_and_correlated_reply_share_core_direction: test
|
||||
behavior::scenario::tests::scenario_reuse_requires_explicit_compatible_bindings: test
|
||||
behavior::scenario::tests::tagged_scenario_commit_is_not_redirected_by_other_editor_events: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_allocates_remaining_height_and_pins_actions_at_minimum_and_wide_sizes: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_caller_restores_actual_mounted_canvas_and_shelf_with_camera: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_canvas_and_form_scroll_survive_disclosures_focus_width_and_resize: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_choosing_tools_preserves_valid_and_invalid_pending_editors: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_fit_reobserves_same_sized_owner_and_document_changes: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_fit_uses_measured_inner_viewport_and_rejects_nonfinite_inputs: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_open_and_back_restore_owner_and_mounted_scroll_after_preselection: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_scaled_and_scrolled_scene_keeps_clicked_slots_and_message_endpoints: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_scaled_nested_occurrences_and_reorder_keep_exact_sequence_identity: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_viewport_events_are_passive_guarded_and_do_not_apply_raw_forms: test
|
||||
behavior::scenario::workspace::tests::scenario_workspace_whole_app_canvas_tree_survives_pending_shelves_and_focus: test
|
||||
behavior::scenario_scroll::tests::direct_scenario_caller_restores_mounted_scroll_once_with_clamping_and_app_receipt: test
|
||||
behavior::scenario_scroll::tests::direct_scenario_restore_cannot_scroll_another_document_owner_or_process_view: test
|
||||
behavior::scenario_scroll::tests::direct_scroll_mounted_identity_resets_navigation_but_preserves_edits_before_first_report: test
|
||||
behavior::scenario_scroll::tests::direct_scroll_observer_reports_actual_initial_clamped_and_remounted_offsets_once: test
|
||||
behavior::scenario_scroll::tests::independent_process_owner_change_resets_actual_scroll_offsets: test
|
||||
behavior::source_draft::layout_tests::contextual_source_layout_initial_essentials_fit_short_composed_host_with_real_paragraphs: test
|
||||
behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data: test
|
||||
behavior::source_draft::layout_tests::contextual_source_layout_visible_kind_click_keeps_choice_explicit_and_name_input_works: test
|
||||
behavior::state_canvas::tests::context_menu_keeps_window_anchor_and_explicit_placement_identity: test
|
||||
behavior::state_canvas::tests::context_tool_and_pending_form_changes_cancel_mutating_gestures: test
|
||||
behavior::state_canvas::tests::creation_uses_the_explicit_deepest_owner_and_never_a_fallback_ancestor: test
|
||||
behavior::state_canvas::tests::drag_uses_ordered_release_at_each_zoom_and_moves_descendants_in_one_undo: test
|
||||
behavior::state_canvas::tests::escape_and_view_switch_discard_the_armed_transition_source: test
|
||||
behavior::state_canvas::tests::internal_rows_and_pseudostate_hits_use_shared_persisted_geometry: test
|
||||
behavior::state_canvas::tests::ordered_stationary_click_does_not_move_on_later_motion_in_the_same_batch: test
|
||||
behavior::state_canvas::tests::pan_is_button_scoped_read_only_and_hover_does_not_reproject_the_scene: test
|
||||
behavior::state_canvas::tests::pseudostate_names_avoid_rightward_and_downward_routes_and_share_hit_bounds: test
|
||||
behavior::state_canvas::tests::relayout_does_not_turn_a_transition_click_into_a_drag_or_pan: test
|
||||
behavior::state_canvas::tests::selected_endpoint_reconnect_preserves_identity_and_requires_handle_motion: test
|
||||
behavior::state_canvas::tests::selection_relayout_does_not_move_nodes_or_change_drag_distance: test
|
||||
behavior::state_canvas::tests::stacked_symbol_names_avoid_each_other_and_are_independent_of_input_order: test
|
||||
behavior::state_canvas::tests::transition_supports_click_click_and_drag_without_coalesced_accidental_edges: test
|
||||
behavior::state_canvas::tests::typed_state_actions_are_named_selectable_rows_before_internal_transitions_and_regions: test
|
||||
behavior::state_canvas::tests::viewport_uses_full_canvas_coordinates_and_republishes_for_a_new_context: test
|
||||
behavior::state_edit::tests::an_empty_machine_has_an_explicit_visible_owner_for_first_region_creation: test
|
||||
behavior::state_edit::tests::connect_preserves_self_loops_and_rejects_hidden_or_incompatible_vertices: test
|
||||
behavior::state_edit::tests::creation_places_missing_ancestry_and_unfolds_existing_owners_atomically: test
|
||||
behavior::state_edit::tests::every_context_component_and_invalid_ownership_are_checked_before_planning: test
|
||||
behavior::state_edit::tests::placing_existing_content_and_moving_a_folded_group_preserve_other_views_and_semantics: test
|
||||
behavior::state_edit::tests::reconnect_preserves_the_complete_record_and_replaces_cardinality_in_place: test
|
||||
behavior::state_edit::tests::view_initializes_only_its_machine_in_one_source_and_model_history_entry: test
|
||||
behavior::states::tests::internal_choice_targets_self_and_edit_preserves_identity_and_description: test
|
||||
behavior::states::tests::invalid_pseudo_trigger_keeps_draft_and_does_not_create_orphan_event: test
|
||||
behavior::states::tests::selected_composite_owns_new_region_and_history_uses_selected_region: test
|
||||
behavior::states::tests::timeout_and_work_trigger_commit_together_roundtrip_and_undo: test
|
||||
behavior::tests::failed_document_commit_retains_typed_transition_and_time_event_for_repair: test
|
||||
behavior::tests::legacy_process_and_chain_keep_their_ordered_exchange_scene: test
|
||||
behavior::tests::one_behavior_form_survives_start_edit_and_unrelated_cancel_until_commit: test
|
||||
behavior::tests::recovery_preserves_distinct_qualified_value_paths_and_rejects_invalid_payload_atomically: test
|
||||
behavior::tests::recovery_retains_each_incomplete_behavior_form_without_executing_it: test
|
||||
behavior::tests::selecting_state_transition_keeps_its_behavior_context: test
|
||||
behavior::topology::contextual::tests::qualified_link_gui_deleted_transient_selection_does_not_seed_or_hide_retained_authored_endpoint: test
|
||||
behavior::topology::contextual::tests::qualified_link_gui_nested_preview_folds_only_the_exact_reference_instance: test
|
||||
behavior::topology::contextual::tests::qualified_link_gui_rejected_endpoint_keeps_exact_raw_intent_after_recovery: test
|
||||
behavior::topology::contextual::tests::qualified_link_gui_repeated_sources_remain_distinct_and_apply_has_exact_source_history: test
|
||||
behavior::topology::contextual::tests::qualified_link_gui_scope_paging_and_search_reach_tail_beyond_512_without_losing_endpoints: test
|
||||
behavior::topology::contextual_routing::tests::contextual_route_native_x_to_first_b_keeps_visible_arrow_above_background_and_clear_of_other_references: test
|
||||
behavior::topology::contextual_routing::tests::contextual_route_nested_visible_hidden_and_parallel_paths_keep_exact_addresses_and_legacy_routes: test
|
||||
behavior::topology::contextual_routing::tests::contextual_route_shared_anchor_preserves_selected_direct_reconnect_at_fit_and_full_scale: test
|
||||
behavior::topology::direct_tests::direct_process_append_preserves_existing_order_and_rejects_incompatible_exchange: test
|
||||
behavior::topology::direct_tests::direct_process_controls_allow_incomplete_work_and_preserve_branch_semantics: test
|
||||
behavior::topology::direct_tests::direct_process_empty_first_and_second_exchange_keep_the_same_interactive_renderer: test
|
||||
behavior::topology::direct_tests::direct_process_imported_order_is_projected_without_mutation_and_first_canvas_edit_is_atomic: test
|
||||
behavior::topology::direct_tests::direct_process_incompatible_imported_order_rejects_conversion_without_losing_draft: test
|
||||
behavior::topology::direct_tests::direct_process_nested_source_reopen_and_api_command_use_one_transaction: test
|
||||
behavior::topology::direct_tests::direct_process_oa_sa_repeated_occurrences_share_sources_and_split_one_guarded_link: test
|
||||
behavior::topology::direct_tests::direct_process_palette_preserves_fit_and_manual_camera: test
|
||||
behavior::topology::direct_tests::direct_process_pending_form_diff_retains_the_canvas_scroll_state: test
|
||||
behavior::topology::direct_tests::direct_process_production_click_click_drag_insert_and_scroll_coordinates: test
|
||||
behavior::topology::direct_tests::direct_process_production_endpoint_and_peer_reorder_handles_publish_exact_identity: test
|
||||
behavior::topology::direct_tests::direct_process_production_stale_focus_scroll_bounds_and_pending_cancel: test
|
||||
behavior::topology::direct_tests::direct_process_readable_default_fit_expansion_and_bounded_choices: test
|
||||
behavior::topology::direct_tests::direct_process_real_picker_stays_bounded_and_search_keeps_selection: test
|
||||
behavior::topology::direct_tests::direct_process_reconnect_delete_and_reorder_preserve_other_paths_and_sources: test
|
||||
behavior::topology::direct_tests::direct_process_reuse_preview_is_local_expandable_and_recursive_sources_are_rejected: test
|
||||
behavior::topology::direct_tests::direct_process_scaled_control_and_link_gestures_use_visible_positions: test
|
||||
behavior::topology::direct_tests::direct_process_specific_parallel_link_and_incompatible_adjacency: test
|
||||
behavior::topology::direct_tests::direct_process_three_ordered_exchanges_preserve_outer_paths_on_insertion: test
|
||||
behavior::topology::tests::cycle_projection_terminates_and_retains_actual_links: test
|
||||
behavior::topology::tests::empty_process_can_start_through_normal_authoring_events: test
|
||||
behavior::topology::tests::fitting_a_branch_keeps_all_nodes_visible_and_selection_uses_scaled_coordinates: test
|
||||
behavior::topology::tests::guarded_branch_is_one_transaction_with_distinct_source_identities: test
|
||||
behavior::topology::tests::insertion_picker_only_offers_work_matching_adjacent_exchanges: test
|
||||
behavior::topology::tests::legacy_branch_insertion_replaces_only_the_selected_implied_link: test
|
||||
behavior::topology::tests::legacy_edit_preserves_order_and_new_work_in_one_undo: test
|
||||
behavior::topology::tests::long_engineering_identifiers_stay_inside_label_width: test
|
||||
behavior::topology::tests::process_fit_canvas_selection_ignores_retained_ordered_page_scroll: test
|
||||
behavior::topology::tests::process_fit_disclosures_and_focus_preserve_rejected_raw_draft_and_accepted_source: test
|
||||
behavior::topology::tests::process_fit_uses_measured_height_and_reports_minimum_without_changing_manual_zoom: test
|
||||
behavior::topology::tests::reusable_preview_preserves_identity_and_filters_recursive_sources: test
|
||||
behavior::topology::tests::stale_or_invalid_submit_preserves_inputs_and_creates_nothing: test
|
||||
behavior::topology::tests::unlinked_contributions_do_not_gain_fictional_edges: test
|
||||
behavior::topology::view::layout_tests::direct_process_pending_editor_uses_available_height_and_keeps_actions_visible: test
|
||||
behavior::topology::view::layout_tests::process_fit_layout_disclosures_and_pending_editor_keep_real_manual_canvas_scroll: test
|
||||
behavior::topology::view::layout_tests::process_fit_layout_measures_remaining_canvas_with_details_forms_and_window_resize: test
|
||||
behavior::topology::view::layout_tests::process_fit_whole_app_focus_and_disclosures_retain_canvas_tree_with_pending_raw_form: test
|
||||
connection_edit::tests::cancel_navigation_revision_and_dirty_drafts_cannot_commit_a_stale_connection: test
|
||||
connection_edit::tests::visible_endpoint_drawing_commits_ports_and_exchange_once_with_exact_history: test
|
||||
connection_tool::tests::boundary_candidates_match_core_orientation_and_reject_same_owner_or_mixed_kind: test
|
||||
connection_tool::tests::boundary_feasibility_keeps_interface_warnings_and_final_carried_item_checks: test
|
||||
connection_tool::tests::boundary_feasibility_rejects_dangling_identity_in_a_malformed_element_map: test
|
||||
connection_tool::tests::direct_connections_share_exact_source_history_and_model_parity: test
|
||||
connection_tool::tests::explicit_function_ports_keep_owners_contracts_and_do_not_invent_carried_items: test
|
||||
connection_tool::tests::final_command_validation_rejects_invalid_models_without_mutation: test
|
||||
connection_tool::tests::function_cards_use_unique_reuse_and_atomic_generation_when_ambiguous: test
|
||||
connection_tool::tests::mismatched_port_owners_layers_and_contract_kinds_are_not_candidates: test
|
||||
connection_tool::tests::operational_communication_uses_participants_without_creating_ports: test
|
||||
connection_tool::tests::operational_interaction_targets_only_distinct_oa_activities: test
|
||||
context_menu::tests::a_new_context_token_cannot_reuse_the_previous_mouse_press_or_scroll: test
|
||||
context_menu::tests::actions_area_does_not_swallow_first_independent_click_after_overlay_consumed_its_release: test
|
||||
context_menu::tests::anchors_outside_the_window_and_nonfinite_input_stay_bounded: test
|
||||
context_menu::tests::clicking_disabled_or_dragging_off_an_action_never_executes_it: test
|
||||
context_menu::tests::coalesced_dismissal_release_does_not_swallow_the_next_independent_click: test
|
||||
context_menu::tests::empty_and_disabled_only_menus_still_capture_keys_and_escape_closes: test
|
||||
context_menu::tests::keyboard_skips_headers_separators_and_disabled_actions_and_invokes_once: test
|
||||
context_menu::tests::outside_dismissal_consumes_press_and_release_across_controlled_close: test
|
||||
context_menu::tests::reconstructed_overlay_uses_retained_layout_for_rows_and_hit_testing: test
|
||||
context_menu::tests::retained_overlay_layout_keeps_measured_width_and_scrollbar_after_reconstruction: test
|
||||
context_menu::tests::tall_menu_clamps_to_viewport_and_keyboard_wheel_and_scrollbar_reach_the_end: test
|
||||
data_values::tests::phase_choices_keep_reused_record_addresses_distinct: test
|
||||
data_values::tests::recursive_picker_starts_with_distinct_leaf_names_and_sorts_them: test
|
||||
data_values::tests::recursive_records_can_be_drilled_into_and_valid_imported_paths_resolve: test
|
||||
data_values::tests::reference_parameter_stops_descent_and_unspecified_direction_remains_visible: test
|
||||
data_values::tests::roots_and_one_hop_children_do_not_expand_unrelated_payload_branches: test
|
||||
data_view::tests::allocation_rows_edit_relationship_identity_and_remove_only_that_allocation: test
|
||||
data_view::tests::association_creation_is_a_separate_relation_with_editable_end_contracts: test
|
||||
data_view::tests::browsing_pages_preserves_invalid_numeric_draft_and_inherited_allocation_identity: test
|
||||
data_view::tests::contextual_data_actions_use_typed_defaults_and_one_undo: test
|
||||
data_view::tests::large_inherited_dictionary_has_bounded_widgets_and_every_original_field_is_reachable: test
|
||||
diagram::lifecycle_tests::menu_reset_and_draw_use_fresh_open_context: test
|
||||
diagram::lifecycle_tests::middle_and_arrow_panning_preserve_source_and_history: test
|
||||
diagram::lifecycle_tests::motion_after_release_must_not_move_clicked_port: test
|
||||
diagram::lifecycle_tests::motion_after_source_click_release_must_not_create_connection: test
|
||||
diagram::pointer_tests::coalesced_fe_ports_commit_once_through_app_and_source_history: test
|
||||
diagram::pointer_tests::coalesced_port_drag_commits_once_through_app_and_source_history: test
|
||||
diagram::pointer_tests::drag_from_already_selected_stationary_port_keeps_source_between_batches: test
|
||||
diagram::pointer_tests::menu_captured_motion_must_not_turn_following_click_into_old_port_drag: test
|
||||
diagram::pointer_tests::modal_and_stale_epoch_block_queued_connection_and_port_commits: test
|
||||
diagram::port_hit_tests::coincident_ports_keep_selection_then_use_stable_identity: test
|
||||
diagram::port_hit_tests::nearest_port_center_wins_on_all_borders_and_zoom_levels: test
|
||||
diagram::port_hit_tests::nested_owner_palette_selection_drag_and_context_menu_pick_the_same_port: test
|
||||
diagram::port_labels::tests::leaving_and_reentering_keeps_suppression_until_each_held_button_releases: test
|
||||
diagram::port_labels::tests::menu_epoch_clears_suppression_when_the_overlay_consumes_release: test
|
||||
diagram::port_labels::tests::outside_presses_do_not_suppress_and_cancel_or_focus_loss_clear_held_buttons: test
|
||||
diagram::port_labels::tests::passive_layer_leaves_port_drag_selection_and_commit_with_the_interactive_canvas: test
|
||||
diagram::tests::association_end_contracts_share_svg_geometry_and_select_without_moving_name_label: test
|
||||
diagram::tests::bend_gestures_use_screen_hit_radius_and_commit_one_undo_at_three_zooms: test
|
||||
diagram::tests::coincident_line_hit_retains_the_selected_connection: test
|
||||
diagram::tests::connection_gestures_pick_real_ports_and_commit_coalesced_drag_at_every_zoom: test
|
||||
diagram::tests::detached_label_selects_connection_and_occluding_card_owns_its_hit: test
|
||||
diagram::tests::dragging_a_child_previews_the_same_enclosure_and_ports_as_commit: test
|
||||
diagram::tests::fast_drags_commit_the_release_cursor_without_a_final_motion_event: test
|
||||
diagram::tests::implicit_port_click_selects_semantics_and_drag_preview_svg_share_anchors: test
|
||||
diagram::tests::route_cache_ignores_pan_zoom_and_cancelled_drag_cannot_commit: test
|
||||
diagram::tests::routed_svg_has_same_polyline_label_and_bounds_as_canvas_scene: test
|
||||
diagram::tests::svg_distinguishes_inferred_work_allocation_from_direct_allocation: test
|
||||
diagram::tests::svg_preserves_visible_exchange_labels_and_capability_stereotypes: test
|
||||
diagram::tests::typed_function_glyphs_and_unoriented_standard_connections_have_distinct_svg: test
|
||||
diagram::view_options_tests::communication_svg_uses_saved_visibility_labels_and_direction: test
|
||||
document::save_as_tests::save_as_preserves_explicit_source_entry_changes_in_history: test
|
||||
document::save_as_tests::save_as_rebases_uniform_history_without_an_undo_step_or_lost_redo: test
|
||||
document::save_as_tests::save_as_rejects_included_filename_collisions_in_past_and_future_without_mutation: test
|
||||
document::save_as_tests::save_as_rejects_stale_or_content_changing_receipt_atomically: test
|
||||
document::tests::accepted_history_keeps_the_latest_hundred_complete_snapshots: test
|
||||
document::tests::altered_compiled_model_or_index_is_rejected_without_mutation: test
|
||||
document::tests::asynchronous_save_marks_its_snapshot_without_cleaning_later_edits: test
|
||||
document::tests::byte_budget_trims_oldest_history_without_discarding_a_large_current: test
|
||||
document::tests::cached_view_index_tracks_accepted_creation_undo_and_redo: test
|
||||
document::tests::comment_and_semantic_history_restore_exact_bytes_and_branch_together: test
|
||||
document::tests::creation_selects_the_single_uuid_persisted_in_source: test
|
||||
document::tests::invalid_project_is_rejected_before_format_can_normalize_it: test
|
||||
document::tests::nested_cross_file_reparent_and_source_edit_share_exact_history: test
|
||||
document::tests::no_op_command_or_source_apply_preserves_history_revision_and_redo: test
|
||||
document::tests::omitted_id_stabilization_remains_dirty_until_exact_source_is_saved: test
|
||||
document::tests::recreated_equal_record_does_not_inherit_deleted_source_ownership: test
|
||||
document::tests::rejected_compile_command_and_writeback_preserve_state_and_redo: test
|
||||
explorer::tests::collapse_and_search_retain_context_without_changing_collapse_state: test
|
||||
explorer::tests::deep_containment_and_search_keep_the_full_path_without_recursion: test
|
||||
explorer::tests::equal_names_have_stable_alias_and_identity_tie_breakers: test
|
||||
explorer::tests::perspective_isolation_and_allocations_do_not_change_containment: test
|
||||
explorer::tests::prefix_names_cannot_separate_a_parent_from_its_children: test
|
||||
forms::data_fields::tests::defaults_distinguish_absent_empty_and_typed_literals_with_escaped_unicode: test
|
||||
forms::data_fields::tests::field_browser_pages_every_direct_field_without_flattening_other_records: test
|
||||
forms::data_fields::tests::independent_review_combined_take_type_informs_actual_default_form_in_both_directions: test
|
||||
forms::data_fields::tests::numeric_bound_drafts_keep_partial_and_full_precision_values_out_of_accepted_state: test
|
||||
forms::data_fields::tests::selecting_qualified_path_preserves_expression_typed_before_the_next_render: test
|
||||
forms::data_fields::tests::semantic_reference_choices_follow_selected_mechanism_and_revert_on_keep: test
|
||||
forms::data_fields::tests::supertype_picker_excludes_descendants_and_keeps_original_inherited_field_identity: test
|
||||
forms::history_fields::tests::history_absent_baseline_and_empty_history_use_explicit_facts_and_exact_document_history: test
|
||||
forms::history_fields::tests::history_clear_discards_inactive_invalid_constructors_before_reusing_the_same_row: test
|
||||
forms::history_fields::tests::history_compound_value_and_constructor_variants_are_editable_without_live_context: test
|
||||
forms::history_fields::tests::history_deleted_keys_and_observation_uuids_remain_exact_and_duplicate_history_rejects: test
|
||||
forms::history_fields::tests::history_every_descriptor_fact_choice_matches_actual_closed_types_and_source_contract: test
|
||||
forms::history_fields::tests::history_exact_strings_do_not_confuse_uuid_shaped_prose_or_literal_keys_with_references: test
|
||||
forms::history_fields::tests::history_invalid_numbers_survive_constructor_switch_reorder_removal_and_recovery: test
|
||||
forms::history_fields::tests::history_missing_semantic_field_can_be_added_and_removed_without_touching_prose_or_live_objects: test
|
||||
forms::history_fields::tests::history_nested_optional_number_events_switch_absent_present_and_recover_invalid_raw: test
|
||||
forms::history_fields::tests::history_nested_uuid_and_list_events_preserve_present_values_and_tagged_item_branches: test
|
||||
forms::history_fields::tests::history_optional_uuid_and_text_seed_absence_without_inventing_observations: test
|
||||
forms::history_fields::tests::history_primitive_type_choices_remain_visible_inside_the_tagged_union: test
|
||||
forms::history_fields::tests::history_retained_text_constructors_follow_exact_mode_without_changing_the_observation: test
|
||||
forms::port_fields::tests::all_demo_records_roundtrip_through_graphical_and_escaped_string_drafts: test
|
||||
forms::port_fields::tests::boundary_choices_honor_draft_direction_same_kind_and_direct_interface_items: test
|
||||
forms::port_fields::tests::contract_choices_follow_owner_and_never_offer_legacy_or_oa_typed_ports: test
|
||||
forms::port_fields::tests::failed_shape_keeps_incomplete_text_and_saved_contract_payloads: test
|
||||
forms::port_fields::tests::functional_endpoints_require_owner_direction_and_items_but_retain_bad_current_choice: test
|
||||
forms::port_fields::tests::interface_roles_offer_participants_and_component_ports_independent_of_orientation: test
|
||||
forms::port_fields::tests::port_allocation_choices_use_actual_owner_direction_and_ignore_edited_relation: test
|
||||
forms::port_fields::tests::standard_switch_retains_incompatible_orientation_until_explicit_repair: test
|
||||
forms::port_fields::tests::switching_function_direction_preserves_invalid_items_and_each_authored_payload: test
|
||||
forms::tests::data_and_port_choices_are_typed_but_retain_invalid_current_values: test
|
||||
forms::tests::editing_allocation_offers_other_performers_without_counting_itself_twice: test
|
||||
forms::tests::moving_placement_and_changing_identity_is_one_lossless_undoable_edit: test
|
||||
forms::tests::parent_choices_reject_cycles_without_removing_clear_or_current_choice: test
|
||||
forms::tests::reply_and_reuse_forms_offer_semantically_compatible_references: test
|
||||
forms::tests::scenario_choices_respect_owner_and_exchange_layer: test
|
||||
forms::tests::semantic_port_group_choices_use_combined_owner_and_retain_invalid_transferred_items: test
|
||||
forms::tests::shared_perspective_change_keeps_payload_and_rejects_incompatible_dependencies: test
|
||||
forms::tests::state_observation_picker_keeps_work_lifelines_allocated_to_machine_owner: test
|
||||
forms::tests::state_placement_form_uses_draft_destination_membership_without_changing_other_views: test
|
||||
forms::tests::state_projection_form_keeps_string_variants_and_requires_a_typed_context: test
|
||||
forms::view_fields::tests::category_family_change_retains_members_until_explicit_correction: test
|
||||
forms::view_fields::tests::selective_view_property_apply_recovery_and_undo_preserve_semantics_and_empty_choices: test
|
||||
guide::tests::filtering_and_related_navigation_keep_selection_visible: test
|
||||
guide::tests::guide_topic_navigation_resets_only_article_and_same_topic_search_keeps_scroll: test
|
||||
guide::tests::search_finds_concepts_in_walkthroughs_and_api_reference: test
|
||||
home::tests::corrupt_future_and_oversized_history_are_preserved_with_usable_session_history: test
|
||||
home::tests::failed_metadata_replace_keeps_previous_history_and_reports_memory_only_entry: test
|
||||
home::tests::first_and_replaced_metadata_are_parseable_and_contain_no_model_bytes: test
|
||||
home::tests::forgotten_and_missing_files_never_change_the_model_or_other_entries: test
|
||||
home::tests::loading_missing_history_does_not_create_files_or_directories: test
|
||||
home::tests::malformed_entries_and_unknown_fields_never_become_open_requests: test
|
||||
home::tests::successful_local_history_is_bounded_ordered_deduplicated_and_durable: test
|
||||
home::tests::unavailable_location_can_reappear_on_refresh_without_losing_identity: test
|
||||
home::tests::walkthrough_uses_packaged_bundle_before_development_and_reports_missing_assets: test
|
||||
hosted::client::tests::hosted_endpoint_validation_redacts_secrets_and_preserves_proxy_paths: test
|
||||
hosted::client::tests::hosted_lost_publication_response_is_uncertain_without_retry: test
|
||||
hosted::client::tests::hosted_open_rejects_incoherent_envelopes_missing_etags_and_unstable_ids: test
|
||||
hosted::client::tests::hosted_oversized_local_bundle_is_rejected_before_network_admission: test
|
||||
hosted::client::tests::hosted_production_auth_proxy_prefix_and_located_rejection: test
|
||||
hosted::client::tests::hosted_production_roundtrip_preserves_comments_noops_and_conflicts: test
|
||||
hosted::client::tests::hosted_publication_race_keeps_receipt_identity_for_review: test
|
||||
hosted::client::tests::hosted_publication_retains_known_resource_after_failed_followup: test
|
||||
hosted::client::tests::hosted_put_preserves_an_opaque_etag_and_compiles_the_accepted_bundle: test
|
||||
hosted::client::tests::hosted_redirect_is_not_followed_or_retried_and_problem_tokens_are_redacted: test
|
||||
hosted::client::tests::hosted_response_limits_cover_declared_and_chunked_bodies: test
|
||||
hosted::client::tests::hosted_structured_mutation_failures_distinguish_precommit_rejections: test
|
||||
hosted::client::tests::hosted_timeout_and_disconnect_leave_mutation_outcomes_explicit: test
|
||||
model_menu::tests::add_bend_here_uses_context_point_and_one_source_aware_history_change: test
|
||||
model_menu::tests::late_menu_actions_do_not_dismiss_new_menu_or_cross_view_context: test
|
||||
model_menu::tests::menu_preserves_pending_properties_and_rejects_delayed_mutations: test
|
||||
model_menu::tests::pending_source_allows_file_navigation_but_disables_model_actions: test
|
||||
model_menu::tests::right_click_targets_actor_without_changing_selection_until_action: test
|
||||
model_menu::tests::show_from_explorer_places_unfolds_and_keeps_semantic_selection: test
|
||||
model_menu::tests::state_menu_folds_and_hides_only_its_captured_placement_and_rejects_stale_views: test
|
||||
model_menu::tests::state_menu_keeps_typed_creation_reachable_and_preserves_pending_properties: test
|
||||
navigation::tests::semantic_browser_finds_behavior_users_without_confusing_containment: test
|
||||
port_edit::tests::all_border_drags_commit_exact_preview_and_restore_automatic_anchors_in_history: test
|
||||
port_edit::tests::graphical_port_reparent_clears_old_anchors_in_the_same_history_operation: test
|
||||
port_preview::tests::functional_creation_identifies_new_and_reused_endpoints_and_owners: test
|
||||
port_preview::tests::legacy_split_discloses_endpoint_routing_item_origins_and_retained_evidence: test
|
||||
port_preview::tests::reused_boundary_shows_item_union_and_existing_allocating_facts: test
|
||||
port_preview::tests::synchronization_preview_exposes_contract_shrinkage_and_current_declaration_origin: test
|
||||
port_workflow::recovery_tests::port_recovery_retains_authored_contract_and_identity_but_rebuilds_preview: test
|
||||
port_workflow::tests::creating_typed_port_and_rejecting_stale_preview_preserve_drafts_and_identity: test
|
||||
port_workflow::tests::graphical_function_exchange_and_component_generation_commit_and_undo_whole_contracts: test
|
||||
port_workflow::tests::legacy_resolution_preserves_original_record_and_applies_as_one_undo: test
|
||||
port_workflow::tests::port_creation_keeps_owner_diagram_and_unfolds_in_the_same_undo: test
|
||||
port_workflow::tests::synchronization_uses_active_contract_instead_of_preserved_direction: test
|
||||
recovery::source5::tests::source5_fingerprint_preserves_historical_field_order_and_diagram_shape: test
|
||||
recovery::source5_tests::source4_checkpoint_remains_explicitly_unsupported_without_touching_disk: test
|
||||
recovery::source5_tests::source5_checkpoint_does_not_refresh_unrelated_clean_buffer_baseline: test
|
||||
recovery::source5_tests::source5_checkpoint_missing_identity_is_not_a_lossless_upgrade: test
|
||||
recovery::source5_tests::source5_checkpoint_old_diagram_property_shape_remains_editable: test
|
||||
recovery::source5_tests::source5_checkpoint_port_draft_replans_and_rejects_stale_base: test
|
||||
recovery::source5_tests::source5_checkpoint_preserves_dirty_invalid_text_and_baseline_exactly: test
|
||||
recovery::source5_tests::source5_checkpoint_preserves_distinct_unapplied_open_workspace: test
|
||||
recovery::source5_tests::source5_checkpoint_property_preserves_invalid_raw_input: test
|
||||
recovery::source5_tests::source5_checkpoint_upgrade_never_rewrites_checkpoint_or_origin: test
|
||||
recovery::source5_tests::source5_checkpoint_upgrades_only_header_and_clean_editor_baseline: test
|
||||
recovery::source5_tests::source5_checkpoint_workflow_rebinds_only_the_proven_old_revision: test
|
||||
recovery::source7_tests::source7_current_combined_contextual_and_operation_drafts_survive_without_execution: test
|
||||
recovery::source7_tests::source7_explicit_new_fields_cannot_enter_frozen_old_model_profiles: test
|
||||
recovery::source7_tests::source7_legacy_inactive_constructor_path_is_structural_but_raw_prose_is_not: test
|
||||
recovery::source7_tests::source7_legacy_profile_workflow_and_semantic_drafts_replan_with_exact_base: test
|
||||
recovery::source7_tests::source7_legacy_profiles_preserve_dirty_source_property_and_behavior_raw_fields: test
|
||||
recovery::source7_tests::source7_legacy_structural_intent_rejects_even_null_but_never_scans_raw_strings: test
|
||||
recovery::source7_tests::source7_legacy_view_selector_refuses_new_relation_kind_without_rewriting_checkpoint: test
|
||||
recovery::source7_tests::source7_recovers_nonempty_frozen_5_and_6_profiles_with_exact_historical_binding: test
|
||||
recovery::tests::altered_accepted_identity_and_unrecognized_raw_property_fields_reject: test
|
||||
recovery::tests::exact_source_and_unfinished_invalid_buffers_restore_without_model_overwrite: test
|
||||
recovery::tests::excess_retained_buffers_cannot_replace_the_last_recoverable_checkpoint: test
|
||||
recovery::tests::invalid_open_retains_distinct_accepted_model_and_repair_workspace: test
|
||||
recovery::tests::missing_includes_remain_reachable_repair_targets_without_fabricated_buffers: test
|
||||
recovery::tests::multiple_sessions_replace_only_their_own_checkpoint_and_corruption_is_retained: test
|
||||
recovery::tests::raw_invalid_property_number_survives_and_stays_rejected_until_repaired: test
|
||||
semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_draft_cannot_target_an_unreserved_or_non_artifact_identity: test
|
||||
semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_raw_variants_duplicate_addresses_and_unknown_fields_are_refused: test
|
||||
semantic_review::artifacts_recovery_falsifier_tests::forged_artifact_reservations_cannot_duplicate_or_claim_an_existing_identity_or_another_owner: test
|
||||
semantic_review::artifacts_recovery_falsifier_tests::legitimate_invalid_artifact_checkpoint_round_trips_and_prepares_only_after_explicit_repair: test
|
||||
semantic_review::artifacts_tests::artifact_candidate_is_a_complete_record_not_a_tombstone_or_unattached_creation_shortcut: test
|
||||
semantic_review::artifacts_tests::artifact_creation_and_identified_source_deletion_follow_core_metadata_and_history_boundary_both_directions: test
|
||||
semantic_review::artifacts_tests::artifact_gui_reserves_recovers_and_creates_only_after_all_seven_metadata_reviews_both_directions: test
|
||||
semantic_review::artifacts_tests::artifact_metadata_apply_and_exact_history_reset_are_one_source_preserving_undo_redo: test
|
||||
semantic_review::artifacts_tests::artifact_move_metadata_none_empty_and_invalid_raw_recovery_are_independent_both_directions: test
|
||||
semantic_review::artifacts_tests::artifact_moved_source_absence_deletes_but_destination_only_take_retains_both_directions: test
|
||||
semantic_review::attachments::tests::absent_attachment_payloads_migrate_v1_and_v2_and_source5_upgrade_requires_exact_legacy_base: test
|
||||
semantic_review::attachments::tests::addressed_attachment_candidates_equal_direct_core_oracle_both_directions: test
|
||||
semantic_review::attachments::tests::attachment_apply_is_one_exact_source_and_history_undo_redo: test
|
||||
semantic_review::attachments::tests::attachment_candidate_and_direct_record_keep_conflict_on_actual_slot_without_losing_drafts: test
|
||||
semantic_review::attachments::tests::attachment_pair_drafts_survive_family_switch_and_restore_without_mutating_model: test
|
||||
semantic_review::attachments::tests::functional_incident_source_requires_explicit_matching_port_review_in_one_atomic_candidate: test
|
||||
semantic_review::attachments::tests::parent_and_each_endpoint_candidate_preserve_other_fields_and_match_core_both_directions: test
|
||||
semantic_review::attachments::tests::raw_rejected_attachment_reference_survives_recovery_and_wrong_scope_is_rejected: test
|
||||
semantic_review::attachments::tests::source_only_absence_and_explicit_absent_endpoint_are_different: test
|
||||
semantic_review::attachments::tests::two_incident_endpoint_candidates_form_one_complete_record_and_recover_invalid_excluded_draft: test
|
||||
semantic_review::batch_tests::batch_apply_is_one_exact_source_and_history_undo_redo_roundtrip: test
|
||||
semantic_review::batch_tests::batch_candidate_conflict_keeps_both_raw_values_and_keep_is_a_real_constraint: test
|
||||
semantic_review::batch_tests::batch_complete_constructor_cannot_erase_another_rows_new_literal: test
|
||||
semantic_review::batch_tests::batch_constructor_retirement_conflicts_with_another_rows_kept_bound_in_both_orders: test
|
||||
semantic_review::batch_tests::batch_delayed_text_targets_its_original_row_and_facet_without_switching_focus: test
|
||||
semantic_review::batch_tests::batch_excluded_invalid_row_survives_focus_reopen_and_v2_recovery: test
|
||||
semantic_review::batch_tests::batch_first_equal_constructor_acknowledgement_allows_an_independent_bound: test
|
||||
semantic_review::batch_tests::batch_joint_bounds_use_one_candidate_and_match_an_independent_atomic_core_oracle: test
|
||||
semantic_review::batch_tests::batch_reverse_distinct_targets_work_and_reverse_convergence_is_explicit: test
|
||||
semantic_review::batch_tests::batch_v2_rejects_duplicate_included_sources_bad_addresses_and_stale_model: test
|
||||
semantic_review::batch_tests::category_family_and_members_are_independent_core_checked_facets_both_directions: test
|
||||
semantic_review::batch_tests::recovered_trace_picker_names_existing_trace_instead_of_deleted_reference: test
|
||||
semantic_review::batch_tests::rejected_direction_switch_at_row_limit_preserves_every_recoverable_draft: test
|
||||
semantic_review::compose::diagnostic_tests::distinct_review_conflict_keeps_trace_aliases_even_when_names_are_equal: test
|
||||
semantic_review::compose::diagnostic_tests::reserved_creation_conflict_uses_its_rows_seed_instead_of_a_deleted_reference: test
|
||||
semantic_review::compose::diagnostic_tests::same_review_presence_and_owner_conflict_names_both_facets_and_owners_and_retains_drafts: test
|
||||
semantic_review::compose::diagnostic_tests::typed_owner_display_does_not_reinterpret_uuid_shaped_artifact_text: test
|
||||
semantic_review::constructor_tests::closed_data_and_event_take_composition_matches_core_across_every_kind_pair_and_direction: test
|
||||
semantic_review::constructor_tests::data_group_candidates_cover_every_definition_and_companion_default_both_directions: test
|
||||
semantic_review::constructor_tests::data_group_retains_invalid_sibling_drafts_companion_default_and_variant_editor_buffers: test
|
||||
semantic_review::constructor_tests::exchange_constructor_takes_qualified_annotation_addresses_without_remapping_expression_text: test
|
||||
semantic_review::constructor_tests::existing_fragment_and_branch_group_candidates_edit_complete_owned_order_without_deletion: test
|
||||
semantic_review::constructor_tests::group_take_reference_payload_and_scalar_candidate_match_core_and_one_document_batch: test
|
||||
semantic_review::constructor_tests::historical_event_keep_retires_only_obsolete_branch_and_unchanged_kind_acknowledges_no_payload: test
|
||||
semantic_review::constructor_tests::historical_same_kind_take_preserves_target_only_literals_when_composed_with_candidate: test
|
||||
semantic_review::constructor_tests::occurrence_and_event_candidate_variants_cover_closed_families_without_touching_headers: test
|
||||
semantic_review::constructor_tests::outer_and_nested_constructor_candidates_require_explicit_resolution_and_retain_both_drafts: test
|
||||
semantic_review::constructor_tests::port_group_companions_typed_owner_context_and_direction_restrictions_are_explicit: test
|
||||
semantic_review::constructor_tests::reverse_existing_typed_port_reviews_keep_or_candidate_legacy_without_permitting_typed_oa_write: test
|
||||
semantic_review::constructor_tests::scenario_use_group_takes_typed_binding_references_and_preserves_source_text_both_directions: test
|
||||
semantic_review::keyed_rows_tests::annotation_address_browser_descends_qualified_fields_without_changing_rows: test
|
||||
semantic_review::keyed_rows_tests::annotation_observations_keep_uuid_shaped_expression_text_in_both_sides_and_history: test
|
||||
semantic_review::keyed_rows_tests::batch_keyed_rows_compare_exact_target_slots_and_retain_independent_values: test
|
||||
semantic_review::keyed_rows_tests::binding_choices_separate_reused_keys_from_local_lifelines: test
|
||||
semantic_review::keyed_rows_tests::binding_local_picker_follows_a_candidate_parent_before_the_review_is_valid: test
|
||||
semantic_review::keyed_rows_tests::binding_take_requires_local_correspondence_and_candidate_rejects_wrong_scenario: test
|
||||
semantic_review::keyed_rows_tests::independent_rows_keep_take_candidate_match_core_and_preserve_siblings_both_directions: test
|
||||
semantic_review::keyed_rows_tests::keyed_recovery_retains_raw_rows_and_staged_pairs_both_directions_without_applying: test
|
||||
semantic_review::keyed_rows_tests::keyed_row_drafts_retain_expression_local_and_presence_across_decisions_and_staging: test
|
||||
semantic_review::keyed_rows_tests::keyed_rows_distinguish_unpaired_source_from_explicit_absence_and_require_exact_reset: test
|
||||
semantic_review::keyed_rows_tests::multiple_new_rows_compose_in_empty_collections_using_destination_key_order: test
|
||||
semantic_review::keyed_rows_tests::row_review_apply_preserves_exact_source_and_semantic_history_through_undo_redo: test
|
||||
semantic_review::keyed_tests::deleted_member_source_observation_removes_only_mapped_membership_both_directions: test
|
||||
semantic_review::keyed_tests::exact_literal_new_rows_and_removals_commit_both_directions_without_default_loss: test
|
||||
semantic_review::keyed_tests::exact_reset_only_is_one_history_source_transaction_and_undo_redo_both_directions: test
|
||||
semantic_review::keyed_tests::function_port_members_use_existing_typed_choices_and_preserve_oa_legacy: test
|
||||
semantic_review::keyed_tests::historical_one_sided_pair_migration_requires_exact_reset_and_explicit_overlap_resolution: test
|
||||
semantic_review::keyed_tests::invalid_literal_removal_and_unselected_scalar_buffers_are_retained_and_repairable: test
|
||||
semantic_review::keyed_tests::member_identity_labels_and_new_tabs_preserve_exact_names_and_deleted_keys: test
|
||||
semantic_review::keyed_tests::reset_precedes_equal_constructor_candidate_and_preserves_independent_literal_draft: test
|
||||
semantic_review::keyed_tests::staging_removal_and_obsolete_reset_recovery_keep_other_decisions_and_raw_presence: test
|
||||
semantic_review::keyed_tests::stale_or_source_failed_reset_and_membership_apply_retain_exact_choices: test
|
||||
semantic_review::keyed_tests::unordered_members_keep_take_candidate_preserve_other_rows_both_directions: test
|
||||
semantic_review::keyed_tests::unsupported_independent_families_and_missing_identities_do_not_gain_edit_authority: test
|
||||
semantic_review::message_kind_tests::message_group_candidate_closed_kinds_are_core_validated_in_both_directions: test
|
||||
semantic_review::message_kind_tests::message_group_candidate_timer_switches_preserve_both_drafts_and_overlap_is_explicit: test
|
||||
semantic_review::message_kind_tests::message_group_initial_equal_take_acknowledges_only_kind_and_checks_authored_timer_agreement: test
|
||||
semantic_review::message_kind_tests::message_group_keep_historical_switch_retires_timer_and_completed_no_switch_rejects: test
|
||||
semantic_review::message_kind_tests::message_group_rejects_protected_edits_stale_plan_and_source_failure_without_losing_timer: test
|
||||
semantic_review::message_kind_tests::message_group_reply_and_reference_take_require_explicit_call_mapping_both_directions: test
|
||||
semantic_review::message_kind_tests::message_group_take_full_timer_and_scalar_candidate_are_one_source_history_change_both_directions: test
|
||||
semantic_review::message_kind_tests::message_group_timer_does_not_erase_exchange_without_its_own_selected_decision: test
|
||||
semantic_review::ordered_tests::ambiguous_order_preserves_local_member_and_requires_explicit_candidate_positions: test
|
||||
semantic_review::ordered_tests::historical_pair_restore_uses_exact_member_keys_and_never_zips_order_observations: test
|
||||
semantic_review::ordered_tests::order_take_preserves_destination_only_positions_and_order_alone_cannot_add_members: test
|
||||
semantic_review::ordered_tests::ordered_membership_choices_stage_exact_pairs_in_all_owner_shapes: test
|
||||
semantic_review::ordered_tests::ordered_presence_keep_take_candidate_remove_only_selected_entry_and_order_take_reorders_only: test
|
||||
semantic_review::ordered_tests::ordered_review_apply_is_exact_source_history_transaction_with_reopen_and_undo_redo: test
|
||||
semantic_review::ordered_tests::ordered_take_uses_unique_anchors_and_matches_core_with_unrelated_candidate_both_directions: test
|
||||
semantic_review::ordered_tests::raw_order_survives_membership_changes_decisions_and_recovery_until_explicit_reconcile: test
|
||||
semantic_review::ordered_tests::several_incoming_members_follow_source_order_despite_independent_identity_sorting: test
|
||||
semantic_review::recovery::tests::raw_scalar_and_closed_constructor_drafts_recover_against_exact_model_only: test
|
||||
semantic_review::recovery::tests::version_one_without_orders_restores_raw_intent_and_replans_without_execution: test
|
||||
semantic_review::source7_tests::contextual_incident_leaf_keep_allows_path_change_but_conflicts_with_changed_leaf_both_directions: test
|
||||
semantic_review::source7_tests::reverse_operation_omission_gui_requires_raw_rationale_and_matches_one_core_batch_after_recovery: test
|
||||
semantic_review::source7_tests::semantic_operation_virtual_none_candidate_uses_exact_allocation_and_preserves_accepted_bytes: test
|
||||
semantic_review::tests::candidate_mixed_with_reference_take_uses_typed_correspondence_not_text_guessing: test
|
||||
semantic_review::tests::deselected_invalid_candidate_is_retained_but_does_not_poison_another_selected_scalar: test
|
||||
semantic_review::tests::explicit_trace_selection_updates_only_that_history: test
|
||||
semantic_review::tests::first_equal_constructor_acknowledges_only_kind_and_allows_independent_leaves: test
|
||||
semantic_review::tests::independent_review_clear_bound_ignores_retained_invalid_other_facet: test
|
||||
semantic_review::tests::independent_review_keyed_fact_titles_keep_live_deleted_and_qualified_identity: test
|
||||
semantic_review::tests::inherited_annotation_impact_requires_exact_acceptance_and_edits_clear_approval: test
|
||||
semantic_review::tests::invalid_numeric_draft_and_protected_edits_retain_workflow_and_source: test
|
||||
semantic_review::tests::read_only_structured_facts_and_partial_rollup_are_honest: test
|
||||
semantic_review::tests::relation_candidates_preserve_endpoints_and_combine_selected_roles_and_bounds: test
|
||||
semantic_review::tests::scalar_keep_take_candidate_commit_exact_source_and_history_in_both_directions: test
|
||||
semantic_review::tests::scoped_literal_list_edits_preserve_unfinished_values_and_other_facet_buffers: test
|
||||
semantic_review::tests::stale_plan_and_source_writeback_failure_do_not_lose_decisions_or_history: test
|
||||
semantic_review::tests::state_kind_scalar_uses_typed_candidate_and_core_validation: test
|
||||
semantic_review::view::reserved_artifact_tests::reserved_artifact_facet_and_reference_labels_survive_recovery_without_calling_it_deleted: test
|
||||
source_navigation::tests::search_uses_utf8_columns_wraps_and_refreshes_after_edits: test
|
||||
source_tree::tests::active_scroll_offset_uses_the_visible_order_and_retains_ancestor_context: test
|
||||
source_tree::tests::collapsed_folders_retain_active_dirty_and_diagnostic_markers: test
|
||||
source_tree::tests::deep_paths_build_expand_and_drop_on_a_small_stack: test
|
||||
source_tree::tests::detached_buffers_keep_paths_and_only_clean_buffers_are_closable: test
|
||||
source_tree::tests::exact_unicode_spaces_and_file_folder_name_collisions_are_not_normalized: test
|
||||
source_tree::tests::folders_are_compact_and_sorted_before_files_without_losing_duplicate_basenames: test
|
||||
source_workspace::tests::draft_history_budget_covers_inactive_files_without_discarding_drafts: test
|
||||
source_workspace::tests::switching_retains_invalid_drafts_and_independent_history: test
|
||||
tests::actor_port_creation_updates_containment_and_locate_reveals_its_owner: test
|
||||
tests::adding_bend_between_close_ports_stays_outside_owner_clearance: test
|
||||
tests::behavior_and_data_authoring_do_not_place_nodes_in_unrelated_architecture_views: test
|
||||
tests::bidirectional_transition_ui_commits_once_and_preserves_other_diagrams: test
|
||||
tests::counterpart_creation_focuses_visible_target_and_reuse_keeps_views: test
|
||||
tests::creation_from_capabilities_routes_work_to_architecture_and_folded_allocation_inserts_below_existing_work: test
|
||||
tests::dragging_keeps_semantic_selection_and_same_node_remains_editable: test
|
||||
tests::escaped_string_mode_preserves_exact_control_characters: test
|
||||
tests::every_demo_record_has_a_lossless_graphical_draft: test
|
||||
tests::explicit_relationship_builder_never_mutates_on_preview: test
|
||||
tests::explorer_and_creation_selection_follow_their_own_placement: test
|
||||
tests::fit_adapts_to_canvas_returning_after_help_but_preserves_manual_navigation: test
|
||||
tests::fit_uses_measured_canvas_bounds_and_preserves_them_on_open: test
|
||||
tests::focused_explorer_follows_reparenting_without_changing_identity: test
|
||||
tests::graphical_rename_keeps_aliases_and_references_and_undo: test
|
||||
tests::identity_property_change_is_atomic_and_rewrites_all_live_references: test
|
||||
tests::invalid_numeric_draft_survives_navigation_save_and_help: test
|
||||
tests::invalid_save_and_continue_returns_to_repairable_draft: test
|
||||
tests::malformed_source_preserves_model_and_is_recoverable: test
|
||||
tests::manual_trace_requires_target_and_selection_normalizes_creation_kind: test
|
||||
tests::mission_capability_authoring_is_contextual_atomic_and_text_equivalent: test
|
||||
tests::modal_owns_background_commands_and_shortcuts: test
|
||||
tests::nested_allocation_insertion_reflows_sibling_subtrees_and_preserves_fold_state: test
|
||||
tests::opening_and_creating_models_preserve_the_actual_window_size_for_fit: test
|
||||
tests::opening_legacy_source_surfaces_report_without_modifying_original_bytes: test
|
||||
tests::pending_source_prevents_property_draft_collision_and_preserves_both_if_present: test
|
||||
tests::placement_identity_edit_then_drag_and_diagram_identity_then_arrange: test
|
||||
tests::placement_relocation_follows_cross_layer_traceability_view: test
|
||||
tests::property_enum_and_optional_reference_roundtrip: test
|
||||
tests::reopening_canvas_for_a_modal_preserves_viewport_after_route_edits: test
|
||||
tests::revealing_an_implicit_function_port_unfolds_its_visible_architecture_owner: test
|
||||
tests::routing_actions_are_atomic_guarded_and_fit_the_authored_detour: test
|
||||
tests::selecting_current_constructors_preserves_payloads: test
|
||||
tests::source_find_navigates_an_invalid_draft_without_applying_or_losing_it: test
|
||||
tests::source_navigation_waits_for_editor_layout_and_cancels_on_edit: test
|
||||
tests::system_only_models_open_the_populated_perspective: test
|
||||
tests::transition_resolutions_belong_to_the_effective_target_and_kind: test
|
||||
view_copy::tests::duplicate_retains_ports_routes_options_and_artifact_claims_with_exact_undo_redo: test
|
||||
view_copy::tests::duplicate_state_view_preserves_machine_nesting_and_collapse_with_unique_aliases: test
|
||||
view_copy::tests::missing_view_does_not_propose_an_empty_replacement: test
|
||||
views::traceability::tests::traceability_browsing_retains_invalid_property_draft_and_existing_select_guard: test
|
||||
views::traceability::tests::traceability_filter_reaches_artifacts_after_68_traces_and_searches_all_metadata: test
|
||||
workflow::communication::tests::communication_requires_two_explicit_ports_and_recovers_the_partial_choice: test
|
||||
workflow::port_authoring_tests::boundary_picker_matches_exact_commands_across_contracts_and_ownership: test
|
||||
workflow::port_authoring_tests::boundary_picker_recomputes_for_unoriented_reverse_endpoints_without_relaxing_contracts: test
|
||||
workflow::port_authoring_tests::duplicate_port_names_show_owner_contract_and_unique_alias: test
|
||||
workflow::port_authoring_tests::fresh_functions_are_actual_picker_targets_and_plan_enables_apply: test
|
||||
workflow::port_authoring_tests::generic_component_port_connection_keeps_its_endpoint_and_direction: test
|
||||
workflow::port_authoring_tests::ordinary_standard_connections_default_unoriented_and_new_roles_exclude_legacy: test
|
||||
workflow::recovery::tests::incomplete_relationship_and_trace_recover_raw_fields_and_reject_changed_model: test
|
||||
workflow::recovery::tests::transition_recovery_replans_typed_request_without_persisted_commands: test
|
||||
workflow::transition_tests::basic_transition_boundary_choice_is_required_without_an_inferred_system: test
|
||||
workflow::transition_tests::basic_transition_creates_overview_when_existing_views_cannot_show_result: test
|
||||
workflow::transition_tests::basic_transition_explicit_destination_appends_below_existing_bounds_and_is_one_source_edit: test
|
||||
workflow::transition_tests::basic_transition_invalid_explicit_destination_retains_choice_and_refuses: test
|
||||
workflow::transition_tests::basic_transition_reconcile_keeps_existing_selected_view_placement_and_route_exact: test
|
||||
workflow::transition_tests::basic_transition_skips_lowest_uuid_state_view_and_preserves_oa: test
|
||||
|
||||
679 tests, 0 benchmarks
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"createdUtc": "2026-09-11T15:49:12.932963+00:00",
|
||||
"scope": "Actual terminal full679 immutable Windows test run",
|
||||
"excludes": "manifest.json",
|
||||
"files": [
|
||||
{
|
||||
"path": "admission.json",
|
||||
"bytes": 773,
|
||||
"sha256": "c48cca915d26fd6d259a9a8039a5bab5a7485ab310b4bf259aec62da5a68dfc3"
|
||||
},
|
||||
{
|
||||
"path": "copy-provenance.json",
|
||||
"bytes": 1867,
|
||||
"sha256": "a3f42e405391ea142c295d8210c36953050fc840ae7de2dfba35741bbc870767"
|
||||
},
|
||||
{
|
||||
"path": "full-result.json",
|
||||
"bytes": 669,
|
||||
"sha256": "a87d2634fe8be05e7de387346a43056db150f1846ac54a18d02650fe81b9c80d"
|
||||
},
|
||||
{
|
||||
"path": "full.stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "full.stdout.log",
|
||||
"bytes": 76245,
|
||||
"sha256": "9040fa1991626fee9a54d866c0021c88a07adb76f4e9a6e4c8cdabde89deb177"
|
||||
},
|
||||
{
|
||||
"path": "inventory.stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "inventory.stdout.log",
|
||||
"bytes": 72077,
|
||||
"sha256": "a478c0fb2c5a814fa9d352a3147fb5a25f16763590d5e83b700e00be68c74407"
|
||||
},
|
||||
{
|
||||
"path": "README.md",
|
||||
"bytes": 2569,
|
||||
"sha256": "d72de7f45eba696ad5ba41c0d04ab1e4d58118d75bc352f919122cc377e46276"
|
||||
},
|
||||
{
|
||||
"path": "run-full-679.py",
|
||||
"bytes": 3672,
|
||||
"sha256": "dfa77a364be282f927302bbe78887bbfb789e6be3574a888c3efd59e55ba54e4"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
"""One root-authorized immutable Windows test run; no build or UI automation."""
|
||||
import datetime
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
root = Path.cwd()
|
||||
stage = root / '.local/contextual-source-layout-20260911/tests-final'
|
||||
output = root / '.local/contextual-source-layout-20260911/full-679'
|
||||
assert not output.exists(), 'Refuse to overwrite a full-run record'
|
||||
output.mkdir()
|
||||
binary = stage / 'arcadia-studio-tests.exe'
|
||||
expected = '75AB0E151D85473631D5A145527F3F6B9768A3CD61CE66A0603A574E09557017'
|
||||
digest = lambda p: hashlib.sha256(p.read_bytes()).hexdigest().upper()
|
||||
assert digest(binary) == expected, 'Wrong immutable executable'
|
||||
assert digest(stage / 'libunwind.dll') == 'F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4'
|
||||
env = dict(os.environ)
|
||||
system_root = next(v for k, v in env.items() if k.upper() == 'SYSTEMROOT')
|
||||
for key in list(env):
|
||||
if key.upper() in ('RUST_MIN_STACK', 'APPDATA', 'LOCALAPPDATA', 'TEMP', 'TMP', 'PATH'):
|
||||
del env[key]
|
||||
for key, relative in [('APPDATA', 'profile/roaming'), ('LOCALAPPDATA', 'profile/local'), ('TEMP', 'temp'), ('TMP', 'temp')]:
|
||||
path = output / relative
|
||||
path.mkdir(parents=True, exist_ok=True)
|
||||
env[key] = str(path)
|
||||
env['PATH'] = str(stage) + ';' + system_root + '\\System32;' + system_root
|
||||
inventory = subprocess.run([str(binary), '--list'], cwd=root, env=env, capture_output=True)
|
||||
(output / 'inventory.stdout.log').write_bytes(inventory.stdout)
|
||||
(output / 'inventory.stderr.log').write_bytes(inventory.stderr)
|
||||
names = [line for line in inventory.stdout.decode('utf-8').splitlines() if line.endswith(': test')]
|
||||
admission = {'checkedUtc': datetime.datetime.now(datetime.timezone.utc).isoformat(), 'executable': str(binary), 'sha256': digest(binary), 'bytes': binary.stat().st_size, 'runtimeSha256': digest(stage / 'libunwind.dll'), 'inventoryExitCode': inventory.returncode, 'tests': len(names), 'uniqueTests': len(set(names)), 'threadStack': 'ordinary Windows/Rust defaults; no RUST_MIN_STACK override', 'testThreads': 1, 'profileAndTemp': str(output), 'scope': 'Immutable full desktop tests only; no native or Linux acceptance'}
|
||||
(output / 'admission.json').write_text(json.dumps(admission, indent=2) + '\n', encoding='utf-8')
|
||||
assert inventory.returncode == 0 and len(names) == len(set(names)) == 679, 'Inventory mismatch; full run refused'
|
||||
started = datetime.datetime.now(datetime.timezone.utc).isoformat()
|
||||
print(json.dumps({'state': 'admitted', 'tests': 679, 'sha256': expected, 'started': started}), flush=True)
|
||||
tick = time.monotonic()
|
||||
with (output / 'full.stdout.log').open('xb') as stdout, (output / 'full.stderr.log').open('xb') as stderr:
|
||||
result = subprocess.run([str(binary), '--test-threads=1'], cwd=root, env=env, stdout=stdout, stderr=stderr)
|
||||
text = (output / 'full.stdout.log').read_text(encoding='utf-8')
|
||||
summary = re.search(r'test result: (\w+)\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out; finished in ([\d.]+)s', text)
|
||||
record = {'command': [str(binary), '--test-threads=1'], 'started': started, 'finished': datetime.datetime.now(datetime.timezone.utc).isoformat(), 'seconds': time.monotonic() - tick, 'exitCode': result.returncode, 'executableSha256': digest(binary), 'inputIdentityUnchanged': digest(binary) == expected, 'summary': summary.group(0) if summary else None}
|
||||
if summary:
|
||||
record.update(dict(zip(['passed', 'failed', 'ignored', 'measured', 'filtered'], map(int, summary.groups()[1:6]))))
|
||||
(output / 'full-result.json').write_text(json.dumps(record, indent=2) + '\n', encoding='utf-8')
|
||||
print(json.dumps(record), flush=True)
|
||||
raise SystemExit(result.returncode)
|
||||
@@ -0,0 +1,13 @@
|
||||
# Source-card postboot failure and reviewed correction
|
||||
|
||||
Codex-9e8r6t /root/release_audit, 2026-09-11. This is a bounded raw-evidence archive, separate from the earlier reboot archive and original GUI52 native evidence.
|
||||
|
||||
`focused3.log` and its status are an **actual terminal failure**, not a reboot interruption: Cargo exit 101, 25 passed / 1 failed / 653 filtered out in 0.35 seconds, following 2 minutes 13 seconds compilation. The command finished at 13:57:36 UTC, before the second reboot at 13:59:33 UTC. Only the fixture's requirement that the long parent paragraph itself exceed the field viewport failed. The strengthened fixture has not yet run at this archive checkpoint.
|
||||
|
||||
The failed source is bound by [inputs3](../contextual-source-layout-reboot-20260911/inputs3.json) and root's ca53f574 checkpoint. It is not duplicated here. `inputs4.json`, `input-delta.json`, `postboot2-input-check.json`, and the exact `source_draft.rs.snapshot` preserve the correction: of 238 input files, only source_draft.rs changed, in five test-only hunks. Production remained unchanged. The correction increases the authored long parent from 8 to 32 repetitions and observes real scroll-content bounds; it retains the same 340 by 215 host, real Paragraph, Name/all-kind/parent-first-line/footer/raw-state assertions and strict paragraph overflow condition. Additional scroll-content overflow and full-parent containment are required. Independent source readback closed without a material finding; see [review](../../release-contextual-source-layout-independent-20260911.md).
|
||||
|
||||
`run-gates4.ps1` and `stage-final.ps1` are prepared reproduction scripts, not execution evidence. Run from the repository root only after coordinating the Windows Cargo lease and restoring the designated local toolchain. The gate script serializes the affected contextual_source filter, strict desktop all-target Clippy, workspace formatting and matching GUI build; each writes fresh .local logs/statuses and refuses overwrites. Staging requires all terminal successes and unchanged input hashes, then copies the matching test/GUI executables and verified libunwind.dll into distinct local folders. No executables, rlibs, caches, credentials or 238-file source duplicate are included here. No full 679-test run, final GUI, Clippy or formatting pass is claimed by this archive.
|
||||
|
||||
`copy-provenance.json` lists the exact original paths, sizes and hashes of the seven copied raw records. `manifest.json` hashes every other file in this directory; it excludes itself. Raw copies retain original bytes, including CRLF and terminal log whitespace. Root must add the narrow attribute rule `harness/experiments/contextual-source-layout-postboot-20260911/** -text whitespace=-blank-at-eof,cr-at-eol` before committing, so Git does not normalize these measured bytes. The previous archive remains untouched.
|
||||
|
||||
The evolving execution/acceptance record is [the owned layout report](../../release-contextual-source-layout-review-20260911.md). Later gate results must be explicitly distinguished from this frozen pre-run checkpoint and original GUI52 acceptance.
|
||||
@@ -0,0 +1,44 @@
|
||||
[
|
||||
{
|
||||
"file": "focused3.log",
|
||||
"source": ".local/contextual-source-layout-20260911/focused3.log",
|
||||
"sha256": "0FDAC9E2999AD5225876D499BFAE075C786AE3A107B8E43D1A1ADCD8EA44530B",
|
||||
"bytes": 4469
|
||||
},
|
||||
{
|
||||
"file": "focused3-status.json",
|
||||
"source": ".local/contextual-source-layout-20260911/focused3-status.json",
|
||||
"sha256": "FCA1451CF134A395EFC2A3A2525FC1BE20353346EEEFFE0FA6C1AF7D97E039AF",
|
||||
"bytes": 295
|
||||
},
|
||||
{
|
||||
"file": "inputs4.json",
|
||||
"source": ".local/contextual-source-layout-20260911/inputs4.json",
|
||||
"sha256": "669724858967D83AB7DA5F78BFAFB6065E2BCAB3BAD0E68D0A74FEB86C7195E7",
|
||||
"bytes": 44198
|
||||
},
|
||||
{
|
||||
"file": "postboot2-input-check.json",
|
||||
"source": ".local/contextual-source-layout-20260911/postboot2-input-check.json",
|
||||
"sha256": "5C1C62C0EDC78BA5932BB674CDA7F81E63A2C1D5BE41B9CA65DD6B5B6DAB8091",
|
||||
"bytes": 371
|
||||
},
|
||||
{
|
||||
"file": "run-gates4.ps1",
|
||||
"source": ".local/contextual-source-layout-20260911/run-gates4.ps1",
|
||||
"sha256": "E0D0A80EB69F5AA2834D5F9D6598F1E37D33A4CA1E2C457C55A32021D12E1A5D",
|
||||
"bytes": 1263
|
||||
},
|
||||
{
|
||||
"file": "stage-final.ps1",
|
||||
"source": ".local/contextual-source-layout-20260911/stage-final.ps1",
|
||||
"sha256": "68D691FD045532FA7BCF1AD1AA8CFB891BB6000F2B1DC6FD1410E2563EA2700E",
|
||||
"bytes": 2683
|
||||
},
|
||||
{
|
||||
"file": "source_draft.rs.snapshot",
|
||||
"source": "crates/oa-desktop/src/behavior/source_draft.rs",
|
||||
"sha256": "85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C",
|
||||
"bytes": 39485
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"started": "2026-09-11T13:55:21.2269665Z",
|
||||
"finished": "2026-09-11T13:57:36.2607858Z",
|
||||
"exitCode": 101,
|
||||
"args": [
|
||||
"test",
|
||||
"--locked",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"contextual_source",
|
||||
"--",
|
||||
"--test-threads=1"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 2m 13s
|
||||
Running unittests src\main.rs (.local\target-gnullvm\debug\deps\arcadia_studio-58e30cee1fd51a8b.exe)
|
||||
|
||||
running 26 tests
|
||||
test behavior::contextual_source_tests::contextual_source_app_checkpoint_restores_inner_raw_draft_without_model_adoption ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_empty_actions_and_child_open_refuse_other_raw_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_app_modal_escape_then_child_back_then_parent_cancel_preserve_accepted_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_remains_available_after_owner_deletion_and_with_dirty_editors ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_back_retains_parent_and_rejects_late_child_event ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_default_consumer_name_has_stable_alias_and_correlated_selection ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_deleted_owner_view_retains_draft_instead_of_panicking_or_using_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_empty_history_reports_no_change_and_success_requires_a_real_history_step ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_existing_choice_prunes_staged_dependency ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_failed_source_budget_preserves_both_drafts_and_accepted_bytes ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_incomplete_recovered_kind_reports_error_without_panicking ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_inserts_work_on_the_exact_guarded_link_and_refuses_exchange_identity_conflict ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_lifelines_stage_exact_separate_records_and_one_history_entry ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_machine_before_any_owner_creates_optional_view_atomically ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_mounted_small_editor_keeps_back_and_use_outside_field_scroll ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_nested_semantic_parent_is_explicit_and_revalidated ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_new_callee_lifeline_preserves_caller_bindings_as_an_explicit_warning ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_old_empty_action_cannot_open_a_previous_owner_or_layer ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_original_document_remains_bound_after_back_or_choosing_existing ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_owner_first_can_return_to_an_unnamed_machine_without_losing_source ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_recovery_keeps_inner_raw_fields_and_refuses_deleted_or_changed_owner ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_second_system_and_role_machine_owner_refuse_without_fallback ... ok
|
||||
test behavior::contextual_source_tests::contextual_source_work_uses_reserved_contribution_and_link_ids_and_one_undo ... ok
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_initial_essentials_fit_short_composed_host_with_real_paragraphs ... ok
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data ... FAILED
|
||||
test behavior::source_draft::layout_tests::contextual_source_layout_visible_kind_click_keeps_choice_explicit_and_name_input_works ... ok
|
||||
|
||||
failures:
|
||||
|
||||
---- behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data stdout ----
|
||||
|
||||
thread 'behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data' (3960) panicked at crates\oa-desktop\src\behavior\source_draft.rs:933:9:
|
||||
Exercise genuinely overflowing parent text
|
||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||
|
||||
|
||||
failures:
|
||||
behavior::source_draft::layout_tests::contextual_source_layout_long_parent_wraps_after_visible_name_without_losing_raw_data
|
||||
|
||||
test result: FAILED. 25 passed; 1 failed; 0 ignored; 0 measured; 653 filtered out; finished in 0.35s
|
||||
|
||||
error: test failed, to rerun pass `-p oa-desktop --bin arcadia-studio`
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"previousManifest": "../contextual-source-layout-reboot-20260911/inputs3.json",
|
||||
"previousManifestSHA256": "6B3F3088FF18AF3899C3764B3F3671DA9240A5DE184D871BF08F8012456E556B",
|
||||
"currentManifest": "inputs4.json",
|
||||
"currentManifestSHA256": "669724858967D83AB7DA5F78BFAFB6065E2BCAB3BAD0E68D0A74FEB86C7195E7",
|
||||
"inputCount": 238,
|
||||
"unchangedCount": 237,
|
||||
"changed": [
|
||||
{
|
||||
"path": "crates/oa-desktop\\src\\behavior\\source_draft.rs",
|
||||
"before": {
|
||||
"path": "crates/oa-desktop\\src\\behavior\\source_draft.rs",
|
||||
"sha256": "C8D36BD6BCD0818AAD2FBBC404B29085F4ADCAF8191B95A04208A7C2346C36E0",
|
||||
"bytes": 38949
|
||||
},
|
||||
"after": {
|
||||
"path": "crates/oa-desktop\\src\\behavior\\source_draft.rs",
|
||||
"sha256": "85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C",
|
||||
"bytes": 39485
|
||||
}
|
||||
}
|
||||
],
|
||||
"scope": "Five test-only hunks; production identical. Independent source review closed; execution pending."
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"created": "2026-09-11T14:32:47.9340077Z",
|
||||
"scope": "Frozen postboot failure and independently reviewed test-only correction; next gates unexecuted",
|
||||
"inventoryExcludes": "manifest.json",
|
||||
"files": [
|
||||
{
|
||||
"file": "copy-provenance.json",
|
||||
"bytes": 1562,
|
||||
"sha256": "66D5A216EC7338FC77FD6DB6F90E25F259A8DA101BB6026A963217704B24DE91"
|
||||
},
|
||||
{
|
||||
"file": "focused3-status.json",
|
||||
"bytes": 295,
|
||||
"sha256": "FCA1451CF134A395EFC2A3A2525FC1BE20353346EEEFFE0FA6C1AF7D97E039AF"
|
||||
},
|
||||
{
|
||||
"file": "focused3.log",
|
||||
"bytes": 4469,
|
||||
"sha256": "0FDAC9E2999AD5225876D499BFAE075C786AE3A107B8E43D1A1ADCD8EA44530B"
|
||||
},
|
||||
{
|
||||
"file": "input-delta.json",
|
||||
"bytes": 1001,
|
||||
"sha256": "BE475C9CEEEFF5F2EEBA2995D4C9277CCD3E62ACFC2B69EC4F84AC88A9E5D588"
|
||||
},
|
||||
{
|
||||
"file": "inputs4.json",
|
||||
"bytes": 44198,
|
||||
"sha256": "669724858967D83AB7DA5F78BFAFB6065E2BCAB3BAD0E68D0A74FEB86C7195E7"
|
||||
},
|
||||
{
|
||||
"file": "postboot2-input-check.json",
|
||||
"bytes": 371,
|
||||
"sha256": "5C1C62C0EDC78BA5932BB674CDA7F81E63A2C1D5BE41B9CA65DD6B5B6DAB8091"
|
||||
},
|
||||
{
|
||||
"file": "README.md",
|
||||
"bytes": 3113,
|
||||
"sha256": "3A0EF96B2A96B91CD84AA929CD8E4B8EA3E8680A487C068ADBAF5B6FB30FB46D"
|
||||
},
|
||||
{
|
||||
"file": "run-gates4.ps1",
|
||||
"bytes": 1263,
|
||||
"sha256": "E0D0A80EB69F5AA2834D5F9D6598F1E37D33A4CA1E2C457C55A32021D12E1A5D"
|
||||
},
|
||||
{
|
||||
"file": "source_draft.rs.snapshot",
|
||||
"bytes": 39485,
|
||||
"sha256": "85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C"
|
||||
},
|
||||
{
|
||||
"file": "stage-final.ps1",
|
||||
"bytes": 2683,
|
||||
"sha256": "68D691FD045532FA7BCF1AD1AA8CFB891BB6000F2B1DC6FD1410E2563EA2700E"
|
||||
}
|
||||
]
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"timestamp": "2026-09-11T14:08:40.7056016Z",
|
||||
"unchangedInputCount": 237,
|
||||
"changedInputs": [
|
||||
"crates/oa-desktop\\src\\behavior\\source_draft.rs"
|
||||
],
|
||||
"sourceHash": "85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C",
|
||||
"compiler": "held pending root capacity release",
|
||||
"focused3": "actual terminal test failure, not interrupted"
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
. ./.local/toolchain/env.ps1
|
||||
$env:CARGO_BUILD_JOBS = '1'
|
||||
$evidenceRoot = Join-Path (Get-Location) '.local/contextual-source-layout-20260911'
|
||||
$gates = @(
|
||||
@{name='focused4'; args=@('test','--locked','-p','oa-desktop','--bin','arcadia-studio','contextual_source','--','--test-threads=1')},
|
||||
@{name='clippy1'; args=@('clippy','--locked','-p','oa-desktop','--all-targets','--','-D','warnings')},
|
||||
@{name='fmt1'; args=@('fmt','--all','--','--check')},
|
||||
@{name='gui1'; args=@('build','--locked','-p','oa-desktop','--bin','arcadia-studio')}
|
||||
)
|
||||
foreach ($gate in $gates) {
|
||||
$logPath = Join-Path $evidenceRoot ($gate.name + '.log')
|
||||
$statusPath = Join-Path $evidenceRoot ($gate.name + '-status.json')
|
||||
if ((Test-Path -LiteralPath $logPath) -or (Test-Path -LiteralPath $statusPath)) { throw "Refusing to overwrite $($gate.name)" }
|
||||
$started = [DateTime]::UtcNow.ToString('o')
|
||||
$gateArgs = $gate.args
|
||||
& cargo @gateArgs 2>&1 | Tee-Object -FilePath $logPath
|
||||
$gateExit = $LASTEXITCODE
|
||||
[ordered]@{started=$started;finished=[DateTime]::UtcNow.ToString('o');exitCode=$gateExit;args=$gateArgs} | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath $statusPath
|
||||
if ($gateExit -ne 0) { exit $gateExit }
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1034
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$evidenceRoot = Join-Path (Get-Location) '.local/contextual-source-layout-20260911'
|
||||
foreach ($gate in 'focused4','clippy1','fmt1','gui1') {
|
||||
$status = Get-Content -LiteralPath (Join-Path $evidenceRoot ($gate + '-status.json')) -Raw | ConvertFrom-Json
|
||||
if ($status.exitCode -ne 0) { throw "$gate has not passed" }
|
||||
}
|
||||
$inputs = Get-Content -LiteralPath (Join-Path $evidenceRoot 'inputs4.json') -Raw | ConvertFrom-Json
|
||||
foreach ($inputFile in $inputs.inputs) {
|
||||
if ((Get-FileHash -LiteralPath $inputFile.path -Algorithm SHA256).Hash -ne $inputFile.sha256) { throw "Input changed: $($inputFile.path)" }
|
||||
}
|
||||
$testLog = Get-Content -LiteralPath (Join-Path $evidenceRoot 'focused4.log') -Raw
|
||||
if ($testLog -notmatch 'Running unittests[^\r\n]+\(([^\r\n]+\.exe)\)') { throw 'No executed test binary in focused4 log' }
|
||||
$testPath = $Matches[1]
|
||||
$runtimePath = Join-Path (Get-Location) '.local/contextual-source-20260911/tests-verified/libunwind.dll'
|
||||
if ((Get-FileHash -LiteralPath $runtimePath -Algorithm SHA256).Hash -ne 'F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4') { throw 'Runtime hash mismatch' }
|
||||
$stages = @(
|
||||
@{directory='tests-final';source=$testPath;name='arcadia-studio-tests.exe';scope='Affected 26 contextual-source tests including three real-paragraph layout tests; no full 679 suite acceptance'},
|
||||
@{directory='gui-verified';source='.local/target-gnullvm/debug/arcadia-studio.exe';name='arcadia-studio.exe';scope='Final matching Windows GUI build, strictClippy and formatting passed; native acceptance pending root'}
|
||||
)
|
||||
foreach ($stage in $stages) {
|
||||
$destination = Join-Path $evidenceRoot $stage.directory
|
||||
if (Test-Path -LiteralPath $destination) { throw "Refusing to overwrite $destination" }
|
||||
New-Item -ItemType Directory -Path $destination | Out-Null
|
||||
Copy-Item -LiteralPath $stage.source -Destination (Join-Path $destination $stage.name)
|
||||
Copy-Item -LiteralPath $runtimePath -Destination (Join-Path $destination 'libunwind.dll')
|
||||
$artifacts = foreach ($filename in $stage.name,'libunwind.dll') {
|
||||
$item = Get-Item -LiteralPath (Join-Path $destination $filename)
|
||||
[ordered]@{file=$filename;sha256=(Get-FileHash -LiteralPath $item.FullName -Algorithm SHA256).Hash;bytes=$item.Length}
|
||||
}
|
||||
[ordered]@{created=[DateTime]::UtcNow.ToString('o');scope=$stage.scope;sourceInputs='../inputs4.json';predecessorGuiSha256='52DE82E434B636E18DB02D381842AA6DB84B721CFFD5502063F784F37246ACCE';artifacts=@($artifacts)} | ConvertTo-Json -Depth 6 | Set-Content -LiteralPath (Join-Path $destination 'manifest.json')
|
||||
Get-Content -LiteralPath (Join-Path $destination 'manifest.json') -Raw
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# Interrupted display-correction gate
|
||||
|
||||
Exact byte copies of all 13 top-level files in the private layout gate directory
|
||||
at the user's reboot pause. `manifest.json` records original sizes and SHA256.
|
||||
No executable or accepted new build exists. `focused1` failed before tests in two
|
||||
test helpers; the mechanical correction is in `inputs3.json`. `focused2` was
|
||||
interrupted with Ctrl+C before tests; its interruption record and process cleanup
|
||||
are authoritative. Later Clippy, formatting and GUI gates never launched.
|
||||
|
||||
Earlier snapshots and runner files are historical evidence. Resume with a new
|
||||
run label after checking frozen inputs; do not overwrite failed/interrupted logs.
|
||||
See ../../RESTART_HANDOFF.md and the layout implementation/independent reports.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user