@lazyingart/agintiflow 0.20.331 → 0.20.336-integration.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/bin/aginti-document-worker-runtime-check.js +12 -0
- package/bin/aginti-document-worker.js +10 -0
- package/bin/aginti-execution-worker.js +26 -0
- package/bin/aginti-integration-analysis-state.js +10 -0
- package/bin/aginti-integration-analysis.js +7 -0
- package/bin/aginti-public-research.js +1 -0
- package/bin/aginti-worker-directory.js +178 -0
- package/docs/integration-analysis-state-migration.md +47 -0
- package/docs/integration-deep-research.md +9 -0
- package/docs/integration-worker-directory.md +99 -0
- package/docs/labcanvas-chatops-fallback.md +139 -0
- package/docs/supervision-campaign-ledger.md +1851 -0
- package/examples/document-worker/README.md +84 -0
- package/examples/document-worker/aginti-document-worker.service +67 -0
- package/examples/document-worker/document-worker.json +12 -0
- package/examples/document-worker/runtime-manifest.json +28 -0
- package/package.json +89 -4
- package/scripts/fixtures/integration-document-worker-smoke-fixture.js +190 -0
- package/scripts/fixtures/loopback-test-port.mjs +16 -0
- package/scripts/github-hosted-release-environment.js +22 -0
- package/scripts/live-production-planner-smoke.js +70 -0
- package/scripts/smoke-canvas-artifacts.js +203 -0
- package/scripts/smoke-coding-tools.js +676 -1
- package/scripts/smoke-docker-command.js +24 -0
- package/scripts/smoke-dynamic-step-budget.js +1032 -27
- package/scripts/smoke-execution-runtime-bundle.js +248 -0
- package/scripts/smoke-execution-worker-server.js +138 -0
- package/scripts/smoke-execution-worker-systemd-boundary.js +545 -0
- package/scripts/smoke-execution-worker.js +791 -0
- package/scripts/smoke-integration-analysis-api-server.js +1038 -0
- package/scripts/smoke-integration-analysis-coordinator.js +1035 -0
- package/scripts/smoke-integration-analysis-planner.js +5366 -0
- package/scripts/smoke-integration-analysis-session-authority-contract.js +223 -0
- package/scripts/smoke-integration-analysis-session-service.js +4628 -0
- package/scripts/smoke-integration-analysis-startup-recovery.js +846 -0
- package/scripts/smoke-integration-analysis-state-migrator.js +765 -0
- package/scripts/smoke-integration-analysis-state-prewrite-gate.js +1170 -0
- package/scripts/smoke-integration-api.js +2275 -0
- package/scripts/smoke-integration-authorities.js +3338 -0
- package/scripts/smoke-integration-document-artifacts.js +431 -0
- package/scripts/smoke-integration-document-content.js +244 -0
- package/scripts/smoke-integration-document-revision.js +909 -0
- package/scripts/smoke-integration-document-session-broker.js +1374 -0
- package/scripts/smoke-integration-document-worker-contract.js +197 -0
- package/scripts/smoke-integration-document-worker-cross-boundary.js +209 -0
- package/scripts/smoke-integration-document-worker-longevity.js +257 -0
- package/scripts/smoke-integration-document-worker-real-compile.js +138 -0
- package/scripts/smoke-integration-document-worker-server.js +411 -0
- package/scripts/smoke-integration-document-worker-service.js +214 -0
- package/scripts/smoke-integration-document-worker-store.js +419 -0
- package/scripts/smoke-integration-document-worker-systemd-boundary.js +353 -0
- package/scripts/smoke-integration-execution-worker-binding-config.js +102 -0
- package/scripts/smoke-integration-grounded-search.js +1355 -0
- package/scripts/smoke-integration-sandbox-profile.js +982 -0
- package/scripts/smoke-integration-worker-directory-cli.js +37 -0
- package/scripts/smoke-integration-worker-directory.js +399 -0
- package/scripts/smoke-local-failure-recovery.js +28 -0
- package/scripts/smoke-math-rendering.js +2 -1
- package/scripts/smoke-model-roles.js +46 -0
- package/scripts/smoke-public-research-wrapper.js +11 -3
- package/scripts/smoke-runtime-compat.js +8 -1
- package/scripts/smoke-scs-evidence-visibility.js +65 -0
- package/scripts/smoke-session-runtime.js +28 -0
- package/scripts/smoke-skills.js +174 -0
- package/scripts/smoke-tmux-tools.js +26 -0
- package/scripts/smoke-toolchain-docker.js +18 -0
- package/scripts/smoke-truthful-completion.js +3547 -117
- package/scripts/smoke-web-api.js +11 -2
- package/scripts/smoke-web-ui.js +11 -2
- package/scripts/smoke-webapp-command.js +67 -25
- package/scripts/test-document-worker-fixture.js +426 -0
- package/skills/deep-research/SKILL.md +1 -0
- package/src/agent-runner.js +3552 -174
- package/src/config.js +11 -5
- package/src/docker-sandbox.js +51 -9
- package/src/execution-runtime-bundle.js +639 -0
- package/src/execution-worker-api.js +245 -0
- package/src/execution-worker-client.js +1017 -0
- package/src/execution-worker-jobs.js +399 -0
- package/src/execution-worker-server.js +239 -0
- package/src/execution-worker-systemd-boundary.js +654 -0
- package/src/execution-worker.js +1453 -0
- package/src/guardrails.js +8 -1
- package/src/integration-analysis-cli.js +255 -0
- package/src/integration-analysis-config.js +614 -0
- package/src/integration-analysis-coordinator.js +529 -0
- package/src/integration-analysis-planner.js +4647 -0
- package/src/integration-analysis-server.js +778 -0
- package/src/integration-analysis-session-contract.js +18 -0
- package/src/integration-analysis-session-service.js +8269 -0
- package/src/integration-analysis-state-migration-cli.js +366 -0
- package/src/integration-analysis-state-migrator.js +591 -0
- package/src/integration-analysis-state-persistence.js +17 -0
- package/src/integration-analysis-vision.js +1086 -0
- package/src/integration-api.js +1505 -38
- package/src/integration-artifacts.js +235 -7
- package/src/integration-auth.js +1 -1
- package/src/integration-core-event-projector.js +10 -0
- package/src/integration-document-artifacts.js +492 -0
- package/src/integration-document-blob-store.js +226 -0
- package/src/integration-document-worker-cli.js +186 -0
- package/src/integration-document-worker-client.js +1719 -0
- package/src/integration-document-worker-config.js +299 -0
- package/src/integration-document-worker-contract.js +790 -0
- package/src/integration-document-worker-requirements.js +119 -0
- package/src/integration-document-worker-runtime.js +199 -0
- package/src/integration-document-worker-server.js +565 -0
- package/src/integration-document-worker-service.js +448 -0
- package/src/integration-document-worker-store.js +1837 -0
- package/src/integration-durable-common.js +586 -68
- package/src/integration-events.js +12 -2
- package/src/integration-execution-worker-binding-config.js +223 -0
- package/src/integration-execution-worker-router.js +428 -0
- package/src/integration-explicit-python.js +247 -0
- package/src/integration-expression-plot.js +361 -0
- package/src/integration-file-worker-client.js +725 -0
- package/src/integration-file-worker-contract.js +559 -0
- package/src/integration-file-worker-store.js +1100 -0
- package/src/integration-grounded-search.js +2612 -0
- package/src/integration-idempotency-store.js +429 -10
- package/src/integration-policy.js +242 -8
- package/src/integration-tex-compiler.js +654 -0
- package/src/integration-worker-directory.js +1015 -0
- package/src/json-extraction.js +66 -0
- package/src/model-client.js +293 -2
- package/src/perception-tools.js +3 -63
- package/src/permission-advice.js +152 -3
- package/src/public-research-server.js +1 -1
- package/src/response-only-source-quality.js +356 -0
- package/src/scs-controller.js +37 -1
- package/src/scs-evidence.js +516 -32
- package/src/session-runtime.js +8 -0
- package/src/skill-library.js +81 -5
- package/src/step-budget-controller.js +175 -18
- package/src/tmux-tools.js +10 -1
- package/src/web-query-privacy.js +44 -0
- package/src/web-search.js +11 -0
- package/src/workspace-tools.js +92 -1
|
@@ -740,3 +740,1854 @@ startup/send/mutation shell commands blocked by the existing permission policy.
|
|
|
740
740
|
The focused persisted-runtime regression verifies both exact aliases and the
|
|
741
741
|
negative mutating command case; the tmux guardrail, progressive-tool,
|
|
742
742
|
provider-handoff, syntax, package-audit, dry-pack, and full npm suites pass.
|
|
743
|
+
|
|
744
|
+
### Model-safe Docker failure evidence
|
|
745
|
+
|
|
746
|
+
`labcanvas-model-safe-docker-failure-100` was derived from retained production
|
|
747
|
+
session `web-agent-labcanvas-968d0e66-a494-40fd-b2f7-0290c687a4ea`. DeepSeek
|
|
748
|
+
first failed with `402 Insufficient Balance`, then the same session resumed on
|
|
749
|
+
LocalLLM and preserved its goal, plan, artifact paths, and tool evidence. The
|
|
750
|
+
local context guard also behaved correctly: each oversized request was reduced
|
|
751
|
+
from roughly 26K-57K message tokens to 8K-12K before retry. Context compaction
|
|
752
|
+
was therefore not the defect.
|
|
753
|
+
|
|
754
|
+
The actual failure boundary was a sandboxed LaTeX command that exited nonzero
|
|
755
|
+
without writing native stderr. Node's raw child-process exception embedded the
|
|
756
|
+
complete internal `docker run` invocation, mounts, environment setup, and
|
|
757
|
+
wrapped shell in the model-visible `run_command` result. LocalLLM copied that
|
|
758
|
+
runtime implementation detail into its next tool call, where the secret-path
|
|
759
|
+
guard correctly blocked it and stopped the otherwise recoverable document run.
|
|
760
|
+
|
|
761
|
+
AgInTiFlow now normalizes only failed sandbox command exceptions at the Docker
|
|
762
|
+
boundary. The model and public event stream retain the real exit code, command
|
|
763
|
+
stdout, native stderr when present, and a concise fallback when stderr is
|
|
764
|
+
empty; they no longer receive the Docker wrapper. The raw redacted exception
|
|
765
|
+
remains available only in the bounded private sandbox diagnostic ring. This
|
|
766
|
+
keeps audit evidence useful while preventing smaller fallback models from
|
|
767
|
+
replaying container internals as user commands.
|
|
768
|
+
|
|
769
|
+
Deterministic regressions cover empty-stderr and compiler-stderr failures. A
|
|
770
|
+
real toolchain-container check confirms that a failing command reports exit
|
|
771
|
+
code `1` without exposing `docker run`, sandbox environment variables, or
|
|
772
|
+
internal mount paths. Syntax, LocalLLM nested failure recovery, DeepSeek to
|
|
773
|
+
LocalLLM provider handoff, coding tools, Docker command, and Docker toolchain
|
|
774
|
+
checks pass.
|
|
775
|
+
|
|
776
|
+
### Response-only router JSON is not a forecast
|
|
777
|
+
|
|
778
|
+
`labcanvas-response-router-project-label-101` came from retained production
|
|
779
|
+
session `web-agent-labcanvas-a5159676-c87c-4aad-b1a6-3ef3cd7cf8c1`. The task
|
|
780
|
+
was a response-only LabCanvas route classification for two WeChat article
|
|
781
|
+
cards. DeepSeek failed before inference with `402 Insufficient Balance`, and
|
|
782
|
+
LocalLLM returned a structurally valid routing JSON object. AgInTiFlow then
|
|
783
|
+
rejected it as an unsupported forecast because the source-free claim matcher
|
|
784
|
+
treated the ordinary JSON key-value pair `"project": "labcanvas"` as the verb
|
|
785
|
+
"project" in a prediction. Its bounded repair received another valid project
|
|
786
|
+
label and failed closed, suppressing the worker route entirely.
|
|
787
|
+
|
|
788
|
+
The forecast matcher now excludes the bare ambiguous noun `project` while
|
|
789
|
+
continuing to detect `projects`, `projected`, `projection`, predictions,
|
|
790
|
+
forecasts, expected growth, CAGR, and the existing Chinese and Japanese
|
|
791
|
+
forecast forms. This also prevents ordinary prose such as "the project" from
|
|
792
|
+
being mislabeled without weakening actual projection checks.
|
|
793
|
+
|
|
794
|
+
The matcher regression uses the production-shaped router JSON and a positive
|
|
795
|
+
unsupported forecast sentence. The end-to-end provider-handoff regression
|
|
796
|
+
forces DeepSeek `402`, returns the router JSON from LocalLLM, and verifies that
|
|
797
|
+
the exact JSON finishes unchanged after one fallback request with no
|
|
798
|
+
`response_only.source_free_claim_rejected` event. Truthful-completion,
|
|
799
|
+
provider-handoff, and syntax checks pass.
|
|
800
|
+
|
|
801
|
+
### Host-owned document compilation remains outside the fallback model
|
|
802
|
+
|
|
803
|
+
`labcanvas-host-document-handoff-102` came from retained production session
|
|
804
|
+
`web-agent-labcanvas-e654a5b9-6486-4718-b8fd-c76f1c05626e`. Its task packet
|
|
805
|
+
required AgInTi to revise a task-local Markdown or TeX source and explicitly
|
|
806
|
+
forbade compiler invocation because the LabCanvas host would compile and
|
|
807
|
+
revalidate the PDF in the same completion cycle. The narrowed evidence scope
|
|
808
|
+
still contained the earlier user-facing PDF request, however, so AgInTi's
|
|
809
|
+
generic completion contract discarded the later host-ownership directive and
|
|
810
|
+
continued to require a PDF from the fallback model.
|
|
811
|
+
|
|
812
|
+
After writing the report source, LocalLLM could not pass the contradictory
|
|
813
|
+
completion gate. It repeatedly sent the same Markdown file to canvas through
|
|
814
|
+
58 steps instead of returning control to the host compiler. The retained trace
|
|
815
|
+
therefore demonstrated a contract-layer defect rather than missing research,
|
|
816
|
+
context loss, or a need to weaken evidence checks.
|
|
817
|
+
|
|
818
|
+
Host compilation ownership is now derived from the complete runtime contract,
|
|
819
|
+
while factual source and artifact scope remain narrowed to the exact task. An
|
|
820
|
+
unconditional paired contract that prohibits agent-side compilers and assigns
|
|
821
|
+
build/validation to the host removes PDF from the agent-owned deliverables and
|
|
822
|
+
requires one fresh reader-facing Markdown or TeX source instead. Conditional
|
|
823
|
+
fallback wording still leaves ordinary PDF production agent-owned. A declared
|
|
824
|
+
artifact root is now an exclusive evidence boundary, and private routine
|
|
825
|
+
contracts or delivery notes cannot impersonate the reader-facing source.
|
|
826
|
+
|
|
827
|
+
The production-shaped regression proves that the explicit host directive
|
|
828
|
+
survives `AGINTI_EVIDENCE_SCOPE_JSON`, a private routine note is insufficient,
|
|
829
|
+
a real scoped report source satisfies the handoff, and ordinary or conditional
|
|
830
|
+
PDF workflows retain their existing contracts.
|
|
831
|
+
|
|
832
|
+
### Unchanged canvas artifacts are delivered once per goal revision
|
|
833
|
+
|
|
834
|
+
`labcanvas-canvas-delivery-idempotency-103` follows the same retained LabCanvas
|
|
835
|
+
session, `web-agent-labcanvas-e654a5b9-6486-4718-b8fd-c76f1c05626e`, after the
|
|
836
|
+
host-compilation contract defect had pushed LocalLLM into a weak convergence
|
|
837
|
+
loop. The event ledger contains 52 successful `send_to_canvas` calls and 52
|
|
838
|
+
`canvas.item` events for the exact same task-local `report.md`, with no finish
|
|
839
|
+
event. Cosmetic title changes generated another durable artifact copy and were
|
|
840
|
+
credited as progress, so the ordinary no-progress guard could never converge.
|
|
841
|
+
|
|
842
|
+
Canvas dispatch now keeps a bounded revision-scoped delivery ledger. Its
|
|
843
|
+
identity includes the normalized workspace path, file bytes and SHA-256,
|
|
844
|
+
renderer kind, and selection intent; inline artifacts use their content hash.
|
|
845
|
+
Changing a title or note cannot resend an unchanged artifact. A duplicate
|
|
846
|
+
returns a successful skipped result that points the model toward `finish`, emits
|
|
847
|
+
one diagnostic suppression event, creates no copied artifact, and does not
|
|
848
|
+
advance the stagnation epoch. A changed file remains deliverable because its
|
|
849
|
+
content fingerprint changes, and a later user goal revision gets an independent
|
|
850
|
+
delivery scope.
|
|
851
|
+
|
|
852
|
+
The end-to-end scripted model regression reads and delivers one report, retries
|
|
853
|
+
the same bytes under a different title, receives the completion redirect, then
|
|
854
|
+
observes a host-side file revision and successfully delivers those new bytes.
|
|
855
|
+
It asserts two substantive canvas items, one suppression, two persisted files,
|
|
856
|
+
and no false progress credit for the duplicate.
|
|
857
|
+
|
|
858
|
+
### Local context recovery retains its successful output lane
|
|
859
|
+
|
|
860
|
+
`labcanvas-local-context-output-adaptation-104` was derived from retained
|
|
861
|
+
production sessions rather than a synthetic large-prompt guess. Session
|
|
862
|
+
`web-agent-labcanvas-e654a5b9-6486-4718-b8fd-c76f1c05626e` recorded 56
|
|
863
|
+
`model.local_context_budget_exceeded` events in 58 steps, while the longer
|
|
864
|
+
`web-agent-labcanvas-3ff222ef-af1c-4301-8799-4c6ca71368d2` history recorded 183
|
|
865
|
+
such events across 291 requests. Each retry could compact successfully, but the
|
|
866
|
+
next turn restored the implicit 8192-token output reserve and rediscovered the
|
|
867
|
+
same envelope limit.
|
|
868
|
+
|
|
869
|
+
AgInTiFlow now records whether `maxOutputTokens` came from an operator or from
|
|
870
|
+
the LocalLLM default. After an implicit-cap context overflow, the successful
|
|
871
|
+
4096-token retry lane is retained in private session state and reused by later
|
|
872
|
+
agent steps and response-only continuations with the same context window. The
|
|
873
|
+
saved runtime configuration remains unchanged, hosted providers are unaffected,
|
|
874
|
+
and an explicit operator cap remains authoritative.
|
|
875
|
+
|
|
876
|
+
The regressions cover a context overflow followed by a nested timeout and model
|
|
877
|
+
route change, all subsequent full-agent requests, an explicit 8192-token cap,
|
|
878
|
+
and a second response-only continuation whose near-limit history would overflow
|
|
879
|
+
again without the retained lane. The second continuation makes one bounded
|
|
880
|
+
request and the event ledger remains at one context-overflow recovery. The full
|
|
881
|
+
`npm test` gate passes.
|
|
882
|
+
|
|
883
|
+
### Explicit response-only JSON contracts are checked before completion
|
|
884
|
+
|
|
885
|
+
`labcanvas-response-only-json-contract-105` comes from retained production
|
|
886
|
+
session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`. After a
|
|
887
|
+
DeepSeek `402` handoff, a completion-auditor turn explicitly required an object
|
|
888
|
+
with `covered_item_ids`, `missing`, `legitimate_blocker`, `complexity`, and
|
|
889
|
+
`summary`. LocalLLM instead copied the nested candidate object with `message`,
|
|
890
|
+
`confirmation`, and artifact fields. It was valid nonempty JSON and made no
|
|
891
|
+
unsupported factual claim, so the response-only lane incorrectly recorded a
|
|
892
|
+
successful finish.
|
|
893
|
+
|
|
894
|
+
Response-only execution now derives a shallow contract only when the
|
|
895
|
+
authoritative prompt contains an explicit `Return JSON ...:` instruction
|
|
896
|
+
followed by a valid object example. It requires one parseable JSON object with
|
|
897
|
+
the example's top-level keys and value types. It does not infer schemas from
|
|
898
|
+
ordinary prose, hard-code LabCanvas fields, or inspect arbitrary nested task
|
|
899
|
+
payloads. A mismatch receives one bounded repair instruction naming only the
|
|
900
|
+
expected key types. A second mismatch stops without `session.finished`, so the
|
|
901
|
+
host can retain and retry the task instead of accepting the wrong protocol.
|
|
902
|
+
|
|
903
|
+
The provider-handoff regression reproduces the wrong nested candidate object,
|
|
904
|
+
repairs it to the outer audit contract, and separately proves the fail-closed
|
|
905
|
+
path. Existing plain-text, router, source-free-claim, and context-recovery
|
|
906
|
+
response-only paths remain covered.
|
|
907
|
+
|
|
908
|
+
### Requested falsifiable predictions remain useful without becoming evidence
|
|
909
|
+
|
|
910
|
+
`labcanvas-source-free-falsifiable-prediction-106` comes from retained
|
|
911
|
+
production session `web-agent-labcanvas-acfafa25-d3c5-4a4e-9e12-1813973211a2`.
|
|
912
|
+
The response-only LabAgent prompt explicitly requested one evidence-aware
|
|
913
|
+
inspiration point, an actionable experiment, and clearly falsifiable 3-, 5-,
|
|
914
|
+
and 10-year predictions. It did not ask the fallback model to claim a source or
|
|
915
|
+
present the predictions as established facts. After the DeepSeek quota
|
|
916
|
+
handoff, however, the source-free claim guard rejected every LocalLLM answer
|
|
917
|
+
that contained a forecast. Bounded repair eventually removed the useful task
|
|
918
|
+
content and returned unrelated generic career advice.
|
|
919
|
+
|
|
920
|
+
When the authoritative request explicitly asks for it, source-free
|
|
921
|
+
response-only execution now distinguishes an assistant's own clearly labeled
|
|
922
|
+
hypothesis or prediction from a forecast attributed to a
|
|
923
|
+
report, paper, study, source, company, or authority. The exception remains
|
|
924
|
+
narrow: a speculation label cannot legalize claimed validation, external
|
|
925
|
+
evidence, citations, publications, benchmarks, or asserted quantitative
|
|
926
|
+
results. The repair prompt explains the same boundary in multilingual terms
|
|
927
|
+
instead of prohibiting all forecasts even when the authoritative task requires
|
|
928
|
+
one. An unsolicited model-added prediction remains rejected.
|
|
929
|
+
|
|
930
|
+
Regressions cover English guidance, Chinese and Japanese falsifiable
|
|
931
|
+
predictions, attributed Chinese forecasts, and a prediction label that attempts
|
|
932
|
+
to conceal unsupported validation and accuracy claims. The production-shaped
|
|
933
|
+
provider handoff forces DeepSeek `402`, accepts the requested LocalLLM
|
|
934
|
+
prediction in one fallback request, emits no source-free rejection, and records
|
|
935
|
+
one terminal finish.
|
|
936
|
+
|
|
937
|
+
### Internal recovery scaffolding cannot become the task answer
|
|
938
|
+
|
|
939
|
+
`labcanvas-internal-runtime-scaffold-leak-107` comes from retained production
|
|
940
|
+
session `web-agent-labcanvas-b94e75e1-5441-402c-b299-e8b527f386cf`. The task
|
|
941
|
+
was a current LabAgent research briefing with reader-facing artifacts. DeepSeek
|
|
942
|
+
failed before inference with `402 Insufficient Balance`; the LocalLLM request
|
|
943
|
+
then exceeded its context envelope and AgInTi compacted the history from about
|
|
944
|
+
71,000 to 13,800 message characters. Instead of continuing the briefing, the
|
|
945
|
+
fallback model copied the private recovery packet into its answer: it discussed
|
|
946
|
+
runtime compaction, repeated the AgInTi identity instruction, claimed that the
|
|
947
|
+
original request was truncated, and asserted that acceptance criteria were
|
|
948
|
+
satisfied. Because the task had not yet produced tool evidence, this internal
|
|
949
|
+
narrative was nevertheless accepted as `session.finished`.
|
|
950
|
+
|
|
951
|
+
Completion now checks a candidate against the actual runtime-generated
|
|
952
|
+
compaction or constrained-recovery packets retained in that session. It rejects
|
|
953
|
+
only high-confidence copying: at least two distinctive narrative markers, one
|
|
954
|
+
narrative marker plus a private section heading, or three private headings. A
|
|
955
|
+
normal answer after compaction is unaffected, and an explicit user request to
|
|
956
|
+
explain or audit context-recovery behavior remains allowed. English, Chinese,
|
|
957
|
+
and Japanese marker forms are covered without treating generic words such as
|
|
958
|
+
`runtime`, `context`, or `plan` as failures.
|
|
959
|
+
|
|
960
|
+
The first copied answer is removed from active conversation state and receives
|
|
961
|
+
one goal-revision-scoped repair directing the model back to the real task. A
|
|
962
|
+
second copied answer stops truthfully without a terminal finish, preserving the
|
|
963
|
+
session for another provider. The production-shaped regression forces proactive
|
|
964
|
+
compaction, proves recovery to the exact user-facing answer on the next model
|
|
965
|
+
turn, and separately proves the repeated-leak fail-closed path. Truthful
|
|
966
|
+
completion, context-budget recovery, provider handoff, syntax checks, and the
|
|
967
|
+
full test gate pass.
|
|
968
|
+
|
|
969
|
+
### Unsupported blocker narratives cannot close completed-looking runs
|
|
970
|
+
|
|
971
|
+
`labcanvas-unsupported-blocker-completion-108` comes from retained production
|
|
972
|
+
session `web-agent-labcanvas-57d7e9c5-8f7c-475b-acbd-b8cf70427d80`. The exact
|
|
973
|
+
LabCanvas repair request named its authoritative task artifact directory and
|
|
974
|
+
required a material source revision, rebuilt and inspected replacement PDF,
|
|
975
|
+
and concise result. After DeepSeek failed before inference with `402
|
|
976
|
+
Insufficient Balance`, LocalLLM listed the exact directory and read its routine
|
|
977
|
+
contract. It then claimed that no source file or revision instruction had been
|
|
978
|
+
provided and asked the user to provide them. No permission, dependency,
|
|
979
|
+
authentication, quota, or tool blocker existed, but the completion gate
|
|
980
|
+
accepted that invented limitation as `session.finished` once unrelated runtime
|
|
981
|
+
evidence made the underlying evidence assessment look complete.
|
|
982
|
+
|
|
983
|
+
Completion now classifies blocker language before the ordinary success return.
|
|
984
|
+
A candidate that says the task cannot proceed is accepted only when the current
|
|
985
|
+
evidence ledger contains a matching real blocker and project, source, and
|
|
986
|
+
artifact quality gates permit that blocker to close the run. Otherwise it
|
|
987
|
+
enters the existing bounded evidence-repair path with an explicit unsupported-
|
|
988
|
+
blocker reason. The model gets one progress-sensitive chance to use the enabled
|
|
989
|
+
tools or return the actual verified result; a repeated unsupported blocker
|
|
990
|
+
stops without a false terminal finish.
|
|
991
|
+
|
|
992
|
+
The end-to-end regression first satisfies a shell execution contract, then
|
|
993
|
+
proposes an unrelated missing-file blocker, verifies that the blocker is
|
|
994
|
+
rejected, and accepts the repaired evidence-grounded answer exactly once. The
|
|
995
|
+
existing positive control still accepts a genuinely evidenced missing command.
|
|
996
|
+
Syntax checks, truthful-completion tests, provider handoff, and the full package
|
|
997
|
+
gate pass.
|
|
998
|
+
|
|
999
|
+
### Revision and rebuild wording requires fresh artifact evidence
|
|
1000
|
+
|
|
1001
|
+
`labcanvas-scoped-artifact-revision-verbs-109` comes from retained production
|
|
1002
|
+
session `web-agent-labcanvas-84d3ca00-7abe-4f4b-8b9e-51a7bf79122f`. Its exact
|
|
1003
|
+
repair contract required AgInTi to materially revise a source inside the named
|
|
1004
|
+
task directory, rebuild and inspect a replacement PDF, and return the verified
|
|
1005
|
+
new PDF instead of the unchanged artifact. After the hosted provider failed
|
|
1006
|
+
before inference, LocalLLM listed the directory, read the existing Markdown,
|
|
1007
|
+
evidence manifest, and routine contract, then sent the pre-existing Markdown
|
|
1008
|
+
and PDF to canvas. It performed no file mutation, rebuild, or replacement
|
|
1009
|
+
inspection, but the run finished because the mutation classifier did not treat
|
|
1010
|
+
`revise` or `rebuild` as workspace mutation verbs.
|
|
1011
|
+
|
|
1012
|
+
The generic mutation contract now recognizes `revise`, `rebuild`, and
|
|
1013
|
+
`regenerate`, including their Chinese equivalents, anywhere the existing
|
|
1014
|
+
mutation classifier already accepts repair, rewrite, and update language. This
|
|
1015
|
+
does not infer a file mutation from artifact delivery alone: a file, source,
|
|
1016
|
+
document, path, workspace, or explicit filename signal is still required by
|
|
1017
|
+
the existing second-stage classifier. Message-only corrections and read-only
|
|
1018
|
+
reviews therefore keep their prior behavior.
|
|
1019
|
+
|
|
1020
|
+
The production-shaped regression uses the exact retained wording and artifact
|
|
1021
|
+
scope. It proves that the request is a scoped artifact operation, requires a
|
|
1022
|
+
fresh file mutation after the request boundary, and still requires a PDF. The
|
|
1023
|
+
same retained production goal now derives file plus artifact evidence instead
|
|
1024
|
+
of artifact delivery alone, so unchanged prior files cannot satisfy it.
|
|
1025
|
+
Scoped-artifact, progressive-tool, syntax, and full package tests pass.
|
|
1026
|
+
|
|
1027
|
+
### Project nouns do not trigger source-free forecast repair
|
|
1028
|
+
|
|
1029
|
+
`labcanvas-project-noun-forecast-false-positive-110` comes from retained
|
|
1030
|
+
production session `web-agent-labcanvas-acfafa25-d3c5-4a4e-9e12-1813973211a2`.
|
|
1031
|
+
The authoritative scheduled-inspiration request required one concise message
|
|
1032
|
+
aligned to the exact group's organoid and interdisciplinary research interests.
|
|
1033
|
+
After DeepSeek failed before inference with `402 Insufficient Balance`, the
|
|
1034
|
+
LocalLLM returned the harmless invitation `Share your latest project ideas`.
|
|
1035
|
+
The source-free claim guard interpreted the noun `project` as the verb
|
|
1036
|
+
`project`, rejected it as an unsupported forecast, and requested a correction.
|
|
1037
|
+
That unnecessary repair lost the subject: the replacement became generic
|
|
1038
|
+
career advice and exposed the unrelated internal schedule id `memo_daily`.
|
|
1039
|
+
|
|
1040
|
+
Forecast detection no longer treats bare `project` as a prediction. It still
|
|
1041
|
+
detects the unambiguous forms `projected` and `projection`, and detects
|
|
1042
|
+
`projects` when a report, study, source, model, forecast, analysis, or analyst
|
|
1043
|
+
is its subject. The change is confined to source-free response validation; it
|
|
1044
|
+
does not weaken publication, validation, citation, year, benchmark, metric, or
|
|
1045
|
+
multilingual forecast checks.
|
|
1046
|
+
|
|
1047
|
+
The regression uses the exact retained invitation and proves it passes without
|
|
1048
|
+
a repair. A negative control proves that `The market analysis projects that
|
|
1049
|
+
demand will grow next year` remains rejected. Truthful-completion and syntax
|
|
1050
|
+
checks pass before the full package gate.
|
|
1051
|
+
|
|
1052
|
+
### Response-only repairs preserve the output contract
|
|
1053
|
+
|
|
1054
|
+
`labcanvas-response-only-repair-contract-111` is derived from retained
|
|
1055
|
+
production session `web-agent-labcanvas-21296064-9835-461b-8179-5c8cf5f367a2`.
|
|
1056
|
+
The authoritative WeCom router request required a strict multi-field JSON
|
|
1057
|
+
object. A source-free factual answer triggered the evidence repair path, whose
|
|
1058
|
+
replacement returned only `response` and internal routing narration. The JSON
|
|
1059
|
+
contract validator was added after that production event, but a validation-
|
|
1060
|
+
order gap remained: it checked the first answer before source-free repair and
|
|
1061
|
+
did not check the replacement afterward. A schema-valid first answer could
|
|
1062
|
+
therefore still finish with a schema-invalid correction.
|
|
1063
|
+
|
|
1064
|
+
The source-free repair instruction now repeats the exact required top-level key
|
|
1065
|
+
types when an explicit JSON contract exists. Its replacement passes the same
|
|
1066
|
+
contract validator before the repair is accepted or `session.finished` is
|
|
1067
|
+
recorded. A replacement that drops keys stops through the existing output-
|
|
1068
|
+
contract failure path; it does not get an additional model turn. This keeps the
|
|
1069
|
+
repair bounded while preventing one validator from undoing another validator's
|
|
1070
|
+
guarantee.
|
|
1071
|
+
|
|
1072
|
+
The provider-handoff regression forces DeepSeek quota failure, supplies an
|
|
1073
|
+
initial schema-valid but unsupported factual claim, and then exercises both
|
|
1074
|
+
LocalLLM outcomes. Dropping `files` and `confirmation` fails closed with no
|
|
1075
|
+
terminal finish; preserving all three fields completes once. Provider handoff,
|
|
1076
|
+
source-free evidence, JSON repair, and syntax checks pass before the full
|
|
1077
|
+
package gate.
|
|
1078
|
+
|
|
1079
|
+
### Negated cleanup policy does not become deletion authorization
|
|
1080
|
+
|
|
1081
|
+
`labcanvas-prebuild-cleanup-auto-recovery-112` comes from retained production
|
|
1082
|
+
session `web-agent-labcanvas-c8410880-dc6a-420d-9270-9712f158d3ea`. The exact
|
|
1083
|
+
document-revision packet explicitly said never to bundle `rm`, delete, clean,
|
|
1084
|
+
reset, or scratch cleanup into a build. After making substantive report
|
|
1085
|
+
progress, the fallback model nevertheless attempted to remove the prior PDF
|
|
1086
|
+
and TeX sidecars before rebuilding. The destructive guard correctly blocked
|
|
1087
|
+
the command, but the permission adviser interpreted the words `delete` and
|
|
1088
|
+
`clean` in that negative safety rule as user authorization. It therefore
|
|
1089
|
+
paused the entire task for destructive approval instead of leaving the files
|
|
1090
|
+
in place and continuing safely.
|
|
1091
|
+
|
|
1092
|
+
Deletion-intent parsing now removes bounded policy clauses such as `never
|
|
1093
|
+
bundle ... delete ... into a build command` before looking for affirmative
|
|
1094
|
+
deletion requests. The shell command remains blocked. When no independent
|
|
1095
|
+
deletion request exists, the existing non-destructive recovery tells the model
|
|
1096
|
+
to retain all files and continue the substantive work without approval. A
|
|
1097
|
+
separate affirmative request such as `Delete the obsolete PDF` still requires
|
|
1098
|
+
the normal destructive permission path.
|
|
1099
|
+
|
|
1100
|
+
The production-shaped regression uses the retained absolute report paths and
|
|
1101
|
+
the same negated cleanup sentence. It proves the blocked cleanup no longer
|
|
1102
|
+
pauses, while an explicit deletion sentence in the same goal is not erased.
|
|
1103
|
+
Coding-tool and syntax checks pass before the full package gate.
|
|
1104
|
+
|
|
1105
|
+
### Runtime echoes cannot authorize generic artifact names
|
|
1106
|
+
|
|
1107
|
+
`labcanvas-generic-artifact-echo-bypass-113` is also derived from retained
|
|
1108
|
+
production session `web-agent-labcanvas-23dfa04f-cef4-4d48-a99e-b152eacf4a99`.
|
|
1109
|
+
The document task asked for a recognizable reader-facing report. A first write
|
|
1110
|
+
to generic `report.tex` was correctly blocked with a descriptive-name repair.
|
|
1111
|
+
After local-context compaction, the synthetic runtime message repeated the
|
|
1112
|
+
blocked path. The filename guard searched recent messages whose transport role
|
|
1113
|
+
was `user`, mistook that runtime echo for a human filename request, and allowed
|
|
1114
|
+
the same `report.tex` write on the next turn.
|
|
1115
|
+
|
|
1116
|
+
Generic-filename authorization now comes only from the active goal contract
|
|
1117
|
+
and configured goal. Synthetic compaction, loop-guard, permission, and tool
|
|
1118
|
+
feedback can still guide the model but cannot silently broaden the user's
|
|
1119
|
+
artifact naming contract. Exact filenames in the current request remain
|
|
1120
|
+
allowed, as do paths declared by the task contract and edits to an existing
|
|
1121
|
+
file.
|
|
1122
|
+
|
|
1123
|
+
The regression supplies a production-shaped synthetic `role=user` recovery
|
|
1124
|
+
message containing `output/task/report.tex` and proves the new file remains
|
|
1125
|
+
blocked. Its positive control puts the same exact path in the active request
|
|
1126
|
+
and proves it is accepted. Coding-tool and syntax checks pass before the full
|
|
1127
|
+
package gate.
|
|
1128
|
+
|
|
1129
|
+
### Explicit JSON schema headings are completion contracts
|
|
1130
|
+
|
|
1131
|
+
`labcanvas-explicit-json-schema-contract-114` comes from retained production
|
|
1132
|
+
session `web-agent-labcanvas-f61239a5-db5e-42ff-94e2-1f4a1d5a4b2c`. Its route
|
|
1133
|
+
request said `Return only JSON`, declared the allowed `route_kind` values, and
|
|
1134
|
+
then supplied a thirteen-field object under `JSON schema:`. One fallback turn
|
|
1135
|
+
returned an unrelated object with `classification`, `request_type`, `context`,
|
|
1136
|
+
`status`, and `required_action`; a later turn returned only `route_kind`. Both
|
|
1137
|
+
were valid JSON, so the runtime recorded each as finished even though neither
|
|
1138
|
+
matched the explicit response envelope.
|
|
1139
|
+
|
|
1140
|
+
Response-only contract discovery now recognizes explicit `JSON schema`,
|
|
1141
|
+
`JSON shape`, and `JSON format` headings, including `required` and `expected`
|
|
1142
|
+
variants, in addition to the existing inline `Return JSON:` form. It derives
|
|
1143
|
+
only the declared top-level keys and value types, then uses the existing single
|
|
1144
|
+
bounded repair and fail-closed path. This remains domain-independent and does
|
|
1145
|
+
not infer a schema from incidental JSON examples elsewhere in the prompt.
|
|
1146
|
+
|
|
1147
|
+
The production-shaped regression forces DeepSeek quota failure, returns a
|
|
1148
|
+
one-key route object from the LocalLLM double, and proves that it cannot finish
|
|
1149
|
+
until the missing schema fields are repaired. The focused provider-handoff
|
|
1150
|
+
test, syntax checks, and full package suite pass without real LocalLLM
|
|
1151
|
+
inference or changes to LabCanvas routing.
|
|
1152
|
+
|
|
1153
|
+
### Explicit JSON enums are completion contracts
|
|
1154
|
+
|
|
1155
|
+
`labcanvas-response-json-enum-contract-115` continues from retained production
|
|
1156
|
+
session `web-agent-labcanvas-f61239a5-db5e-42ff-94e2-1f4a1d5a4b2c`. The route
|
|
1157
|
+
request declared an exact `Allowed route_kind values:` list, but one fallback
|
|
1158
|
+
turn returned `video_generation_and_download`, a plausible invented label that
|
|
1159
|
+
does not exist in the host contract. A full-shaped response with that value
|
|
1160
|
+
could satisfy the key and type checks while still selecting an unsupported
|
|
1161
|
+
route.
|
|
1162
|
+
|
|
1163
|
+
Response-only contract discovery now retains string enums declared either as
|
|
1164
|
+
an explicit `Allowed <field> values:` bullet list or as a pipe-delimited value
|
|
1165
|
+
in the authoritative JSON schema sample. Completion validation reports fields
|
|
1166
|
+
whose values fall outside those caller-declared enums, includes the allowed
|
|
1167
|
+
values in the bounded repair instruction, and fails closed if the one repair
|
|
1168
|
+
still violates the contract. It does not infer allowed values from prose or
|
|
1169
|
+
apply domain-specific route names.
|
|
1170
|
+
|
|
1171
|
+
The production-shaped regression forces DeepSeek quota failure, returns all
|
|
1172
|
+
thirteen required fields with only `route_kind` invalid, and proves that one
|
|
1173
|
+
LocalLLM repair restores a declared value before the runtime records a finish.
|
|
1174
|
+
The focused provider-handoff test, syntax checks, and full package suite pass
|
|
1175
|
+
without real LocalLLM inference or any LabCanvas policy change.
|
|
1176
|
+
|
|
1177
|
+
### Candidate forecast mentions are not forecast claims
|
|
1178
|
+
|
|
1179
|
+
`labcanvas-auditor-forecast-mention-116` comes from retained production
|
|
1180
|
+
session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`. A completion
|
|
1181
|
+
auditor wrote that the candidate covered a `可证伪预测` but omitted a requested
|
|
1182
|
+
PDF and related analysis. The source-free claim guard treated that
|
|
1183
|
+
metalinguistic mention as the auditor making an unsupported forecast, forced a
|
|
1184
|
+
second model turn, and risked replacing a useful missing-work diagnosis with a
|
|
1185
|
+
less accurate answer.
|
|
1186
|
+
|
|
1187
|
+
The source-free claim classifier now distinguishes a candidate-content summary
|
|
1188
|
+
that merely says a prediction, forecast, projection, hypothesis, or speculation
|
|
1189
|
+
is present from a summary that repeats an actual future outcome. The narrow
|
|
1190
|
+
exception covers explicit candidate/result/response language in English,
|
|
1191
|
+
Chinese, and Japanese only when forecast is the sole detected claim category
|
|
1192
|
+
and no year, future marker, projected outcome, or quantitative forecast appears.
|
|
1193
|
+
Publication, validation, metric, evidence, and attributed-forecast checks are
|
|
1194
|
+
unchanged.
|
|
1195
|
+
|
|
1196
|
+
The regression uses the exact retained Chinese wording plus English and
|
|
1197
|
+
Japanese controls. A candidate-summary sentence that asserts 20% growth next
|
|
1198
|
+
year remains rejected. Truthful-completion, provider-handoff, syntax, and the
|
|
1199
|
+
full package suite pass without real LocalLLM inference.
|
|
1200
|
+
|
|
1201
|
+
### Successful equivalent web searches are single-use evidence
|
|
1202
|
+
|
|
1203
|
+
`labcanvas-successful-web-search-idempotency-117` comes from retained
|
|
1204
|
+
production session `web-agent-labcanvas-3ff222ef-af1c-4301-8799-4c6ca71368d2`.
|
|
1205
|
+
During one medical-research task, two generic discovery queries each completed
|
|
1206
|
+
successfully 48 times and one exact paper-title query completed successfully 45
|
|
1207
|
+
times. The static-discovery guard normalized equivalent search arguments but
|
|
1208
|
+
deliberately allowed two successful calls before blocking, while context
|
|
1209
|
+
recovery in the older runtime repeatedly reopened that allowance.
|
|
1210
|
+
|
|
1211
|
+
Equivalent successful `web_search` calls are now reusable after the first call
|
|
1212
|
+
in an unchanged task state, matching the existing exact-file-read boundary.
|
|
1213
|
+
Provider, result-count, whitespace, and capitalization changes do not bypass
|
|
1214
|
+
the guard because they do not change the information need. A materially
|
|
1215
|
+
refined query remains available, and successful task mutations still advance
|
|
1216
|
+
the stagnation epoch through the existing progress machinery.
|
|
1217
|
+
|
|
1218
|
+
The focused regression proves that the second semantically identical query is
|
|
1219
|
+
blocked while a query with an added primary-source constraint remains allowed.
|
|
1220
|
+
The dynamic-step smoke, syntax checks, and full package suite pass without live
|
|
1221
|
+
web requests, real LocalLLM inference, or any LabCanvas runtime-policy change.
|
|
1222
|
+
|
|
1223
|
+
### Reopening one unchanged browser URL is not progress
|
|
1224
|
+
|
|
1225
|
+
`labcanvas-browser-open-idempotency-118` continues from retained production
|
|
1226
|
+
session `web-agent-labcanvas-3ff222ef-af1c-4301-8799-4c6ca71368d2`. The same
|
|
1227
|
+
AACR page was successfully opened six times. Unlike `web_search` and
|
|
1228
|
+
`read_web_page`, `open_url` was not static discovery, so every navigation was
|
|
1229
|
+
credited as progress and reset convergence despite producing no file, artifact,
|
|
1230
|
+
or new browser interaction.
|
|
1231
|
+
|
|
1232
|
+
`open_url` is now static discovery with a canonical URL signature. Fragments do
|
|
1233
|
+
not create distinct identities, and a second successful equivalent open in an
|
|
1234
|
+
unchanged task phase is blocked. A real non-static browser action still resets
|
|
1235
|
+
the discovery phase through the existing progress machinery, so a later
|
|
1236
|
+
intentional revisit after interacting with the page remains available.
|
|
1237
|
+
|
|
1238
|
+
The focused regression covers static classification, canonical fragment
|
|
1239
|
+
normalization, duplicate blocking, and no-progress accounting. Dynamic-step,
|
|
1240
|
+
syntax, and full package tests pass without opening a live browser or changing
|
|
1241
|
+
host transport behavior.
|
|
1242
|
+
|
|
1243
|
+
### Directory depth is part of discovery identity
|
|
1244
|
+
|
|
1245
|
+
`labcanvas-directory-depth-refinement-119` also uses retained production
|
|
1246
|
+
session `web-agent-labcanvas-3ff222ef-af1c-4301-8799-4c6ca71368d2`. The agent
|
|
1247
|
+
listed the same artifact directory at both depth 2 and depth 3 while recovering
|
|
1248
|
+
a document task. The convergence signature used only the directory path, so a
|
|
1249
|
+
later, materially deeper inspection could be blocked as though it repeated the
|
|
1250
|
+
same successful listing.
|
|
1251
|
+
|
|
1252
|
+
`list_files` signatures now include the normalized effective depth (1–8,
|
|
1253
|
+
default 4). A simple read-only `ls` remains equivalent to a depth-1 structured
|
|
1254
|
+
listing of the same canonical directory. Exact repeated listings retain their
|
|
1255
|
+
existing bounded retry behavior, while an explicitly deeper scope remains
|
|
1256
|
+
available when it can reveal evidence omitted by the earlier listing.
|
|
1257
|
+
|
|
1258
|
+
The focused regression proves cross-tool depth-1 equivalence, exact-listing
|
|
1259
|
+
convergence, and a depth-2 to depth-3 refinement. It does not change filesystem
|
|
1260
|
+
permissions, traversal limits, host transport, or LabCanvas runtime policy.
|
|
1261
|
+
|
|
1262
|
+
### Route assignments are not external forecasts
|
|
1263
|
+
|
|
1264
|
+
`labcanvas-operational-route-forecast-120` comes from retained production
|
|
1265
|
+
session `web-agent-labcanvas-0aa6abef-47a0-4f2a-b07e-ae36281ecd6f`. After a
|
|
1266
|
+
DeepSeek `402`, LocalLLM returned a structurally correct `publish_video` route
|
|
1267
|
+
for the user's explicit request. The source-free claim guard interpreted the
|
|
1268
|
+
route explanation as a forecast, rejected it twice, and replaced it with an
|
|
1269
|
+
irrelevant no-evidence blocker.
|
|
1270
|
+
|
|
1271
|
+
The forecast classifier now separates bounded task-assignment language from
|
|
1272
|
+
claims about external future outcomes. Wording such as a user requesting work
|
|
1273
|
+
and a worker being expected to use an established routine is operational intent,
|
|
1274
|
+
not a market or scientific prediction. Dates, future periods, quantitative
|
|
1275
|
+
growth, demand, revenue, accuracy, and similar outcome claims remain guarded.
|
|
1276
|
+
|
|
1277
|
+
Focused evaluator checks cover the production-shaped publish route and an
|
|
1278
|
+
unsupported 20% next-year demand forecast. The provider-handoff regression
|
|
1279
|
+
forces DeepSeek quota failure and proves the valid LocalLLM route finishes on
|
|
1280
|
+
its first response without weakening explicit JSON schema checks or changing
|
|
1281
|
+
LabCanvas routing policy.
|
|
1282
|
+
|
|
1283
|
+
### Exact page reads converge without blocking focused rereads
|
|
1284
|
+
|
|
1285
|
+
`labcanvas-web-page-read-idempotency-121` comes from retained production
|
|
1286
|
+
session `web-agent-labcanvas-6a712fc4-a1a4-4128-801d-46771cb3c50a`. One exact
|
|
1287
|
+
web page extraction completed successfully 11 times, another completed six
|
|
1288
|
+
times, and a query-ranked extraction of that second page completed three times.
|
|
1289
|
+
The older convergence identity used only the URL and allowed two successful
|
|
1290
|
+
calls, so it could neither stop the first duplicate nor distinguish a genuinely
|
|
1291
|
+
different question about the same source.
|
|
1292
|
+
|
|
1293
|
+
`read_web_page` discovery identity now combines the canonical URL, normalized
|
|
1294
|
+
passage query, and bounded content/passage scope bands. A second equivalent
|
|
1295
|
+
successful extraction is blocked immediately. A materially different research
|
|
1296
|
+
question or a larger content band remains available, while cosmetic whitespace,
|
|
1297
|
+
fragment, and small numeric changes do not reopen the call.
|
|
1298
|
+
|
|
1299
|
+
The focused regression covers equivalent extraction normalization, exact-repeat
|
|
1300
|
+
blocking, a different question, and a deeper read. This changes no web provider,
|
|
1301
|
+
network permission, LabCanvas route, or hosted/local model priority.
|
|
1302
|
+
|
|
1303
|
+
### Image perception reuses one complete visual reading
|
|
1304
|
+
|
|
1305
|
+
`labcanvas-image-perception-idempotency-122` comes from retained production
|
|
1306
|
+
session `web-agent-labcanvas-fab99af8-5b13-489b-ae4e-68f4c15cd8d7`. The agent
|
|
1307
|
+
successfully read one 167031-byte WeCom image three times. Its first typed result
|
|
1308
|
+
already contained the headline, account, visible text, and scene description;
|
|
1309
|
+
the next two calls rephrased the OCR request and produced redundant perception
|
|
1310
|
+
artifacts several minutes apart.
|
|
1311
|
+
|
|
1312
|
+
Image discovery identity now uses the canonical ordered image sources and the
|
|
1313
|
+
requested detail level. Prompt wording, provider labels, model names, and
|
|
1314
|
+
reasoning settings cannot create an unbounded series for an unchanged visual
|
|
1315
|
+
source. One targeted follow-up remains available; a third equivalent-source
|
|
1316
|
+
read is blocked. A higher-detail pass, a different image or image set, and a new
|
|
1317
|
+
task-state epoch remain available.
|
|
1318
|
+
|
|
1319
|
+
The focused regression covers path aliases, prompt/provider variation, the
|
|
1320
|
+
two-pass cap, and a higher-detail positive control. It does not select or change
|
|
1321
|
+
any perception provider and performs no live vision inference.
|
|
1322
|
+
|
|
1323
|
+
### Structured workspace discovery converges after one complete result
|
|
1324
|
+
|
|
1325
|
+
`labcanvas-structured-workspace-idempotency-123` uses retained production
|
|
1326
|
+
sessions `web-agent-labcanvas-ad4601f6-840b-46c8-b4a1-018491a847bb` and
|
|
1327
|
+
`web-agent-labcanvas-6a712fc4-a1a4-4128-801d-46771cb3c50a`. Exact successful
|
|
1328
|
+
`search_files` calls were repeated up to five times, while one rich root
|
|
1329
|
+
`inspect_project` result was repeated after it had already returned the complete
|
|
1330
|
+
manifest and source-directory inventory.
|
|
1331
|
+
|
|
1332
|
+
Exact structured file searches, project inspections, directory listings, and
|
|
1333
|
+
equivalent plain `ls` calls now share one-use semantic discovery identities in
|
|
1334
|
+
unchanged task state. Case-insensitive search identity ignores letter case.
|
|
1335
|
+
Project inspection identity preserves material `maxDepth` and `includeFiles`
|
|
1336
|
+
scope, and directory identity continues to preserve depth, so a refined search,
|
|
1337
|
+
deeper listing, or richer inspection remains available. Successful mutation or
|
|
1338
|
+
other concrete progress still starts a fresh discovery phase.
|
|
1339
|
+
|
|
1340
|
+
The focused regression covers exact workspace-search reuse, refined-search and
|
|
1341
|
+
richer-inspection positive controls, listing depth, and cross-tool `list_files`
|
|
1342
|
+
to `ls` equivalence. This changes no workspace permissions, tool availability,
|
|
1343
|
+
provider selection, or LabCanvas runtime policy.
|
|
1344
|
+
|
|
1345
|
+
### Shell discovery requires non-mutation proof
|
|
1346
|
+
|
|
1347
|
+
`labcanvas-shell-discovery-mutation-boundary-124` follows the retained
|
|
1348
|
+
environment-probe loop in production session
|
|
1349
|
+
`web-agent-labcanvas-d2b99a34-8fa9-4157-ade9-a2a00c74940b`. That trace exposed
|
|
1350
|
+
a disagreement between shell command policy and dynamic-step accounting: the
|
|
1351
|
+
discovery classifier used only the first command word, so every command that
|
|
1352
|
+
started with `find`, `cat`, `jq`, `rg`, or another reader looked static even
|
|
1353
|
+
when it deleted files, ran a mutating `-exec`, or redirected output into the
|
|
1354
|
+
workspace. Such a successful mutation could fail to advance the stagnation
|
|
1355
|
+
epoch and could be rejected later by a misleading read-only convergence guard.
|
|
1356
|
+
|
|
1357
|
+
Shell calls now count as static discovery only when their shape is
|
|
1358
|
+
discovery-like and command policy independently proves that they cannot mutate
|
|
1359
|
+
the project. The existing `semanticMayMutateProject=false` escape remains
|
|
1360
|
+
available for conservative broad-pipeline classifications such as
|
|
1361
|
+
`find ... | xargs ls`. Verified leading workspace `cd` wrappers remain
|
|
1362
|
+
transparent. Destructive `find` actions and output redirections remain outside
|
|
1363
|
+
static accounting, while observed mutation and substantive-test progress keep
|
|
1364
|
+
their existing semantics.
|
|
1365
|
+
|
|
1366
|
+
The focused regression covers the retained read-only environment probe,
|
|
1367
|
+
leading-workspace wrappers, `find -delete`, mutating `find -exec`, reader output
|
|
1368
|
+
redirection, and a stale convergence-history negative control. Dynamic-step
|
|
1369
|
+
and syntax checks pass without executing a destructive command, starting a
|
|
1370
|
+
model, or changing LabCanvas routing.
|
|
1371
|
+
|
|
1372
|
+
### Equivalent document builds share failure state
|
|
1373
|
+
|
|
1374
|
+
`labcanvas-document-compile-alias-convergence-125` follows retained production
|
|
1375
|
+
session `web-agent-labcanvas-d568a2bd-e9d4-48c9-a30e-0e7c830efcd5`. After one
|
|
1376
|
+
real LaTeX source repair, the session exhausted 84 steps while revisiting the
|
|
1377
|
+
same failing `latexmk` build through both an absolute source path and a `cd`
|
|
1378
|
+
plus relative source path. Exact-string guards bounded each spelling
|
|
1379
|
+
separately, but changing the shell spelling incorrectly created another retry
|
|
1380
|
+
budget. A byte-identical later overwrite no longer advances current runtime
|
|
1381
|
+
state, so this path alias remained the live bypass.
|
|
1382
|
+
|
|
1383
|
+
Simple LaTeX compiler invocations now use a semantic failed-command identity:
|
|
1384
|
+
compiler, ordered flags, and the resolved `.tex` source. The absolute-path and
|
|
1385
|
+
working-directory forms of the same build therefore share bounded failure
|
|
1386
|
+
history. Different compilers, flags, source documents, and post-mutation epochs
|
|
1387
|
+
remain independent, preserving legitimate diagnosis and repair.
|
|
1388
|
+
|
|
1389
|
+
The focused regression reproduces the retained path aliases, proves that a
|
|
1390
|
+
third equivalent failure is blocked, and keeps `xelatex`, another source, and a
|
|
1391
|
+
fresh source-edit epoch available. It does not execute LaTeX or change any
|
|
1392
|
+
LabCanvas host policy.
|
|
1393
|
+
|
|
1394
|
+
### Private context titles never become public web queries
|
|
1395
|
+
|
|
1396
|
+
`labcanvas-web-query-private-context-boundary-126` comes from retained
|
|
1397
|
+
production session `web-agent-labcanvas-795aaa67-fdc2-427c-afd4-9bce957ae32c`.
|
|
1398
|
+
A source-recovery manifest incorrectly described a same-chat history artifact
|
|
1399
|
+
as an article and supplied an exact-title reconstruction query. DeepSeek then
|
|
1400
|
+
sent `Chat History for sunnyyty的聊天记录` to public search providers. The
|
|
1401
|
+
query returned irrelevant generic chat pages, exposed a private transcript
|
|
1402
|
+
label outside the task boundary, and consumed a research step before the model
|
|
1403
|
+
recognized that the real task was an unrelated daily research briefing.
|
|
1404
|
+
|
|
1405
|
+
Public web search now rejects secret-bearing queries and title-shaped private
|
|
1406
|
+
chat, conversation, message, or session-history scaffolds before a custom
|
|
1407
|
+
provider callback or network fetch can run. The same classifier is applied at
|
|
1408
|
+
the agent tool guard and inside direct `searchWeb` calls, so `web_research` and
|
|
1409
|
+
`deep_research` cannot bypass it. The failure tells the agent to search for the
|
|
1410
|
+
underlying public topic without copying names or transcript labels.
|
|
1411
|
+
|
|
1412
|
+
The focused regression uses the exact retained mixed-language query plus
|
|
1413
|
+
English, Chinese, and Japanese variants and proves zero provider dispatch. It
|
|
1414
|
+
also keeps ordinary public queries about safely exporting chat history,
|
|
1415
|
+
conversation-history research, and organoid microfluidics available. This
|
|
1416
|
+
changes no provider choice, network allowlist, LabCanvas policy, schedule, or
|
|
1417
|
+
transport.
|
|
1418
|
+
|
|
1419
|
+
### LaTeX compilers reject non-TeX document sources before execution
|
|
1420
|
+
|
|
1421
|
+
`labcanvas-document-source-compiler-boundary-127` comes from retained
|
|
1422
|
+
production session
|
|
1423
|
+
`web-agent-labcanvas-aef0f454-06ca-45ed-93ca-21c786de1020`. The task asked for
|
|
1424
|
+
a Markdown report revision and explicitly assigned unavailable Unicode-PDF
|
|
1425
|
+
compilation to the host. After correctly editing the report, the fallback model
|
|
1426
|
+
ran `pdflatex report.md`, searched for a converter, attempted package-manager
|
|
1427
|
+
and Node.js installation routes, and finally requested elevation. The first
|
|
1428
|
+
command was semantically invalid: a LaTeX engine accepts a `.tex` source, not a
|
|
1429
|
+
Markdown, text, HTML, office-document, or PDF input.
|
|
1430
|
+
|
|
1431
|
+
AgInTiFlow now rejects that source/compiler mismatch before launching the
|
|
1432
|
+
process and stops the remaining tool calls in the same assistant batch. The
|
|
1433
|
+
diagnostic directs the model to create or use the complete task-scoped `.tex`
|
|
1434
|
+
source, use an already available declared converter, or return editable source
|
|
1435
|
+
to a host-owned compilation stage. This prevents one invalid premise from
|
|
1436
|
+
cascading into converter installation or permission requests while retaining
|
|
1437
|
+
normal recovery after the model sees the result.
|
|
1438
|
+
|
|
1439
|
+
The focused regression covers the retained `pdflatex report.md` command,
|
|
1440
|
+
XeLaTeX, LuaLaTeX, `latexmk`, shell wrappers, and incompatible Markdown, text,
|
|
1441
|
+
PDF, HTML, and office-document inputs. Positive controls preserve valid `.tex`
|
|
1442
|
+
compilation, option values that happen to carry file extensions, explicit
|
|
1443
|
+
Pandoc conversion, and project build scripts. No compiler is launched, no
|
|
1444
|
+
package is installed, and no LabCanvas provider, schedule, transport, or
|
|
1445
|
+
runtime policy is changed.
|
|
1446
|
+
|
|
1447
|
+
### Numeric chat identifiers are not truncated into years or forecasts
|
|
1448
|
+
|
|
1449
|
+
`labcanvas-bare-number-claim-boundary-128` comes from retained production
|
|
1450
|
+
sessions `web-agent-labcanvas-d99fc736-db3a-4310-bbe5-c939a779ffca` and
|
|
1451
|
+
`web-agent-labcanvas-a2400822-729d-400b-8a70-2842e3dcefe8`. A user sent the
|
|
1452
|
+
bare message `199793`. Both the route turn and the fast-chat turn produced
|
|
1453
|
+
reasonable clarification responses, but response-only evidence validation
|
|
1454
|
+
rejected them twice and returned an internal evidence failure to the host.
|
|
1455
|
+
|
|
1456
|
+
The root cause was lexical, not provider quality. The Chinese forecast matcher
|
|
1457
|
+
read the last character of `收到` as the temporal preposition `到`, then treated
|
|
1458
|
+
the first four digits of the six-digit value as year `1997`. Related year
|
|
1459
|
+
patterns also lacked numeric boundaries. The source-free claim guard now
|
|
1460
|
+
requires complete four-digit year tokens and an actual Chinese year/deadline
|
|
1461
|
+
suffix after `到`. It also recognizes narrowly framed metalinguistic
|
|
1462
|
+
clarifications about an ambiguous input while continuing to reject external
|
|
1463
|
+
publication, validation, market, and forecast assertions embedded in them.
|
|
1464
|
+
|
|
1465
|
+
The focused regression preserves the exact retained Chinese clarification, a
|
|
1466
|
+
production-shaped route JSON response, and ordinary numeric acknowledgements.
|
|
1467
|
+
Negative controls still reject an ambiguous-message sentence that asserts a
|
|
1468
|
+
2025 publication and validation, plus an attributed 2030 product forecast.
|
|
1469
|
+
This changes no response schema, model route, LabCanvas prompt, transport, or
|
|
1470
|
+
schedule.
|
|
1471
|
+
|
|
1472
|
+
### Degenerate transcripts cannot become invented speech summaries
|
|
1473
|
+
|
|
1474
|
+
`labcanvas-bounded-transcript-quality-129` comes from retained production
|
|
1475
|
+
session `web-agent-labcanvas-5fbe19a4-7707-4649-8b50-1e2698ce7141`. The host
|
|
1476
|
+
provided one exact Shipinhao packet for a 47-second video and explicitly asked
|
|
1477
|
+
for a summary of the actual speech. Its transcript consisted almost entirely
|
|
1478
|
+
of repeated `母带`, `混音`, and related production-credit words. The fallback
|
|
1479
|
+
model nevertheless expanded title and hashtag metadata into a fluent account
|
|
1480
|
+
of the video's speech and visuals, and response-only completion accepted it.
|
|
1481
|
+
|
|
1482
|
+
AgInTiFlow now evaluates transcript usability only for structured bounded
|
|
1483
|
+
packets that explicitly request a speech summary. Empty, implausibly sparse,
|
|
1484
|
+
or strongly repetitive transcripts require a reader-facing limitation. The
|
|
1485
|
+
single repair turn prohibits converting title, description, author, or hashtag
|
|
1486
|
+
metadata into speech and restates the caller's JSON key/type contract. If the
|
|
1487
|
+
backend repeats the invention, the runtime returns a schema-compatible
|
|
1488
|
+
limitation and leaves the session stopped rather than recording a successful
|
|
1489
|
+
finish.
|
|
1490
|
+
|
|
1491
|
+
The production-shaped regression covers the exact repetitive transcript, a
|
|
1492
|
+
successful bounded repair, repeated-failure fail-closed behavior, and JSON
|
|
1493
|
+
contract preservation. Positive controls retain an ordinary information-rich
|
|
1494
|
+
transcript and a metadata-only identification request. Media resolution,
|
|
1495
|
+
download, ASR, attachment delivery, provider priority, LabCanvas queues,
|
|
1496
|
+
transport, and schedules remain unchanged.
|
|
1497
|
+
|
|
1498
|
+
### Fail-closed response-only turns retain the caller envelope
|
|
1499
|
+
|
|
1500
|
+
`labcanvas-response-only-fail-closed-envelope-130` follows retained production
|
|
1501
|
+
session `web-agent-labcanvas-0aa6abef-47a0-4f2a-b07e-ae36281ecd6f`. Its
|
|
1502
|
+
response-only route request declared a strict multi-field JSON schema. The
|
|
1503
|
+
source-free guard correctly stopped a repeated unsupported claim, but returned
|
|
1504
|
+
plain diagnostic prose. That truthful stop was no longer parseable by the
|
|
1505
|
+
caller's declared protocol and could become a dropped or misrouted host task.
|
|
1506
|
+
|
|
1507
|
+
Every response-only fail-closed path now serializes its limitation through the
|
|
1508
|
+
explicit contract. Required keys and value types remain present, declared
|
|
1509
|
+
string enums receive a valid safe value, and diagnostic prose is placed only in
|
|
1510
|
+
a non-enum string field, preferring `message`, `summary`, or `reason`. The same
|
|
1511
|
+
rule covers a repeated malformed JSON answer and a repeated unsupported factual
|
|
1512
|
+
claim. The session still stops, emits its existing private failure event, and
|
|
1513
|
+
never records `session.finished`.
|
|
1514
|
+
|
|
1515
|
+
Production-shaped regressions cover a chat response envelope, the retained
|
|
1516
|
+
router-style enum envelope, and a completion-auditor schema. They force the
|
|
1517
|
+
DeepSeek pre-inference quota handoff through deterministic LocalLLM responses;
|
|
1518
|
+
no live model inference, LabCanvas policy change, queue action, schedule, or
|
|
1519
|
+
transport operation is involved.
|
|
1520
|
+
|
|
1521
|
+
### Secret-bearing derived content recovers by redaction
|
|
1522
|
+
|
|
1523
|
+
`labcanvas-secret-write-redaction-recovery-131` follows retained production
|
|
1524
|
+
session `web-agent-labcanvas-0ba776d1-2592-45a1-a2f3-e842c092be20`. A
|
|
1525
|
+
Shipinhao source packet contained private signed media fields. While preparing
|
|
1526
|
+
a derived reader-facing note, the fallback model copied a token-like value into
|
|
1527
|
+
an `apply_patch` replacement. The workspace secret guard correctly denied the
|
|
1528
|
+
write, but generic permission advice paused the task and suggested a stronger
|
|
1529
|
+
Docker run. No permission level can make persisting that value safe, so the
|
|
1530
|
+
source-understanding task stopped for an irrelevant user decision.
|
|
1531
|
+
|
|
1532
|
+
Workspace-content secret blocks now advertise one bounded automatic recovery:
|
|
1533
|
+
omit the private URL or replace the sensitive value with `[REDACTED]`, preserve
|
|
1534
|
+
the useful non-sensitive content and requested artifact path, and retry once.
|
|
1535
|
+
The denied write still does not mutate the workspace. The current assistant
|
|
1536
|
+
tool batch is still short-circuited, so later calls cannot act on the invalid
|
|
1537
|
+
content before the model sees the correction. Protected paths,
|
|
1538
|
+
outside-workspace writes, destructive actions, and genuine permission changes
|
|
1539
|
+
retain their existing pause behavior.
|
|
1540
|
+
|
|
1541
|
+
The end-to-end regression first proves the old `permission_required` stop,
|
|
1542
|
+
then proves that a redacted retry creates the exact derived artifact and can
|
|
1543
|
+
finish without exposing the secret. Direct workspace-tool coverage separately
|
|
1544
|
+
proves that the original secret-like write remains blocked. No live model,
|
|
1545
|
+
private media URL, LabCanvas runtime change, queue action, schedule, or
|
|
1546
|
+
transport operation is involved.
|
|
1547
|
+
|
|
1548
|
+
### Local file URLs recover through workspace-native tools
|
|
1549
|
+
|
|
1550
|
+
`labcanvas-file-url-preview-recovery-132` follows retained production session
|
|
1551
|
+
`web-agent-labcanvas-8239a475-f456-4451-8c31-36428d15803e`. The fallback had
|
|
1552
|
+
already found a task-scoped PDF, but passed its `file://` URL to `open_url`.
|
|
1553
|
+
The browser guard correctly accepts only remote HTTP(S) URLs; generic
|
|
1554
|
+
permission advice nevertheless paused the task and suggested stronger runtime
|
|
1555
|
+
flags. No permission change was needed because the file was already inside the
|
|
1556
|
+
authorized workspace.
|
|
1557
|
+
|
|
1558
|
+
Unsupported browser schemes now carry a distinct recovery category. A local
|
|
1559
|
+
file URL remains blocked before browser navigation, while the next model turn
|
|
1560
|
+
is directed to `open_workspace_file`, `preview_workspace`, or `read_file` using
|
|
1561
|
+
the workspace-relative path. Unsupported non-file schemes are never executed
|
|
1562
|
+
or rewritten; the model may use an exact authorized HTTP(S) source from the
|
|
1563
|
+
current request or report the source limitation honestly.
|
|
1564
|
+
|
|
1565
|
+
The end-to-end regression reproduces the old one-turn permission pause, then
|
|
1566
|
+
proves one workspace-native read and a verified finish. Direct guard coverage
|
|
1567
|
+
also proves that `file://` did not become remotely navigable. Outside-workspace,
|
|
1568
|
+
protected-path, domain-allowlist, and genuine permission boundaries remain
|
|
1569
|
+
unchanged. No live model, browser navigation, LabCanvas runtime mutation,
|
|
1570
|
+
queue action, schedule, or transport operation is involved.
|
|
1571
|
+
|
|
1572
|
+
### Response-only completion cannot replay host control or prior bot output
|
|
1573
|
+
|
|
1574
|
+
`labcanvas-response-only-context-echo-133` follows retained production session
|
|
1575
|
+
`web-agent-labcanvas-dc5db4bc-5d33-427b-aafb-042e44ef9595`. Its response-only
|
|
1576
|
+
fallback returned the host's evidence-scope object as the finished answer. A
|
|
1577
|
+
second retained trace showed the same failure class after context compaction:
|
|
1578
|
+
the fallback copied a prior bot-authored chat response instead of responding
|
|
1579
|
+
to a different current inbound message. Both outputs could satisfy ordinary
|
|
1580
|
+
plain-text or JSON-shape checks while saying nothing new.
|
|
1581
|
+
|
|
1582
|
+
AgInTiFlow now compares response-only candidates with the exact host control
|
|
1583
|
+
object and attributed `is_self: true` messages in the bounded same-chat
|
|
1584
|
+
context. An exact substantive replay receives one current-turn repair that
|
|
1585
|
+
retains the caller's JSON contract. Explicit verbatim-repeat requests remain
|
|
1586
|
+
valid, while merely quoting an earlier response does not authorize copying it
|
|
1587
|
+
back.
|
|
1588
|
+
|
|
1589
|
+
The regression also forces an unsupported source-free factual answer to be
|
|
1590
|
+
repaired into a stale prior message. A final cross-validator check stops that
|
|
1591
|
+
turn with a schema-compatible limitation and no `session.finished` event. The
|
|
1592
|
+
test uses deterministic provider responses only; no live DeepSeek or LocalLLM
|
|
1593
|
+
inference, LabCanvas host change, queue action, schedule, or transport
|
|
1594
|
+
operation is involved.
|
|
1595
|
+
|
|
1596
|
+
### Research mutations require their declared evidence manifest
|
|
1597
|
+
|
|
1598
|
+
`labcanvas-research-manifest-grounding-134` follows retained production session
|
|
1599
|
+
`web-agent-labcanvas-d4fc28d0-2a19-488e-8610-5e34eb5172ab`. A report-repair task
|
|
1600
|
+
declared one task-local research evidence manifest as authoritative. The fallback
|
|
1601
|
+
read only the TeX report, introduced a new citation identifier that was absent
|
|
1602
|
+
from the manifest, and described the result as evidence-verified without ever
|
|
1603
|
+
reading the manifest.
|
|
1604
|
+
|
|
1605
|
+
Reader-facing research source mutations now stop before dispatch when the current
|
|
1606
|
+
task explicitly binds them to an evidence, source, citation, or reference
|
|
1607
|
+
manifest that has not been read completely. A bare manifest filename is resolved
|
|
1608
|
+
under the declared artifact root. After the manifest is read, newly introduced
|
|
1609
|
+
LaTeX citation keys, source IDs, DOI values, arXiv identifiers, and URLs must be
|
|
1610
|
+
present in that manifest. Editing the manifest itself remains possible, and
|
|
1611
|
+
ordinary document work without an explicit authoritative-manifest contract is
|
|
1612
|
+
unchanged.
|
|
1613
|
+
|
|
1614
|
+
The production-shaped regression proves the exact unread-manifest block, permits
|
|
1615
|
+
a supported source identifier after a complete read, rejects an unsupported
|
|
1616
|
+
identifier, and preserves both non-contract document edits and direct manifest
|
|
1617
|
+
maintenance. The earlier unrelated-anchor contamination in document validation
|
|
1618
|
+
was already fixed by `84f488f`; this scenario adds only the missing evidence-use
|
|
1619
|
+
boundary. No live DeepSeek or LocalLLM inference, LabCanvas host change, queue
|
|
1620
|
+
action, schedule, or transport operation is involved.
|
|
1621
|
+
|
|
1622
|
+
### Host-owned document compilation is a dispatch boundary
|
|
1623
|
+
|
|
1624
|
+
`labcanvas-host-compiler-dispatch-135` follows retained production session
|
|
1625
|
+
`web-agent-labcanvas-874e9cf8-2ae9-4238-8289-bc2797dd008a`. Its report-repair
|
|
1626
|
+
contract prohibited agent-side document compilation and assigned the derived
|
|
1627
|
+
PDF build and inspection to the LabCanvas host. The fallback nevertheless ran
|
|
1628
|
+
the same `latexmk` build twice. AgInTiFlow already used host ownership to shape
|
|
1629
|
+
its prompt and completion evidence, but did not enforce it before shell dispatch.
|
|
1630
|
+
|
|
1631
|
+
The shared host-compilation recognizer now covers the retained natural wording
|
|
1632
|
+
that asks the agent to let the host compiler build the PDF, including a preceding
|
|
1633
|
+
compound prohibition such as "do not install or invoke." When that explicit
|
|
1634
|
+
ownership contract is current, direct or bounded shell-wrapped LaTeX, Tectonic,
|
|
1635
|
+
Pandoc, Typst, and Make compiler invocations are blocked before execution. The
|
|
1636
|
+
model receives one automatic source-only recovery instruction and the rest of
|
|
1637
|
+
the same assistant tool batch cannot act on the invalid stage transition.
|
|
1638
|
+
|
|
1639
|
+
The regression uses the retained command shape and covers environment prefixes,
|
|
1640
|
+
shell wrappers, and alternate document compilers. Read-only tool discovery,
|
|
1641
|
+
source validators, ordinary agent-owned compilation, and conditional host
|
|
1642
|
+
fallback remain available. No compiler command, live model, LabCanvas runtime
|
|
1643
|
+
mutation, queue action, schedule, or transport operation is involved.
|
|
1644
|
+
|
|
1645
|
+
### Text workspace tools cannot fabricate opaque binary artifacts
|
|
1646
|
+
|
|
1647
|
+
`labcanvas-text-binary-artifact-boundary-136` follows retained production
|
|
1648
|
+
session `web-agent-labcanvas-bc69ea98-1fbd-4289-9609-e01b8b5a04a5`. While
|
|
1649
|
+
recovering a scheduled research report, the fallback passed 1,019 bytes of
|
|
1650
|
+
ordinary UTF-8 Chinese text to `write_file` under a `.pdf` filename. The text
|
|
1651
|
+
tool reported success even though the result was not a PDF, allowing a
|
|
1652
|
+
mislabelled artifact to enter later completion and delivery work.
|
|
1653
|
+
|
|
1654
|
+
Workspace text tools now reject writes and patches to opaque binary formats
|
|
1655
|
+
before mutation. The automatic recovery tells the model to create or repair the
|
|
1656
|
+
canonical text-native source and use the established compiler, converter,
|
|
1657
|
+
renderer, generator, or host-owned build stage. It explicitly rejects base64
|
|
1658
|
+
workarounds and extension renaming. The boundary covers PDF and Office
|
|
1659
|
+
documents, raster images, audio/video, archives, executable objects, databases,
|
|
1660
|
+
fonts, and packaged 3D containers. Text-native Markdown, TeX, SVG, STEP, STL,
|
|
1661
|
+
OBJ, JSON, code, and configuration remain writable.
|
|
1662
|
+
|
|
1663
|
+
The direct regression proves that `.pdf`, `.docx`, `.png`, `.mp4`, and `.3mf`
|
|
1664
|
+
targets are blocked without creating files, that an `apply_patch` PDF add is
|
|
1665
|
+
also blocked, and that representative text-native source formats still work.
|
|
1666
|
+
No compiler, live model, LabCanvas runtime mutation, queue action, schedule, or
|
|
1667
|
+
transport operation is involved.
|
|
1668
|
+
|
|
1669
|
+
### Source-free inspiration cannot invent named evidence
|
|
1670
|
+
|
|
1671
|
+
`labcanvas-source-free-inspiration-grounding-137` follows retained production
|
|
1672
|
+
session `web-agent-labcanvas-98f06435-ce9d-4300-b2b2-e8c4399d46bc`. A scheduled
|
|
1673
|
+
inspiration turn had no fresh evidence manifest or scoped tool evidence, yet
|
|
1674
|
+
the fallback attributed claims to a magazine and a named journal, described
|
|
1675
|
+
results as already validated, and recommended a purported open-source research
|
|
1676
|
+
toolkit. The answer mixed those assertions with a requested high-risk
|
|
1677
|
+
prediction, which made the unsupported grounding look plausible.
|
|
1678
|
+
|
|
1679
|
+
Source-free research and inspiration responses now distinguish two independent
|
|
1680
|
+
things: the assistant may still propose its own clearly labeled, falsifiable
|
|
1681
|
+
hypothesis or experiment, but a named publication, quoted source, or claimed
|
|
1682
|
+
named research resource requires current scoped evidence. Sentence analysis
|
|
1683
|
+
also keeps common `e.g.` and `i.e.` abbreviations intact so an attribution and
|
|
1684
|
+
its evidence claim cannot be separated by punctuation tokenization.
|
|
1685
|
+
|
|
1686
|
+
The production-shaped regression covers the retained English and Chinese
|
|
1687
|
+
claims, equivalent claims with the year removed, a named-tool assertion, a
|
|
1688
|
+
source-free hypothesis positive control, and the same answer with a current
|
|
1689
|
+
evidence ledger. End-to-end cases prove that one correction preserves the
|
|
1690
|
+
caller's five-field JSON envelope and that a second unsupported answer fails
|
|
1691
|
+
closed without `session.finished`. No live model, LocalLLM inference, LabCanvas
|
|
1692
|
+
runtime change, queue action, schedule, or transport operation is involved.
|
|
1693
|
+
|
|
1694
|
+
### Response-only answers cannot collapse into host acknowledgements
|
|
1695
|
+
|
|
1696
|
+
`labcanvas-response-only-host-acknowledgement-138` follows retained production
|
|
1697
|
+
session `web-agent-labcanvas-21296064-9835-461b-8179-5c8cf5f367a2`. Two
|
|
1698
|
+
schema-valid response-only turns said that a WeCom message had been routed into
|
|
1699
|
+
the LabCanvas runtime and that the requested response format was followed. The
|
|
1700
|
+
host had already performed those operations; the fallback therefore answered
|
|
1701
|
+
its transport wrapper instead of the human message.
|
|
1702
|
+
|
|
1703
|
+
Response-only completion now treats unsolicited routing, forwarding, runtime,
|
|
1704
|
+
and output-contract acknowledgements as private host-control leakage. The
|
|
1705
|
+
check reads the authoritative request from the evidence-scope envelope, so a
|
|
1706
|
+
real user question about routing or backend status remains answerable. One
|
|
1707
|
+
bounded repair asks for the task-facing answer without changing the caller's
|
|
1708
|
+
JSON keys or types. A second acknowledgement fails closed with a schema-valid
|
|
1709
|
+
`handled:false` result and no `session.finished` event.
|
|
1710
|
+
|
|
1711
|
+
The production-shaped regression uses the exact retained English and Chinese
|
|
1712
|
+
outputs. It covers direct detection, an explicit routing-status positive
|
|
1713
|
+
control, a normal human-answer positive control, successful repair, repeated
|
|
1714
|
+
failure, event counts, and JSON-envelope preservation. No live model,
|
|
1715
|
+
LocalLLM inference, LabCanvas runtime change, queue action, schedule, or
|
|
1716
|
+
transport operation is involved.
|
|
1717
|
+
|
|
1718
|
+
### Blanket-perfect audits receive one skeptical confirmation
|
|
1719
|
+
|
|
1720
|
+
`labcanvas-response-only-perfect-audit-139` follows retained production session
|
|
1721
|
+
`web-agent-labcanvas-497d42ba-3d06-4b6a-8a64-e67726a949a9`. DeepSeek first
|
|
1722
|
+
stopped with an insufficient-balance response. The LocalLLM fallback then
|
|
1723
|
+
accepted a roughly 15,000-character trilingual tutorial with all 11 dimensions
|
|
1724
|
+
scored `5/5` and no issues, despite visible malformed Japanese and an incorrect
|
|
1725
|
+
reading. The complete candidate remained in the active request, so this was an
|
|
1726
|
+
audit-quality failure rather than context loss.
|
|
1727
|
+
|
|
1728
|
+
Response-only completion now asks for exactly one independent skeptical check
|
|
1729
|
+
when an explicit scored audit is accepted, has at least four numeric dimensions,
|
|
1730
|
+
assigns every dimension the request's explicit maximum, and reports no issues or
|
|
1731
|
+
revisions. The check must compare the actual candidate with all material
|
|
1732
|
+
requirements, preserve the caller's JSON contract, and may confirm a genuinely
|
|
1733
|
+
perfect result. Rejected audits, qualified scores, ordinary answers, and reviews
|
|
1734
|
+
without an explicit score range do not receive an extra model turn.
|
|
1735
|
+
|
|
1736
|
+
The production-shaped regression includes the retained malformed Japanese span,
|
|
1737
|
+
proves a corrected rejection after confirmation, proves a clean candidate can
|
|
1738
|
+
remain perfect after exactly two calls, and proves an initially rejected audit
|
|
1739
|
+
uses one call. It also covers direct non-audit and non-perfect controls, event
|
|
1740
|
+
counts, JSON-envelope preservation, and successful completion boundaries. No
|
|
1741
|
+
live DeepSeek or LocalLLM inference, LabCanvas runtime change, queue action,
|
|
1742
|
+
schedule, or transport operation is involved.
|
|
1743
|
+
|
|
1744
|
+
### Human-facing replies cannot expose private packet identifiers
|
|
1745
|
+
|
|
1746
|
+
`labcanvas-response-only-private-packet-hygiene-140` follows retained production
|
|
1747
|
+
session `web-agent-labcanvas-acfafa25-d3c5-4a4e-9e12-1813973211a2`. A scheduled
|
|
1748
|
+
inspiration reply told group members to reflect on achievements like the
|
|
1749
|
+
`memo_daily` task and put another orchestration phrase in `confirmation`. That
|
|
1750
|
+
identifier came from a private preflight schedule snapshot, not the human-facing
|
|
1751
|
+
request, and should never have appeared in chat.
|
|
1752
|
+
|
|
1753
|
+
Response-only scaffold validation now derives machine-style identifiers from
|
|
1754
|
+
the exact task packet and checks only outward text fields such as `message`,
|
|
1755
|
+
`response`, `chat_reply`, `ack`, and `confirmation`. An identifier is rejected
|
|
1756
|
+
only when it occurs in the private packet and is absent from `current_request`
|
|
1757
|
+
and every explicit request item. The implementation does not contain scheduler
|
|
1758
|
+
names, inspect attachment paths, or reject arbitrary underscore text. A human
|
|
1759
|
+
who explicitly asks about the named internal task can still receive an answer.
|
|
1760
|
+
|
|
1761
|
+
The production-shaped regression proves the original leak failed before the
|
|
1762
|
+
fix, then covers direct detection, explicit-request and unrelated-text controls,
|
|
1763
|
+
one successful schema-preserving repair, and repeated-leak fail-closed behavior
|
|
1764
|
+
without `session.finished`. No live model, LocalLLM inference, LabCanvas runtime
|
|
1765
|
+
change, queue action, schedule, or transport operation is involved.
|
|
1766
|
+
|
|
1767
|
+
### Schema-valid empty envelopes cannot finish a task
|
|
1768
|
+
|
|
1769
|
+
`labcanvas-response-only-empty-envelope-141` follows retained production session
|
|
1770
|
+
`web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`. After DeepSeek
|
|
1771
|
+
reported insufficient balance and the LocalLLM request was compacted to fit its
|
|
1772
|
+
context window, the fallback returned a valid chat JSON envelope whose message,
|
|
1773
|
+
confirmation, files, publish state, and generated-content arrays were all empty.
|
|
1774
|
+
AgInTiFlow accepted the field types and emitted `session.finished`, silently
|
|
1775
|
+
clearing a scheduled inspiration task without a reply.
|
|
1776
|
+
|
|
1777
|
+
Host task envelopes now require a meaningful outward payload after structural
|
|
1778
|
+
JSON validation. A nonempty human message, task-scoped attachment, continuation
|
|
1779
|
+
question, knowledge item, upstream feedback item, publish state, or generated
|
|
1780
|
+
content satisfies the boundary. The check applies only when an exact host task
|
|
1781
|
+
packet and a human-facing response field are present; router and audit schemas
|
|
1782
|
+
remain unchanged. An explicit human instruction to leave the message or reply
|
|
1783
|
+
empty is also preserved.
|
|
1784
|
+
|
|
1785
|
+
The production-shaped regression first proves the one-call silent finish on the
|
|
1786
|
+
pre-fix runtime. It then covers direct positive controls, one successful bounded
|
|
1787
|
+
repair, exact JSON-envelope preservation, repeated-empty fail-closed behavior,
|
|
1788
|
+
and absence of `session.finished` after failure. No live model, LocalLLM
|
|
1789
|
+
inference, LabCanvas runtime change, queue action, schedule, or transport
|
|
1790
|
+
operation is involved.
|
|
1791
|
+
|
|
1792
|
+
### Later repairs cannot reintroduce an empty envelope
|
|
1793
|
+
|
|
1794
|
+
`labcanvas-response-only-post-repair-empty-envelope-142` closes a validator-order
|
|
1795
|
+
gap exposed while reviewing the retained empty-envelope path. A nonempty answer
|
|
1796
|
+
with unsupported named evidence correctly entered source-free repair. Its
|
|
1797
|
+
replacement preserved the JSON schema but emptied every outward field; because
|
|
1798
|
+
the initial payload check had already passed, the replacement could still reach
|
|
1799
|
+
`session.finished`.
|
|
1800
|
+
|
|
1801
|
+
Response-only completion now repeats the semantic outward-payload check at the
|
|
1802
|
+
final acceptance boundary, after every bounded evidence, transcript, context,
|
|
1803
|
+
and scaffold repair. A later repair that erases the answer fails closed using
|
|
1804
|
+
the caller's exact JSON envelope. The runtime does not spend a third model call
|
|
1805
|
+
after a weak backend already failed the requested correction.
|
|
1806
|
+
|
|
1807
|
+
The production-shaped regression proves the before-fix successful finish,
|
|
1808
|
+
retains the source-free rejection event, confirms exactly two model calls,
|
|
1809
|
+
checks the schema-valid stopped result, and proves there is no
|
|
1810
|
+
`session.finished` event. No live model, LocalLLM inference, LabCanvas runtime
|
|
1811
|
+
change, queue action, schedule, or transport operation is involved.
|
|
1812
|
+
|
|
1813
|
+
### Later repairs cannot reintroduce host control language
|
|
1814
|
+
|
|
1815
|
+
`labcanvas-response-only-post-repair-scaffold-143` extends the final-boundary
|
|
1816
|
+
audit beyond empty payloads. A response with unsupported publication numbers
|
|
1817
|
+
correctly entered source-free repair, but its replacement merely acknowledged
|
|
1818
|
+
that a WeCom message had been routed into LabCanvas and that the output format
|
|
1819
|
+
was followed. The early scaffold check had already passed, so this host-facing
|
|
1820
|
+
implementation detail was previously accepted as a successful human reply.
|
|
1821
|
+
|
|
1822
|
+
Response-only completion now repeats the existing internal-scaffold detector at
|
|
1823
|
+
the final acceptance boundary. If any later evidence or transcript repair
|
|
1824
|
+
introduces host routing acknowledgements, private packet identifiers, recovery
|
|
1825
|
+
instructions, or output-contract narration, the turn stops using the caller's
|
|
1826
|
+
exact JSON envelope. This final check records the defect but does not spend a
|
|
1827
|
+
third model call after the bounded repair budget is exhausted.
|
|
1828
|
+
|
|
1829
|
+
The production-shaped regression proves the vulnerable pre-fix finish and the
|
|
1830
|
+
fixed two-call fail-closed result, including one source-free rejection, one
|
|
1831
|
+
scaffold rejection, no extra scaffold-repair request, schema preservation, and
|
|
1832
|
+
no `session.finished` event. No live model, LocalLLM inference, LabCanvas
|
|
1833
|
+
runtime change, queue action, schedule, or transport operation is involved.
|
|
1834
|
+
|
|
1835
|
+
### Later repairs cannot invent speech from an unusable transcript
|
|
1836
|
+
|
|
1837
|
+
`labcanvas-response-only-post-repair-transcript-144` continues the bounded
|
|
1838
|
+
Shipinhao transcript audit. The first answer truthfully said that a strongly
|
|
1839
|
+
repetitive transcript could not support a speech summary, but also added an
|
|
1840
|
+
unsupported journal validation claim. Source-free repair removed that claim
|
|
1841
|
+
and replaced the entire answer with a fluent invented account of the video's
|
|
1842
|
+
speech. Because transcript quality had already been checked, the fabricated
|
|
1843
|
+
summary previously reached `session.finished`.
|
|
1844
|
+
|
|
1845
|
+
Response-only completion now repeats bounded-transcript quality validation at
|
|
1846
|
+
the final acceptance boundary. If a later repair drops the required limitation
|
|
1847
|
+
or infers speech from title metadata, the runtime returns the established
|
|
1848
|
+
truthful limitation in the caller's exact JSON envelope. It does not request a
|
|
1849
|
+
third model turn.
|
|
1850
|
+
|
|
1851
|
+
The regression proves the before-fix successful finish and the fixed two-call
|
|
1852
|
+
stop, including the source-free rejection, transcript-quality fail-closed
|
|
1853
|
+
event, parseable limitation message, and absence of `session.finished`. No live
|
|
1854
|
+
model, LocalLLM inference, LabCanvas runtime change, queue action, schedule, or
|
|
1855
|
+
transport operation is involved.
|
|
1856
|
+
|
|
1857
|
+
### Later repairs cannot bypass skeptical audit confirmation
|
|
1858
|
+
|
|
1859
|
+
`labcanvas-response-only-post-repair-perfect-audit-145` closes the remaining
|
|
1860
|
+
semantic validator-order gap. A qualified audit containing an unsupported
|
|
1861
|
+
journal validation claim correctly entered source-free repair. Its replacement
|
|
1862
|
+
then marked every dimension perfect, accepted the malformed multilingual
|
|
1863
|
+
tutorial, and reported no issue. Because the perfect-audit gate had already
|
|
1864
|
+
seen the earlier rejected review, the unverified replacement previously
|
|
1865
|
+
finished after two calls.
|
|
1866
|
+
|
|
1867
|
+
Perfect-audit confirmation is now a bounded reusable stage that records the
|
|
1868
|
+
exact reviewed result. If a later repair creates a different blanket-perfect
|
|
1869
|
+
audit, AgInTiFlow performs one late skeptical confirmation. The resulting audit
|
|
1870
|
+
then passes through the final output, grounding, payload, current-turn,
|
|
1871
|
+
scaffold, and transcript invariants before completion. A late confirmation
|
|
1872
|
+
cannot silently reintroduce unsupported external claims.
|
|
1873
|
+
|
|
1874
|
+
The production-shaped regression proves the pre-fix two-call acceptance and a
|
|
1875
|
+
fixed three-call path whose independent review finds the malformed Japanese,
|
|
1876
|
+
returns `accepted=false`, preserves the caller schema, and finishes normally.
|
|
1877
|
+
Existing initially perfect, already rejected, qualified, and non-audit controls
|
|
1878
|
+
remain unchanged. No live model, LocalLLM inference, LabCanvas runtime change,
|
|
1879
|
+
queue action, schedule, or transport operation is involved.
|
|
1880
|
+
|
|
1881
|
+
### Bare artifact outputs resolve inside one authoritative task root
|
|
1882
|
+
|
|
1883
|
+
`labcanvas-scoped-artifact-bare-write-146` follows retained WeCom worker session
|
|
1884
|
+
`web-agent-labcanvas-12fc2f0e-6c81-489c-9d0c-8bde674eeeed`. After DeepSeek
|
|
1885
|
+
balance exhaustion, the LocalLLM correctly attempted to create a task-local
|
|
1886
|
+
report source but supplied only a meaningful basename. AgInTiFlow resolved it
|
|
1887
|
+
at the AgenticApp repository root, then rejected its own resolution as outside
|
|
1888
|
+
the host-declared artifact directory and paused for permission. Stronger host
|
|
1889
|
+
permission could not resolve this path-semantics mismatch.
|
|
1890
|
+
|
|
1891
|
+
Workspace writes now interpret a bare basename relative to the artifact root
|
|
1892
|
+
only when the host marks the run as a scoped artifact task, declares exactly
|
|
1893
|
+
one matching artifact root, and enables write access. The returned tool path is
|
|
1894
|
+
the real workspace-relative rooted path. Absolute paths, parent traversal,
|
|
1895
|
+
directory-bearing relative paths, multiple scopes, reads, and ordinary
|
|
1896
|
+
write-scoped work retain the existing containment behavior.
|
|
1897
|
+
|
|
1898
|
+
The production-shaped executor regression proves the pre-fix block, successful
|
|
1899
|
+
write and exact bytes under the authoritative root after the fix, and negative
|
|
1900
|
+
controls for both non-bare relocation and ordinary outside-root writes. Report
|
|
1901
|
+
source grounding remains independently enforced by the authoritative-manifest
|
|
1902
|
+
boundary from scenario 134. No live model, LocalLLM inference, LabCanvas runtime
|
|
1903
|
+
change, queue action, schedule, or transport operation is involved.
|
|
1904
|
+
|
|
1905
|
+
`labcanvas-scoped-artifact-manifest-composition-147` additionally locks the two
|
|
1906
|
+
boundaries together. A model-supplied bare report basename is still inspected as
|
|
1907
|
+
a reader-facing research mutation before workspace execution, so an unread
|
|
1908
|
+
exact-task evidence manifest blocks the write even though the executor would
|
|
1909
|
+
later anchor that basename inside the one authoritative artifact root. Filename
|
|
1910
|
+
recovery therefore cannot turn unsupported report prose into a successful
|
|
1911
|
+
mutation.
|
|
1912
|
+
|
|
1913
|
+
### Named research claims remain traceable after manifest read
|
|
1914
|
+
|
|
1915
|
+
`labcanvas-research-attribution-traceability-148` closes a source-integrity gap
|
|
1916
|
+
after the authoritative manifest has been read. The existing mutation boundary
|
|
1917
|
+
rejected invented citation keys, DOI values, URLs, arXiv IDs, and evidence IDs,
|
|
1918
|
+
but returned early when polished prose omitted an identifier entirely. A weak
|
|
1919
|
+
backend could therefore write a sentence such as `Chen et al. (2026) proved
|
|
1920
|
+
...` without connecting that attribution to any manifest source.
|
|
1921
|
+
|
|
1922
|
+
Reader-facing research mutations now reuse the same multilingual external-claim
|
|
1923
|
+
assessment used by response-only grounding. An attributed evidence claim must
|
|
1924
|
+
contain at least one identifier supported by the task-authoritative manifest.
|
|
1925
|
+
The check is claim-level and applies only under an explicit current research
|
|
1926
|
+
evidence contract after the manifest has been completely read. Ordinary
|
|
1927
|
+
synthesis, clearly labeled assistant-owned hypotheses, manifest edits, stale
|
|
1928
|
+
contracts, and named claims with supported identifiers retain their previous
|
|
1929
|
+
behavior.
|
|
1930
|
+
|
|
1931
|
+
The production-shaped regression first proves the pre-fix acceptance. It then
|
|
1932
|
+
rejects uncited named-study claims in English, Chinese, and Japanese, accepts a
|
|
1933
|
+
supported `S1` citation, and preserves ordinary synthesis and a falsifiable
|
|
1934
|
+
working hypothesis. No live provider, LocalLLM inference, LabCanvas runtime
|
|
1935
|
+
change, queue action, schedule, transport operation, or external side effect is
|
|
1936
|
+
involved.
|
|
1937
|
+
|
|
1938
|
+
### Shell commands cannot bypass research source review
|
|
1939
|
+
|
|
1940
|
+
`labcanvas-research-shell-mutation-boundary-149` follows retained session
|
|
1941
|
+
`web-agent-labcanvas-bc69ea98-1fbd-4289-9609-e01b8b5a04a5`. Its fallback model
|
|
1942
|
+
used `sed -i` to change a task-local TeX report while an authoritative evidence
|
|
1943
|
+
manifest contract was active. That particular edit targeted typography, but
|
|
1944
|
+
`run_command` bypassed both the mandatory manifest read and the claim-level
|
|
1945
|
+
identifier review applied to structured workspace mutations.
|
|
1946
|
+
|
|
1947
|
+
The manifest boundary now recognizes direct shell content mutations to
|
|
1948
|
+
reader-facing research sources. Before the manifest is read, they receive the
|
|
1949
|
+
same unread-manifest recovery. Afterward, in-place `sed` or `perl`, output
|
|
1950
|
+
redirection, `tee`, direct file replacement, and explicit language-runtime file
|
|
1951
|
+
writes are redirected to `apply_patch` or `write_file`, where the proposed text
|
|
1952
|
+
can be reviewed before mutation. Read-only inspection, validators, compiler
|
|
1953
|
+
invocations, non-reader build logs, stale contracts, and explicit edits to the
|
|
1954
|
+
manifest itself retain their previous behavior.
|
|
1955
|
+
|
|
1956
|
+
The production-shaped regression proves the pre-fix shell bypass and covers a
|
|
1957
|
+
nested shell wrapper, Python `Path.write_text`, structured-edit recovery, and
|
|
1958
|
+
the non-mutation controls. The detector is deliberately not a ban on shell use:
|
|
1959
|
+
it isolates direct reader-source editing while leaving validation and build
|
|
1960
|
+
commands available. No live provider, LocalLLM inference, LabCanvas runtime
|
|
1961
|
+
change, queue action, schedule, transport operation, or external side effect is
|
|
1962
|
+
involved.
|
|
1963
|
+
|
|
1964
|
+
### Truthful response stops remain human-facing
|
|
1965
|
+
|
|
1966
|
+
`labcanvas-response-only-natural-source-free-stop-150` follows retained
|
|
1967
|
+
sessions `web-agent-labcanvas-a2400822-729d-400b-8a70-2842e3dcefe8` and
|
|
1968
|
+
`web-agent-labcanvas-d99fc736-db3a-4310-bbe5-c939a779ffca`. Their underlying
|
|
1969
|
+
numeric-classification false positive is already fixed by the earlier numeric
|
|
1970
|
+
boundary, but the traces exposed a separate fallback defect: a genuine
|
|
1971
|
+
twice-rejected source-free claim would still return AgInTi evidence-manifest,
|
|
1972
|
+
tool-scope, and resume instructions as the outward chat answer.
|
|
1973
|
+
|
|
1974
|
+
The fail-closed result now states only the truthful user-facing limitation in
|
|
1975
|
+
English, Chinese, or Japanese. It retains a requested `CHAT:` protocol and is
|
|
1976
|
+
still embedded into the caller's exact strict JSON contract when one exists.
|
|
1977
|
+
The private repair prompt also tells a weaker provider not to expose runtime
|
|
1978
|
+
mechanics. Claim detection, the single bounded repair, paused-session state,
|
|
1979
|
+
and the absence of `session.finished` after repeated unsupported claims are
|
|
1980
|
+
unchanged.
|
|
1981
|
+
|
|
1982
|
+
The deterministic provider-handoff regression forces repeated unsupported
|
|
1983
|
+
publication, year, validation, benchmark, and forecast claims. It checks all
|
|
1984
|
+
three language forms, the chat protocol, the full router schema, and absence of
|
|
1985
|
+
private runtime vocabulary while retaining the existing negative evidence
|
|
1986
|
+
controls. No live provider or LocalLLM inference, LabCanvas runtime change,
|
|
1987
|
+
queue action, schedule, transport operation, or external side effect is
|
|
1988
|
+
involved.
|
|
1989
|
+
|
|
1990
|
+
### JSON contract stops keep diagnostics private
|
|
1991
|
+
|
|
1992
|
+
`labcanvas-response-only-natural-contract-stop-151` extends the same outward
|
|
1993
|
+
response hygiene to strict JSON failures. Existing contract enforcement kept
|
|
1994
|
+
the caller's keys and stopped the session after a second malformed response,
|
|
1995
|
+
but inserted `response-only model`, `output contract`, and missing-key details
|
|
1996
|
+
into a reader-facing string field. That preserved machine parsing while still
|
|
1997
|
+
leaking operator diagnostics into chat or a completion audit.
|
|
1998
|
+
|
|
1999
|
+
The schema-compatible fallback now contains a short, localized statement that
|
|
2000
|
+
a reliable answer in the required format was not produced. Missing keys, type
|
|
2001
|
+
mismatches, enum mismatches, step, provider, and model remain available in the
|
|
2002
|
+
private `response_only.output_contract_failed_closed` event. The caller's exact
|
|
2003
|
+
key order and types, paused state, bounded single repair, and absence of a
|
|
2004
|
+
successful terminal event remain unchanged.
|
|
2005
|
+
|
|
2006
|
+
The deterministic regression covers the retained completion-audit shape and a
|
|
2007
|
+
Chinese chat envelope. It proves exact schema preservation, natural outward
|
|
2008
|
+
text, private diagnostic retention, and zero `session.finished` events after
|
|
2009
|
+
failure. No live provider or LocalLLM inference, LabCanvas runtime change,
|
|
2010
|
+
queue action, schedule, transport operation, or external side effect is
|
|
2011
|
+
involved.
|
|
2012
|
+
|
|
2013
|
+
### Empty response stops are human-facing
|
|
2014
|
+
|
|
2015
|
+
`labcanvas-response-only-natural-empty-stop-152` covers the adjacent case in
|
|
2016
|
+
which a response-only backend returns the exact JSON shape but leaves every
|
|
2017
|
+
reader-facing field empty twice. The bounded repair and fail-closed stop were
|
|
2018
|
+
already correct, but the synthesized chat field exposed the model, retry,
|
|
2019
|
+
session, provider, and resume mechanism.
|
|
2020
|
+
|
|
2021
|
+
The outward fallback is now a short localized statement that a reliable reply
|
|
2022
|
+
was not produced. Empty-payload classification, response keys, provider/model
|
|
2023
|
+
state, and stop reason remain in private state and events. The deterministic
|
|
2024
|
+
English and Chinese regressions preserve the exact caller schema, one repair,
|
|
2025
|
+
paused state, and absence of `session.finished`. No live provider or LocalLLM
|
|
2026
|
+
inference, LabCanvas runtime change, queue action, schedule, transport
|
|
2027
|
+
operation, or external side effect is involved.
|
|
2028
|
+
|
|
2029
|
+
### Unusable-answer stops share one natural boundary
|
|
2030
|
+
|
|
2031
|
+
`labcanvas-natural-unusable-response-stops-153` closes the remaining copies of
|
|
2032
|
+
the same outward diagnostic leak. A weak backend that repeated private runtime
|
|
2033
|
+
scaffolding or returned a blank answer twice stopped safely, but the final chat
|
|
2034
|
+
text instructed the human to resume a saved session with another provider.
|
|
2035
|
+
|
|
2036
|
+
One localized helper now serves ordinary empty responses, response-only empty
|
|
2037
|
+
envelopes, and repeated internal-scaffold failures. Their distinct private
|
|
2038
|
+
events, stop reasons, schema fallbacks, and recoverable paused states are
|
|
2039
|
+
unchanged. Deterministic controls cover ordinary and response-only paths plus
|
|
2040
|
+
English, Chinese, and Japanese output; all require bounded repair and forbid a
|
|
2041
|
+
successful terminal event. No live provider or LocalLLM inference, LabCanvas
|
|
2042
|
+
runtime change, queue action, schedule, transport operation, or external side
|
|
2043
|
+
effect is involved.
|
|
2044
|
+
|
|
2045
|
+
### Scoped tasks cannot borrow sibling artifacts
|
|
2046
|
+
|
|
2047
|
+
`labcanvas-cross-task-artifact-isolation-154` follows retained LabCanvas
|
|
2048
|
+
session `web-agent-labcanvas-064f6714-4b85-463c-af5b-43663f4da56d`. The task
|
|
2049
|
+
declared one authoritative artifact root, but the fallback discovered a sibling
|
|
2050
|
+
task directory, read and validated its report, then finished with that sibling
|
|
2051
|
+
PDF. The file existed and was valid, so ordinary artifact evidence checks could
|
|
2052
|
+
not distinguish it from the current task's result.
|
|
2053
|
+
|
|
2054
|
+
Scoped artifact tasks now derive the containing task namespace from their exact
|
|
2055
|
+
`artifact_root`. Reads, directory probes, shell commands, and completion text
|
|
2056
|
+
may use the current root recursively, but an undeclared sibling root is blocked
|
|
2057
|
+
before inspection or rejected before completion. One bounded repair directs the
|
|
2058
|
+
agent back to the current root. Explicit exact inputs, exact outputs, and
|
|
2059
|
+
declared source roots remain available, so legitimate source reuse is not
|
|
2060
|
+
mistaken for cross-task leakage.
|
|
2061
|
+
|
|
2062
|
+
The regression also exposed that structured contract paths were previously
|
|
2063
|
+
passed through a prose compactor that inserted `... [truncated]` after 120
|
|
2064
|
+
characters. Exact inputs, outputs, exclusions, and source roots now retain their
|
|
2065
|
+
full bounded value up to 1,024 characters. Production-length LabCanvas paths
|
|
2066
|
+
therefore remain usable by the isolation allowlist.
|
|
2067
|
+
|
|
2068
|
+
Deterministic coverage proves rejection and repair of a sibling completion,
|
|
2069
|
+
blocks sibling `read_file` and `run_command` access, permits the current task
|
|
2070
|
+
through both paths, and permits an explicitly declared long sibling source
|
|
2071
|
+
root. No live provider or LocalLLM inference, LabCanvas runtime change, queue
|
|
2072
|
+
action, schedule, transport operation, or external side effect is involved.
|
|
2073
|
+
|
|
2074
|
+
### Tool-capable tasks preserve strict JSON envelopes
|
|
2075
|
+
|
|
2076
|
+
`labcanvas-tool-capable-json-contract-155` follows retained LabCanvas session
|
|
2077
|
+
`web-agent-labcanvas-97e7f45f-b6ef-4fef-aeb2-c21c43e29b41`. The task used
|
|
2078
|
+
normal file and shell tools to verify a repaired PDF, but its host contract also
|
|
2079
|
+
required one strict JSON object. AgInTi accepted a polished prose `finish`
|
|
2080
|
+
result instead. The work itself was valid, but the caller could not consume the
|
|
2081
|
+
answer and started successor sessions against the same task.
|
|
2082
|
+
|
|
2083
|
+
Explicit JSON contracts are now enforced at the shared completion boundary,
|
|
2084
|
+
not only in the response-only fast path. Both assistant-content and `finish`
|
|
2085
|
+
tool completions receive one bounded schema-preserving repair. A repeated
|
|
2086
|
+
violation pauses without a successful terminal event and returns a parseable
|
|
2087
|
+
fallback object with the requested top-level keys and value types, allowing the
|
|
2088
|
+
host to record the limitation without retrying malformed output indefinitely.
|
|
2089
|
+
|
|
2090
|
+
The deterministic regression proves the retained plain-prose failure before
|
|
2091
|
+
the fix, successful repair through both completion modes, exact required-key
|
|
2092
|
+
and value-type preservation, bounded retry count, and schema-valid fail-closed
|
|
2093
|
+
behavior. No live provider or LocalLLM inference, LabCanvas runtime change,
|
|
2094
|
+
queue action, schedule, transport operation, or external side effect is
|
|
2095
|
+
involved.
|
|
2096
|
+
|
|
2097
|
+
### Shell authorization is not mutation evidence
|
|
2098
|
+
|
|
2099
|
+
`labcanvas-observed-shell-noop-mutation-156` follows retained LabCanvas session
|
|
2100
|
+
`web-agent-labcanvas-8d2d6b21-e027-4028-950d-1e090e185083`. A successful shell
|
|
2101
|
+
loop only checked installed document tools and extracted PDF text, but its
|
|
2102
|
+
conservative `writesWorkspace: true` policy advanced the project mutation
|
|
2103
|
+
revision. Similar read-only inspections raised the revision repeatedly even
|
|
2104
|
+
though the trace contained only one actual file patch. This could make a
|
|
2105
|
+
rejected artifact repair appear to have received the required fresh source
|
|
2106
|
+
correction.
|
|
2107
|
+
|
|
2108
|
+
The command executor now records when non-Git before/after worktree observation
|
|
2109
|
+
completed. When that evidence is available, the completion recorder advances
|
|
2110
|
+
the revision only for observed changed worktree paths or verified changed exact
|
|
2111
|
+
outputs. Conservative command classification still controls authorization and
|
|
2112
|
+
sandbox selection. Legacy retained results without the observation marker keep
|
|
2113
|
+
their previous conservative replay behavior, and Git workflows retain their
|
|
2114
|
+
special handling because a clean-to-clean commit or pull can change repository
|
|
2115
|
+
history or content without leaving a dirty worktree.
|
|
2116
|
+
|
|
2117
|
+
The production-shaped regression proves that a successful broadly classified
|
|
2118
|
+
inspection with empty observed path sets preserves revision 5, while existing
|
|
2119
|
+
shell-edit, generated-output, failed-command, Git, no-op workspace-write, and
|
|
2120
|
+
verification cases remain covered. The focused mutation suite, all 207 syntax
|
|
2121
|
+
checks, and the complete deterministic `npm test` gate pass. No live provider
|
|
2122
|
+
or LocalLLM inference, LabCanvas runtime change, queue action, schedule,
|
|
2123
|
+
transport operation, or external side effect is involved.
|
|
2124
|
+
|
|
2125
|
+
### Focused repair packets preserve exact artifact contracts
|
|
2126
|
+
|
|
2127
|
+
`labcanvas-focused-repair-packet-contract-157` continues retained LabCanvas
|
|
2128
|
+
session `web-agent-labcanvas-8d2d6b21-e027-4028-950d-1e090e185083`. Its active
|
|
2129
|
+
scope correctly requested a material PDF repair, while the appended exact task
|
|
2130
|
+
packet named the two rejected PDFs, the missing reader-facing requirement, and
|
|
2131
|
+
the concrete quality defect. Scope narrowing kept only the short request, so
|
|
2132
|
+
SCS saw no exact output path and could accept a nearby or unchanged artifact.
|
|
2133
|
+
|
|
2134
|
+
AgInTi now parses a recognized focused `labcanvas-agent-task-vN` packet through
|
|
2135
|
+
the shared balanced JSON extractor. It projects only bounded repair fields into
|
|
2136
|
+
the internal hard contract: rejected output paths below the active artifact
|
|
2137
|
+
root, remaining artifact requirements, and quality issue identifiers. Packet
|
|
2138
|
+
IDs, retained chat history, route state, scheduler state, and sibling artifact
|
|
2139
|
+
paths are not projected. Packet and retry roots must agree with the active
|
|
2140
|
+
scope; otherwise the projection fails closed.
|
|
2141
|
+
|
|
2142
|
+
The production-shaped regression proves exact-path and quality-defect retention
|
|
2143
|
+
both directly and after the long completion context is compacted. It also
|
|
2144
|
+
injects a sibling PDF and private packet identifier and proves neither enters
|
|
2145
|
+
the output contract or outward outcome. The shared JSON parser keeps its
|
|
2146
|
+
existing perception and response-envelope behavior under focused checks. No
|
|
2147
|
+
live provider or LocalLLM inference, LabCanvas runtime change, queue action,
|
|
2148
|
+
schedule, transport operation, or external side effect is involved.
|
|
2149
|
+
|
|
2150
|
+
### Host-owned compilation cannot hide behind compiler aliases
|
|
2151
|
+
|
|
2152
|
+
`labcanvas-host-compiler-alias-boundary-158` follows retained LabCanvas session
|
|
2153
|
+
`web-agent-labcanvas-756f4598-34c1-4139-bb48-94673a0fac76`. Its contract
|
|
2154
|
+
assigned Unicode PDF compilation and inspection to the trusted host stage, but
|
|
2155
|
+
the fallback tried to recover an unavailable `xelatex` binary through
|
|
2156
|
+
`xetex -fmt=xelatex`. That compile was bundled after a scratch-directory
|
|
2157
|
+
deletion, so generic shell policy stopped the task for destructive approval
|
|
2158
|
+
before the host-ownership contract could redirect it.
|
|
2159
|
+
|
|
2160
|
+
Host-owned document compilation is now recognized before ordinary shell
|
|
2161
|
+
permission classification, and direct `xetex` invocation is covered alongside
|
|
2162
|
+
the existing LaTeX engines and build wrappers. The complete command remains
|
|
2163
|
+
unexecuted and receives the existing bounded instruction to finish the editable
|
|
2164
|
+
source for the host stage. Agent-owned document builds still use their normal
|
|
2165
|
+
policy, and destructive commands without an exclusive host-compile contract
|
|
2166
|
+
still require approval.
|
|
2167
|
+
|
|
2168
|
+
The production-shaped regression includes the retained scratch reset and
|
|
2169
|
+
`xetex -fmt=xelatex` alias, plus direct, environment-prefixed, shell-wrapped,
|
|
2170
|
+
ordinary agent-owned, conditional-host-fallback, and non-compiling source-check
|
|
2171
|
+
controls. No live provider or LocalLLM inference, LabCanvas runtime change,
|
|
2172
|
+
queue action, schedule, transport operation, or external side effect is
|
|
2173
|
+
involved.
|
|
2174
|
+
|
|
2175
|
+
### Optional archival cannot stall the active task
|
|
2176
|
+
|
|
2177
|
+
`labcanvas-unrequested-artifact-archive-recovery-159` follows the retained
|
|
2178
|
+
blocked event in LabCanvas session
|
|
2179
|
+
`web-agent-labcanvas-c19ceaee-0b19-4ef3-96f9-43e25ab3dff1`. After substantive
|
|
2180
|
+
report work, the fallback bundled validation with moving three prior PDFs into
|
|
2181
|
+
`_superseded_drafts/`. The active task did not request archival, but unrelated
|
|
2182
|
+
history inside the full host packet could be mistaken for current mutation
|
|
2183
|
+
intent, so the whole task paused for destructive approval.
|
|
2184
|
+
|
|
2185
|
+
Permission intent now uses the authoritative task-scoped request when an
|
|
2186
|
+
`AGINTI_EVIDENCE_SCOPE_JSON` envelope is present. A move is optional
|
|
2187
|
+
housekeeping only when every source is an explicit workspace-relative file and
|
|
2188
|
+
the destination is a clearly archival workspace-relative directory. The move
|
|
2189
|
+
remains blocked and no file is relocated; AgInTi continues with the substantive
|
|
2190
|
+
checks. Globs, outside paths, ordinary renames, arbitrary destinations, and
|
|
2191
|
+
explicit current archive requests remain under normal mutation policy.
|
|
2192
|
+
|
|
2193
|
+
The regression proves the exact retained command changes from a permission
|
|
2194
|
+
pause to bounded recovery, stale archive instructions cannot override the
|
|
2195
|
+
active task, and an active archive request cannot be erased by stale no-move
|
|
2196
|
+
memory. No live provider or LocalLLM inference, LabCanvas runtime change, queue
|
|
2197
|
+
action, schedule, transport operation, or external side effect is involved.
|
|
2198
|
+
|
|
2199
|
+
### Generic replacement wording does not load a video workflow
|
|
2200
|
+
|
|
2201
|
+
`labcanvas-focused-replacement-skill-routing-160` follows a retained LabCanvas
|
|
2202
|
+
PDF repair whose exact scoped request was correctly isolated from same-chat
|
|
2203
|
+
history. Skill scoring still selected `video-face-image-replacement` because
|
|
2204
|
+
the ordinary document phrase "replacement PDF" matched one component of that
|
|
2205
|
+
multi-part skill ID. This spent a local-model skill slot and prompt budget on
|
|
2206
|
+
an unrelated media workflow.
|
|
2207
|
+
|
|
2208
|
+
`replacement` is now ignored as a standalone skill-ID routing token. Specific
|
|
2209
|
+
video-face trigger phrases still select the workflow, while a focused PDF
|
|
2210
|
+
replacement keeps document skills and omits video guidance. The change affects
|
|
2211
|
+
only skill discovery; task memory, evidence contracts, tool availability, and
|
|
2212
|
+
LabCanvas policy remain unchanged.
|
|
2213
|
+
|
|
2214
|
+
### Response-only chat does not load an external-media workflow
|
|
2215
|
+
|
|
2216
|
+
`labcanvas-response-only-external-skill-routing-161` follows retained
|
|
2217
|
+
response-only LabCanvas sessions that selected `doubao-external-audio-video`.
|
|
2218
|
+
The current-task scoping itself was correct, but its generic phrase "without
|
|
2219
|
+
external execution" matched the single `external` token in that skill ID.
|
|
2220
|
+
|
|
2221
|
+
`external` is now ignored as a standalone skill-ID routing token. An ordinary
|
|
2222
|
+
response-only chat turn no longer spends local context on Doubao guidance, and
|
|
2223
|
+
an explicit Doubao external-audio video request still selects the workflow via
|
|
2224
|
+
its specific trigger. No response contract, execution policy, memory, provider,
|
|
2225
|
+
or host integration behavior changes.
|
|
2226
|
+
|
|
2227
|
+
### Generic research stays focused while explicit subdomains still route
|
|
2228
|
+
|
|
2229
|
+
`labcanvas-research-skill-routing-162` follows retained LabCanvas session
|
|
2230
|
+
`web-agent-labcanvas-064f6714-4b85-463c-af5b-43663f4da56d`. A normal daily
|
|
2231
|
+
biomedical-research request loaded market-report, grant-writing, and literature-
|
|
2232
|
+
lookup skills because the generic `research` component of each external skill ID
|
|
2233
|
+
was sufficient evidence. Conversely, natural singular wording such as "NIH
|
|
2234
|
+
grant proposal" did not match plural metadata and omitted the relevant grant
|
|
2235
|
+
skill.
|
|
2236
|
+
|
|
2237
|
+
Generic `research` and `report` components no longer route compound skill IDs.
|
|
2238
|
+
The built-in deep-research skill explicitly owns plain research requests, and
|
|
2239
|
+
conservative English singular/plural matching lets domain-bearing words such as
|
|
2240
|
+
`grant`/`grants`, `proposal`/`proposals`, and `report`/`reports` match without
|
|
2241
|
+
stemming unrelated text. Deterministic controls preserve explicit market
|
|
2242
|
+
research, grant, and literature lookup routes while excluding unrelated
|
|
2243
|
+
research/report skills. No live provider or LocalLLM inference, LabCanvas
|
|
2244
|
+
runtime change, queue action, schedule, transport operation, or external side
|
|
2245
|
+
effect is involved.
|
|
2246
|
+
|
|
2247
|
+
### Machine repair identifiers do not route domain skills
|
|
2248
|
+
|
|
2249
|
+
`labcanvas-machine-repair-code-skill-routing-163` follows retained LabCanvas
|
|
2250
|
+
PDF-repair session `web-agent-labcanvas-23dfa04f-cef4-4d48-a99e-b152eacf4a99`.
|
|
2251
|
+
The active request included quality identifiers such as
|
|
2252
|
+
`missing_source_level_methods_results_limits` and
|
|
2253
|
+
`missing_actionable_experiments_or_decisions`. Skill routing split those opaque
|
|
2254
|
+
host-contract values into English words and loaded analytical-method validation,
|
|
2255
|
+
clinical decision support, and transcript/video splitting, consuming bounded
|
|
2256
|
+
skill slots during an ordinary report repair.
|
|
2257
|
+
|
|
2258
|
+
Pre-routing normalization now removes multi-part snake-case identifiers before
|
|
2259
|
+
semantic scoring. Natural prose, file extensions, one-underscore names, and
|
|
2260
|
+
explicit hyphenated skill IDs remain available. The production-shaped regression
|
|
2261
|
+
keeps PDF, source-ingestion, and LaTeX guidance while excluding the three false
|
|
2262
|
+
domains; separate natural-language controls still select each excluded skill
|
|
2263
|
+
when it is genuinely requested. No live provider or LocalLLM inference,
|
|
2264
|
+
LabCanvas runtime change, queue action, schedule, transport operation, or
|
|
2265
|
+
external side effect is involved.
|
|
2266
|
+
|
|
2267
|
+
### Response-only host nouns do not activate domain workflows
|
|
2268
|
+
|
|
2269
|
+
`labcanvas-response-only-host-noun-skill-routing-164` follows retained
|
|
2270
|
+
LabCanvas response-only session
|
|
2271
|
+
`web-agent-labcanvas-dc5db4bc-5d33-427b-aafb-042e44ef9595`. The exact scoped
|
|
2272
|
+
instruction said that the LabCanvas host owned persistence, compilation,
|
|
2273
|
+
validation, and delivery, but the generic words `LabCanvas` and `validation`
|
|
2274
|
+
activated WeChat chatops and analytical-method-validation skills in a turn that
|
|
2275
|
+
explicitly prohibited external action.
|
|
2276
|
+
|
|
2277
|
+
Those platform/control nouns are now ignored as standalone compound skill-ID
|
|
2278
|
+
evidence. Explicit natural requests for WeChat chatops and analytical-method
|
|
2279
|
+
validation still select the correct skills through stronger domain terms and
|
|
2280
|
+
specific triggers. The change affects only skill discovery; response schemas,
|
|
2281
|
+
task context, tool policy, and host ownership remain unchanged. No live provider
|
|
2282
|
+
or LocalLLM inference, LabCanvas runtime change, queue action, schedule,
|
|
2283
|
+
transport operation, or external side effect is involved.
|
|
2284
|
+
|
|
2285
|
+
### Generic follow-up prose does not satisfy unrelated skill descriptions
|
|
2286
|
+
|
|
2287
|
+
`labcanvas-generic-followup-description-routing-165` follows retained
|
|
2288
|
+
LabCanvas session `web-agent-labcanvas-4bbdae1d-4870-4392-8073-3bccc981a4f3`.
|
|
2289
|
+
Its focused request asked for a complete natural replacement covering the exact
|
|
2290
|
+
current requirements, but ordinary words such as `current`, `requests`, and
|
|
2291
|
+
`explicitly` jointly satisfied the protocols.io description threshold. The
|
|
2292
|
+
fallback consequently spent a bounded skill slot on an unrelated protocol
|
|
2293
|
+
integration during response repair.
|
|
2294
|
+
|
|
2295
|
+
Description stop words now apply through the same conservative singular/plural
|
|
2296
|
+
forms used for positive matching, so `request` also suppresses generic
|
|
2297
|
+
`requests`. Generic control terms such as `current` and `explicitly` no longer
|
|
2298
|
+
act as domain evidence, and `integration` alone cannot route every integration
|
|
2299
|
+
skill by ID. The exact retained follow-up now selects no unrelated skill, while
|
|
2300
|
+
an explicit protocolsio integration request selects only protocols.io rather
|
|
2301
|
+
than sibling Benchling, DNAnexus, LabArchives, or LatchBio integrations. No live
|
|
2302
|
+
provider or LocalLLM inference, LabCanvas runtime change, queue action, schedule,
|
|
2303
|
+
transport operation, or external side effect is involved.
|
|
2304
|
+
|
|
2305
|
+
### Dotted service names remain distinct from filenames
|
|
2306
|
+
|
|
2307
|
+
`labcanvas-dotted-service-skill-routing-166` covers a natural request to read
|
|
2308
|
+
and export an exact `protocols.io` protocol. Existing path-noise normalization
|
|
2309
|
+
treated the service name as an `.io` filename, so neither ordinary prose nor an
|
|
2310
|
+
official protocols.io URL selected its integration skill. The synthetic
|
|
2311
|
+
undotted spelling `protocolsio` worked, but users should not need to know an
|
|
2312
|
+
internal skill ID.
|
|
2313
|
+
|
|
2314
|
+
Skill routing now derives dotted identities from a skill's own ID, label,
|
|
2315
|
+
description, and triggers. A matching bare domain, subdomain, or HTTP(S) URL
|
|
2316
|
+
adds strong identity evidence only when the compact dotted name occurs in that
|
|
2317
|
+
skill's declared identity. File paths and extension-bearing lookalikes such as
|
|
2318
|
+
`docs/protocols.io.md`, `/tmp/protocols.io`, and `protocols.io.txt` remain under
|
|
2319
|
+
file normalization and do not activate the integration. This is metadata-driven
|
|
2320
|
+
rather than a protocols.io exception and does not weaken path-noise isolation.
|
|
2321
|
+
No live provider or LocalLLM inference, LabCanvas runtime change, queue action,
|
|
2322
|
+
schedule, transport operation, or external side effect is involved.
|
|
2323
|
+
|
|
2324
|
+
### Completion-audit requirements are diagnostics, not external claims
|
|
2325
|
+
|
|
2326
|
+
`labcanvas-completion-audit-requirement-source-free-167` follows retained
|
|
2327
|
+
LabCanvas session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`.
|
|
2328
|
+
The completion auditor correctly returned the missing requirement
|
|
2329
|
+
`Per reprocess instruction, put the validated PDF itself in candidate_result.`
|
|
2330
|
+
The generic source-free claim validator then read the diagnostic phrase
|
|
2331
|
+
`validated PDF` as an assertion of external validation and rejected the audit,
|
|
2332
|
+
spending an unnecessary model turn before the retained run was interrupted.
|
|
2333
|
+
|
|
2334
|
+
For an explicit completion-audit role with the declared audit schema, source-
|
|
2335
|
+
free claim scanning now uses a temporary copy with only
|
|
2336
|
+
`missing[].requirement` removed. The actual audit result is unchanged. The
|
|
2337
|
+
auditor's `summary`, ordinary response-only output, and every other evidence
|
|
2338
|
+
validator remain covered; regressions prove both negative controls and exact
|
|
2339
|
+
one-call completion for the retained requirement. No live provider or LocalLLM
|
|
2340
|
+
inference, LabCanvas runtime change, queue action, schedule, transport
|
|
2341
|
+
operation, or external side effect is involved.
|
|
2342
|
+
|
|
2343
|
+
### Completion-audit IDs stay bound to the exact task packet
|
|
2344
|
+
|
|
2345
|
+
`labcanvas-completion-audit-item-identity-168` continues the retained LabCanvas
|
|
2346
|
+
session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`. Its fallback
|
|
2347
|
+
copied example IDs `source:123` and `interruption:456` from the output schema
|
|
2348
|
+
instead of classifying the actual packet items, yet the structurally valid JSON
|
|
2349
|
+
could reach terminal success. That could mark the wrong chat message covered
|
|
2350
|
+
while silently omitting a consecutive or interrupted request.
|
|
2351
|
+
|
|
2352
|
+
Explicit completion-audit turns now derive their allowed IDs from the final
|
|
2353
|
+
task packet and require every request item to appear exactly once across
|
|
2354
|
+
`covered_item_ids` and `missing[].item_id`. Unknown, omitted, duplicated,
|
|
2355
|
+
overlapping, and malformed references receive one bounded repair with the exact
|
|
2356
|
+
allowed IDs. If repair still fails, the run stops without `session.finished`
|
|
2357
|
+
and returns a schema-valid audit that conservatively marks every actual item
|
|
2358
|
+
missing. The retained phantom-ID case, valid result, overlap, repeated failure,
|
|
2359
|
+
and an unrelated strict JSON envelope are covered. No live provider or LocalLLM
|
|
2360
|
+
inference, LabCanvas runtime change, queue action, schedule, transport
|
|
2361
|
+
operation, or external side effect is involved.
|
|
2362
|
+
|
|
2363
|
+
### Completion-audit missing entries preserve their nested contract
|
|
2364
|
+
|
|
2365
|
+
`labcanvas-completion-audit-missing-entry-shape-169` extends the same retained
|
|
2366
|
+
completion-audit boundary. After exact item identity was enforced, an audit
|
|
2367
|
+
could still classify the right task ID as missing while omitting its actionable
|
|
2368
|
+
`requirement` and returning a `kind` outside the declared
|
|
2369
|
+
`reply|artifact|action` choices. The top-level JSON remained structurally valid,
|
|
2370
|
+
so downstream repair could receive an unusable or misrouted instruction.
|
|
2371
|
+
|
|
2372
|
+
The explicit completion-audit contract now derives each `missing[]` entry's
|
|
2373
|
+
required keys, types, and pipe-delimited enums from the caller's own example.
|
|
2374
|
+
Missing fields, wrong types, empty requirements, non-object entries, and enum
|
|
2375
|
+
violations join the existing item-identity diagnostics and receive the same one
|
|
2376
|
+
bounded repair. This remains scoped to an explicit `completion_audit` role with
|
|
2377
|
+
a recognized task packet; unrelated strict JSON envelopes retain their prior
|
|
2378
|
+
behavior. The before-fix case completed in one call, while the repaired case and
|
|
2379
|
+
provider-handoff compatibility control now pass. No live provider or LocalLLM
|
|
2380
|
+
inference, LabCanvas runtime change, queue action, schedule, transport
|
|
2381
|
+
operation, or external side effect is involved.
|
|
2382
|
+
|
|
2383
|
+
### Explicitly closed JSON envelopes reject undeclared fields
|
|
2384
|
+
|
|
2385
|
+
`labcanvas-strict-json-unexpected-fields-170` extends the retained response-only
|
|
2386
|
+
host-envelope cases. AgInTi already required every declared top-level key, type,
|
|
2387
|
+
and enum, but it accepted additional fields. A fallback could therefore return
|
|
2388
|
+
the correct host payload plus undeclared provider, trace, status, or runtime
|
|
2389
|
+
metadata and still finish, despite an explicit `strict`, `exactly`, `only`, or
|
|
2390
|
+
`no prose` contract.
|
|
2391
|
+
|
|
2392
|
+
Contract discovery now records whether the exact schema marker closes the
|
|
2393
|
+
top-level shape. Explicit strict/exact/only/no-prose markers and JSON
|
|
2394
|
+
schema/shape/format headings reject undeclared fields, report their names, and
|
|
2395
|
+
use the existing one bounded repair and schema-valid fail-closed path. A plain
|
|
2396
|
+
`Return JSON:` example remains extensible and can carry useful optional fields.
|
|
2397
|
+
Regressions cover both tool-capable completion and DeepSeek-to-LocalLLM
|
|
2398
|
+
response-only handoff, plus the open-shape compatibility control. No live
|
|
2399
|
+
provider or LocalLLM inference, LabCanvas runtime change, queue action,
|
|
2400
|
+
schedule, transport operation, or external side effect is involved.
|
|
2401
|
+
|
|
2402
|
+
### Completion audits cannot invent legitimate blockers
|
|
2403
|
+
|
|
2404
|
+
`labcanvas-completion-audit-false-blocker-171` comes from retained production
|
|
2405
|
+
session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`. One audit
|
|
2406
|
+
correctly identified that the candidate had produced no reply or artifact, but
|
|
2407
|
+
also returned `legitimate_blocker=true` with an empty `covered_item_ids` array.
|
|
2408
|
+
The candidate had not described a login, approval, dependency, safety, or other
|
|
2409
|
+
blocker. Exact item-identity validation therefore passed a contradictory audit
|
|
2410
|
+
that could turn ordinary missing work into a terminal excuse.
|
|
2411
|
+
|
|
2412
|
+
Completion-audit contract discovery now records whether the exact packet's
|
|
2413
|
+
`candidate_result` actually contains a blocker explanation. A true
|
|
2414
|
+
`legitimate_blocker` is valid only when that candidate evidence exists and the
|
|
2415
|
+
audit places at least one exact task item in `covered_item_ids`, as required by
|
|
2416
|
+
the host contract. Unsupported blocker flags receive the existing single
|
|
2417
|
+
bounded schema repair; repeated invalid output still fails closed with all
|
|
2418
|
+
actual item IDs marked missing and `legitimate_blocker=false`.
|
|
2419
|
+
|
|
2420
|
+
The regression preserves normal missing-work audits, accepts genuine English,
|
|
2421
|
+
Chinese, and Japanese authentication blockers while rejecting their explicit
|
|
2422
|
+
no-blocker forms, and covers the DeepSeek-to-LocalLLM response-only handoff. It
|
|
2423
|
+
performs no live provider inference, LabCanvas runtime change, queue action,
|
|
2424
|
+
schedule operation, transport operation, or external side effect.
|
|
2425
|
+
|
|
2426
|
+
### Empty candidates cannot cover requested work
|
|
2427
|
+
|
|
2428
|
+
`labcanvas-completion-audit-empty-candidate-coverage-172` was found by pairing
|
|
2429
|
+
every retained completion-audit prompt with its exact task packet and terminal
|
|
2430
|
+
result. Seven audits put one or more exact request IDs in `covered_item_ids`
|
|
2431
|
+
while the explicit `candidate_result` contained no message, file, publication
|
|
2432
|
+
state, generated content, or other meaningful value. Their own summaries said
|
|
2433
|
+
the reply, PDF, or video delivery was missing, but the contradictory structured
|
|
2434
|
+
classification could prevent that work from being reprocessed.
|
|
2435
|
+
|
|
2436
|
+
When an explicit completion-audit packet includes `candidate_result`, contract
|
|
2437
|
+
validation now records whether it has any meaningful output. A genuinely empty
|
|
2438
|
+
candidate cannot cover an item. It receives one bounded repair, and repeated
|
|
2439
|
+
invalid coverage stops conservatively with the actual item marked missing.
|
|
2440
|
+
This rule does not infer emptiness when an older generic packet omits
|
|
2441
|
+
`candidate_result`, and it permits an empty candidate when the exact human
|
|
2442
|
+
request explicitly asks for no reply or a blank response.
|
|
2443
|
+
|
|
2444
|
+
Regressions cover the retained contradiction, bounded repair, repeated-invalid
|
|
2445
|
+
fail-closed behavior, explicit-silence compatibility, omitted-candidate
|
|
2446
|
+
compatibility, and DeepSeek-to-LocalLLM response-only handoff. No live provider
|
|
2447
|
+
or LocalLLM inference, LabCanvas runtime change, queue action, schedule,
|
|
2448
|
+
transport operation, or external side effect is involved.
|
|
2449
|
+
|
|
2450
|
+
### Local-server smoke tests preserve foreign listeners
|
|
2451
|
+
|
|
2452
|
+
`webapp-command-occupied-port-isolation-173` came from the full package gate,
|
|
2453
|
+
not a synthetic model response. The slash-command smoke selected a random port
|
|
2454
|
+
already occupied on the shared workstation. AgInTiFlow correctly started its
|
|
2455
|
+
webapp on the next compatible port, but the smoke waited only for the original
|
|
2456
|
+
URL and timed out. Its cleanup then used `lsof` against the requested port,
|
|
2457
|
+
which could terminate the unrelated listener while leaving the actual fallback
|
|
2458
|
+
webapp behind.
|
|
2459
|
+
|
|
2460
|
+
The smoke now reserves an occupied kernel-assigned port deliberately, accepts
|
|
2461
|
+
the verified fallback URL printed by the CLI, and checks that the foreign
|
|
2462
|
+
listener survives. Cleanup extracts only URLs observed during that test and
|
|
2463
|
+
calls the normal ownership-aware webapp stop API with the exact temporary
|
|
2464
|
+
runtime directory and home. It no longer kills arbitrary listeners by port.
|
|
2465
|
+
Repeated focused runs also prove that no test-owned fallback process remains.
|
|
2466
|
+
The full gate then exposed the same fixed-range random-port assumption in the
|
|
2467
|
+
standalone public-research smoke. All affected Studio fixtures now ask the
|
|
2468
|
+
kernel for an ephemeral loopback port and consume the child process's announced
|
|
2469
|
+
URL, so a release-to-bind race still follows the product's normal fallback.
|
|
2470
|
+
The standalone public-research CLI accepts port `0` and reports the actual
|
|
2471
|
+
kernel-assigned URL, eliminating that race without probing or killing any
|
|
2472
|
+
foreign listener.
|
|
2473
|
+
|
|
2474
|
+
### Ambiguous-input clarification is not a forecast
|
|
2475
|
+
|
|
2476
|
+
`labcanvas-ambiguous-input-negated-forecast-174` correlates three retained
|
|
2477
|
+
response-only failures for the bare message `199793`. The router correctly
|
|
2478
|
+
selected natural clarification, but explanations such as “not enough context
|
|
2479
|
+
to predict intent” or “no forecast is requested” contained forecast vocabulary.
|
|
2480
|
+
The evidence guard treated that metalinguistic wording as an external future
|
|
2481
|
+
claim, retried it, then stopped the otherwise valid route.
|
|
2482
|
+
|
|
2483
|
+
The source-free validator now recognizes bounded English, Chinese, and Japanese
|
|
2484
|
+
ambiguous-input explanations and explicit forecast negation. This exception is
|
|
2485
|
+
semantic rather than route-specific: the same sentence must name an ambiguous
|
|
2486
|
+
input or actually negate forecasting, and it stops applying when any residual
|
|
2487
|
+
text asserts a future outcome. Genuine claims such as “the market analysis
|
|
2488
|
+
predicts demand will grow next year” remain fail-closed. A deterministic
|
|
2489
|
+
DeepSeek-to-LocalLLM handoff regression proves the production-shaped route
|
|
2490
|
+
finishes in the first fallback turn without requiring evidence or changing the
|
|
2491
|
+
caller envelope.
|
|
2492
|
+
|
|
2493
|
+
### Progress acknowledgements cannot close substantive tasks
|
|
2494
|
+
|
|
2495
|
+
`labcanvas-completion-audit-status-only-coverage-175` comes from retained
|
|
2496
|
+
production session `web-agent-labcanvas-7159acc2-9bbe-4254-825b-ed6819f8e269`.
|
|
2497
|
+
A completion candidate said that it would send the finished portion now and
|
|
2498
|
+
supplement the uncovered messages later. The message was nonempty, so the
|
|
2499
|
+
existing empty-candidate safeguard could not prevent an audit from placing the
|
|
2500
|
+
substantive research item in `covered_item_ids`. This is the failure mode behind
|
|
2501
|
+
apparently responsive chat that never delivers the promised answer or artifact.
|
|
2502
|
+
|
|
2503
|
+
Completion-audit contract discovery now distinguishes a human-facing result
|
|
2504
|
+
from a receipt, progress report, queue notice, generic completion assertion, or
|
|
2505
|
+
promise of later delivery. A status-only candidate cannot cover a substantive
|
|
2506
|
+
task item. It gets the existing one bounded repair; repeated invalid coverage
|
|
2507
|
+
fails closed with every exact packet item retained as missing. The test surface
|
|
2508
|
+
uses semantic English, Chinese, and Japanese forms rather than a LabCanvas
|
|
2509
|
+
route or transport special case.
|
|
2510
|
+
|
|
2511
|
+
The compatibility boundary is explicit. A short social turn, a request that
|
|
2512
|
+
asks only for acknowledgement, and a pure status question may be answered with
|
|
2513
|
+
status text. A concrete answer following an acknowledgement, a real attachment,
|
|
2514
|
+
a confirmation question, generated content, publication state, or a genuine
|
|
2515
|
+
blocker remains substantive. Deterministic regressions cover bounded repair,
|
|
2516
|
+
repeated-invalid fail-closed behavior, negated acknowledgement wording, and
|
|
2517
|
+
DeepSeek-to-LocalLLM handoff. No live provider or LocalLLM inference, LabCanvas
|
|
2518
|
+
runtime change, queue action, schedule, transport operation, or external side
|
|
2519
|
+
effect is involved.
|
|
2520
|
+
|
|
2521
|
+
### Text answers cannot stand in for requested artifacts
|
|
2522
|
+
|
|
2523
|
+
`labcanvas-completion-audit-artifact-coverage-176` extends the retained
|
|
2524
|
+
completion-audit family behind repeated LabCanvas reports that an answer
|
|
2525
|
+
arrived but its requested PDF did not. The auditor could place an exact item in
|
|
2526
|
+
`covered_item_ids` when `candidate_result` contained a useful answer but an
|
|
2527
|
+
empty `files` list. Empty- and status-only-candidate checks did not apply
|
|
2528
|
+
because the answer itself was substantive.
|
|
2529
|
+
|
|
2530
|
+
Completion-audit contract discovery now derives explicit material artifact
|
|
2531
|
+
requirements from each exact request item and compares them with structured
|
|
2532
|
+
candidate evidence. Files, attachments, artifacts, deliverables, matching
|
|
2533
|
+
extensions and MIME types, and host-owned generated PDF content count; a prose
|
|
2534
|
+
claim that a file was sent does not. The check covers common document, image,
|
|
2535
|
+
video, audio, archive, and CAD formats in English, Chinese, and Japanese.
|
|
2536
|
+
|
|
2537
|
+
The intent boundary distinguishes outputs from inputs: reading a PDF,
|
|
2538
|
+
analyzing an attached video, or sending a summary of a video does not require
|
|
2539
|
+
the source media to be returned. Negated artifact requests remain text-only.
|
|
2540
|
+
One invalid audit receives the existing bounded repair. Repeated invalid
|
|
2541
|
+
coverage fails closed with the original exact request retained as a missing
|
|
2542
|
+
artifact item. Deterministic tests cover direct execution and
|
|
2543
|
+
DeepSeek-to-LocalLLM handoff without live inference, LabCanvas changes, queue
|
|
2544
|
+
actions, schedules, transports, or external side effects.
|
|
2545
|
+
|
|
2546
|
+
### Completion audits enforce negative artifact contracts
|
|
2547
|
+
|
|
2548
|
+
`labcanvas-completion-audit-forbidden-artifact-177` comes from retained
|
|
2549
|
+
production session `web-agent-labcanvas-f8f84223-7216-4bcf-abe6-999d4fb074ff`.
|
|
2550
|
+
Its exact inspiration request required one natural chat message and explicitly
|
|
2551
|
+
said to create no files or attachments. The candidate nevertheless placed
|
|
2552
|
+
`worker_result.json` in the structured outbound file list. The model called it
|
|
2553
|
+
an internal transport envelope and treated the request as covered, contradicting
|
|
2554
|
+
the packet rule that `candidate_result.files` is the outbound attachment list.
|
|
2555
|
+
|
|
2556
|
+
Completion-audit contract discovery now derives negative artifact constraints
|
|
2557
|
+
from each exact request item. Structured files and generated document, image,
|
|
2558
|
+
video, or audio content cannot satisfy a covered message-only item when that
|
|
2559
|
+
item forbids them. Format-specific exclusions remain narrow: a PDF-only request
|
|
2560
|
+
may reject an extra Markdown source without rejecting the PDF. A separate exact
|
|
2561
|
+
item that positively requests an artifact wins only for that independent
|
|
2562
|
+
requirement, preserving consecutive-message composition instead of applying a
|
|
2563
|
+
global no-file switch.
|
|
2564
|
+
|
|
2565
|
+
The retained shape previously completed in one call. Deterministic regressions
|
|
2566
|
+
now cover English, Chinese, and Japanese wording, generated document content,
|
|
2567
|
+
specific-format exclusions, mixed request packets, one bounded repair,
|
|
2568
|
+
schema-compatible failure, and DeepSeek-to-LocalLLM handoff. No live provider
|
|
2569
|
+
or LocalLLM inference, LabCanvas change, queue action, schedule, transport, or
|
|
2570
|
+
external side effect is involved.
|
|
2571
|
+
|
|
2572
|
+
### Unverified inspirations may contain proposed experiment parameters
|
|
2573
|
+
|
|
2574
|
+
`labcanvas-source-free-inspiration-experiment-178` follows retained production
|
|
2575
|
+
session `web-agent-labcanvas-acfafa25-d3c5-4a4e-9e12-1813973211a2`. A scheduled
|
|
2576
|
+
inspiration explicitly returned `一个未经本机验证的灵感假设`, a falsifiable biological
|
|
2577
|
+
idea, counterexample, and proposed `0/2/4`-hour experiment. The source-free
|
|
2578
|
+
guard rejected it twice: it did not recognize that natural Chinese hypothesis
|
|
2579
|
+
framing, then classified numeric protocol settings and the instruction to
|
|
2580
|
+
validate paired data as completed benchmark and external-evidence claims.
|
|
2581
|
+
|
|
2582
|
+
The source-free classifier now recognizes this assistant-owned unverified
|
|
2583
|
+
hypothesis form even when it appears inside a structured response. It also
|
|
2584
|
+
distinguishes proposed experiment parameters and next-step validation from
|
|
2585
|
+
claims about already observed results. The exception does not cover completed
|
|
2586
|
+
validation or benchmark language, attributed sources, named journals, or named
|
|
2587
|
+
external tools; those still require fresh scoped evidence.
|
|
2588
|
+
|
|
2589
|
+
The exact retained goal and candidate now pass directly. Deterministic tests
|
|
2590
|
+
cover the structured Chinese response, numeric group/duration parameters,
|
|
2591
|
+
completed-result and named-tool negatives, and DeepSeek-to-LocalLLM handoff.
|
|
2592
|
+
No live provider or LocalLLM inference, LabCanvas change, queue action,
|
|
2593
|
+
schedule, transport, or external side effect is involved.
|