@piagent/platform 1.5.1 → 1.5.3
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/CHANGELOG.md +44 -1
- package/README.md +8 -2
- package/README.vi.md +23 -1
- package/benchmarks/capability-v1/DESIGN.md +30 -0
- package/benchmarks/capability-v1/coverage.json +23 -1
- package/benchmarks/capability-v1/grade.mjs +246 -0
- package/benchmarks/capability-v1/project/apps/web/src/control-view.js +3 -0
- package/benchmarks/capability-v1/project/apps/web/src/timeline-view.js +3 -0
- package/benchmarks/capability-v1/project/packages/session/src/admission.js +7 -0
- package/benchmarks/capability-v1/project/packages/session/src/runtime-route.js +3 -0
- package/benchmarks/capability-v1/project/packages/timeline/src/checkpoint.js +7 -0
- package/benchmarks/capability-v1/project/packages/timeline/src/project.js +7 -0
- package/benchmarks/capability-v1/project/test/smoke.test.js +19 -1
- package/benchmarks/capability-v1/prompts/causal-timeline-recovery.md +47 -0
- package/benchmarks/capability-v1/prompts/durable-session-control-plane.md +47 -0
- package/benchmarks/capability-v1/references/causal-timeline-recovery/apps/web/src/timeline-view.js +9 -0
- package/benchmarks/capability-v1/references/causal-timeline-recovery/packages/timeline/src/checkpoint.js +22 -0
- package/benchmarks/capability-v1/references/causal-timeline-recovery/packages/timeline/src/project.js +77 -0
- package/benchmarks/capability-v1/references/durable-session-control-plane/apps/web/src/control-view.js +4 -0
- package/benchmarks/capability-v1/references/durable-session-control-plane/packages/session/src/admission.js +52 -0
- package/benchmarks/capability-v1/references/durable-session-control-plane/packages/session/src/runtime-route.js +27 -0
- package/benchmarks/capability-v1/rubric.json +26 -0
- package/benchmarks/capability-v1/suite.json +32 -4
- package/benchmarks/capability-v1/variant.mjs +11 -0
- package/benchmarks/deep-logic-v1/grade.mjs +165 -0
- package/benchmarks/deep-logic-v1/project/README.md +3 -0
- package/benchmarks/deep-logic-v1/project/package.json +6 -0
- package/benchmarks/deep-logic-v1/project/src/config-transaction.js +3 -0
- package/benchmarks/deep-logic-v1/project/src/context-pack.js +3 -0
- package/benchmarks/deep-logic-v1/project/src/event-reconcile.js +3 -0
- package/benchmarks/deep-logic-v1/project/src/policy.js +3 -0
- package/benchmarks/deep-logic-v1/project/src/scheduler.js +3 -0
- package/benchmarks/deep-logic-v1/project/src/stream.js +3 -0
- package/benchmarks/deep-logic-v1/project/test/smoke.test.js +20 -0
- package/benchmarks/deep-logic-v1/prompts/budgeted-context-graph.md +13 -0
- package/benchmarks/deep-logic-v1/prompts/fair-dependency-scheduler.md +13 -0
- package/benchmarks/deep-logic-v1/prompts/layered-policy-resolution.md +14 -0
- package/benchmarks/deep-logic-v1/prompts/resumable-stream-assembly.md +13 -0
- package/benchmarks/deep-logic-v1/prompts/revision-event-reconciliation.md +14 -0
- package/benchmarks/deep-logic-v1/prompts/transactional-config-merge.md +13 -0
- package/benchmarks/deep-logic-v1/suite.json +95 -0
- package/benchmarks/deep-logic-v1/variant.mjs +28 -0
- package/docs/command-reference-vietnamese.md +5 -2
- package/docs/distribution-standard.md +7 -7
- package/docs/languages.json +2 -2
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/publishing-for-teams.md +7 -0
- package/docs/quality-benchmark.md +49 -10
- package/docs/release-install-policy.md +6 -6
- package/docs/security-threat-model.md +1 -1
- package/docs/team-onboarding.md +2 -2
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +1 -1
- package/docs-site/commands.html +1 -1
- package/docs-site/context-engine.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +1 -1
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/index.html +1 -1
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +1 -1
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/whats-new.html +1 -1
- package/docs-site/en/workflows.html +1 -1
- package/docs-site/index.html +1 -1
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/runtime.html +1 -1
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/whats-new.html +1 -1
- package/docs-site/workflows.html +1 -1
- package/evals/fixtures/benchmark-assurance-evidence.invalid.json +2 -2
- package/evals/fixtures/benchmark-assurance-evidence.valid.json +2 -2
- package/evals/fixtures/piagent-webui/runtime-command-v1.invalid.json +12 -0
- package/evals/fixtures/piagent-webui/runtime-command-v1.valid.json +11 -0
- package/evals/fs4-readiness-matrix.v1.json +2 -2
- package/evals/fs5-causal-arm.v1.json +1 -1
- package/evals/fs5-pilot-protocol.v1.json +1 -1
- package/evals/fs5-pilot-protocol.v4.json +1 -1
- package/evals/fs5-pilot-protocol.v5.json +1 -1
- package/evals/private-holdout-v1/public-exposure.v1.json +3 -3
- package/evals/real-task-taxonomy.v1.json +5 -1
- package/package.json +3 -1
- package/packages/piagent-core/benchmark/benchmark-bootstrap.js +3 -2
- package/packages/piagent-core/benchmark/benchmark-cli.js +5 -1
- package/packages/piagent-core/benchmark/benchmark-matrix.js +1 -1
- package/packages/piagent-core/benchmark/benchmark-suite-runtime.js +1 -0
- package/packages/piagent-core/extensions/acceptance-boundary-guidance.js +64 -0
- package/packages/piagent-core/extensions/acceptance-contract-semantics.js +3 -2
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-core/runtime/quality/performance-assurance.ts +6 -4
- package/packages/piagent-core/runtime/registration/task-start-tool.ts +2 -2
- package/packages/piagent-core/runtime/workflows/webui-runtime-command.ts +89 -0
- package/packages/piagent-core/runtime/workflows/webui-workflow.ts +51 -0
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-Uouhx1QO.js → MarkdownMessage-BnvXTpou.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-DZg979Ht.js +174 -0
- package/packages/piagent-webui/dist/client/index.html +1 -1
- package/packages/piagent-webui/gateway/gateway-service.ts +3 -0
- package/packages/piagent-webui/gateway/runtime-command-controller.ts +126 -0
- package/packages/piagent-webui/gateway/runtime-session-controls.ts +29 -0
- package/packages/piagent-webui/gateway/session-command-controller.ts +23 -7
- package/packages/piagent-webui/gateway/session-inspection-registry.ts +22 -1
- package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +11 -9
- package/packages/piagent-webui/package.json +2 -1
- package/packages/piagent-webui/server/loopback-server.ts +17 -0
- package/schemas/piagent-webui/catalog-v1.json +9 -0
- package/schemas/piagent-webui/runtime-command-v1.schema.json +70 -0
- package/schemas/piagent-webui/session-command-v1.schema.json +8 -0
- package/packages/piagent-webui/dist/client/assets/index-MBZq8XLV.js +0 -174
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/permissions" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/permissions" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/profiles" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/profiles" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/quickstart" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/quickstart" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/runtime" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/runtime" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/en/scope.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/scope" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/scope" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/security" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/security" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/en/team.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/team" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/team" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/whats-new" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/whats-new" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/workflows" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/workflows" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/index.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-approval" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-approval" hreflang="en" lang="en">EN</a>
|
package/docs-site/mcp-auth.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-auth" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-auth" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-servers" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-servers" hreflang="en" lang="en">EN</a>
|
package/docs-site/mcp.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/permissions" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/permissions" hreflang="en" lang="en">EN</a>
|
package/docs-site/profiles.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/profiles" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/profiles" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/quickstart" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/quickstart" hreflang="en" lang="en">EN</a>
|
package/docs-site/runtime.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/runtime" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/runtime" hreflang="en" lang="en">EN</a>
|
package/docs-site/scope.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/scope" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/scope" hreflang="en" lang="en">EN</a>
|
package/docs-site/security.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/security" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/security" hreflang="en" lang="en">EN</a>
|
package/docs-site/team.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/team" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/team" hreflang="en" lang="en">EN</a>
|
package/docs-site/whats-new.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/whats-new" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/whats-new" hreflang="en" lang="en">EN</a>
|
package/docs-site/workflows.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.5.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.5.3 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/workflows" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/workflows" hreflang="en" lang="en">EN</a>
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"expiresAt": "2099-09-11T00:00:00.000Z"
|
|
29
29
|
},
|
|
30
30
|
"disjointness": {
|
|
31
|
-
"taxonomyDigest": "
|
|
32
|
-
"publicExposureDigest": "
|
|
31
|
+
"taxonomyDigest": "d42458d04861a60488a5f98532936db71d43dcccc0298d75b09c2255f2922cb1",
|
|
32
|
+
"publicExposureDigest": "b7bdf8d76f66982410f047b5138ca7b974f9b441115761a7e81817753bfa41b3",
|
|
33
33
|
"reportDigest": "5555555555555555555555555555555555555555555555555555555555555555",
|
|
34
34
|
"familyDisjoint": true,
|
|
35
35
|
"repositoryDisjoint": false,
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"expiresAt": "2099-09-11T00:00:00.000Z"
|
|
29
29
|
},
|
|
30
30
|
"disjointness": {
|
|
31
|
-
"taxonomyDigest": "
|
|
32
|
-
"publicExposureDigest": "
|
|
31
|
+
"taxonomyDigest": "d42458d04861a60488a5f98532936db71d43dcccc0298d75b09c2255f2922cb1",
|
|
32
|
+
"publicExposureDigest": "b7bdf8d76f66982410f047b5138ca7b974f9b441115761a7e81817753bfa41b3",
|
|
33
33
|
"reportDigest": "5555555555555555555555555555555555555555555555555555555555555555",
|
|
34
34
|
"familyDisjoint": true,
|
|
35
35
|
"repositoryDisjoint": true,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"version": "piagent-runtime-command-v1",
|
|
4
|
+
"messageType": "command",
|
|
5
|
+
"requestId": "runtime_request_01",
|
|
6
|
+
"sessionRef": "session_ref_01",
|
|
7
|
+
"expectedSessionRevision": "session_revision_01",
|
|
8
|
+
"action": "context.rebuild",
|
|
9
|
+
"argument": null,
|
|
10
|
+
"confirmed": false,
|
|
11
|
+
"rawCommand": "/context rebuild"
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"version": "piagent-runtime-command-v1",
|
|
4
|
+
"messageType": "command",
|
|
5
|
+
"requestId": "runtime_request_01",
|
|
6
|
+
"sessionRef": "session_ref_01",
|
|
7
|
+
"expectedSessionRevision": "session_revision_01",
|
|
8
|
+
"action": "context.search",
|
|
9
|
+
"argument": "runtime command parity",
|
|
10
|
+
"confirmed": false
|
|
11
|
+
}
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
{ "id": "e3-runbook", "path": "evals/private-holdout-v1/CUSTODIAN_RUNBOOK.md", "sha256": "b59503971549d44f4366766db780c0d89bc0b90c5ccb01d2269c5440446954b8" },
|
|
18
18
|
{ "id": "e3-access-policy", "path": "evals/private-holdout-v1/access-policy.v1.json", "sha256": "3189aa3d811083954aaab5470a07c23963d05d4bacccc547a29844e2a8a76525" },
|
|
19
19
|
{ "id": "e3-human-rubric", "path": "evals/private-holdout-v1/human-rubric.v1.json", "sha256": "e291e5097ef1415cc037198e00d690d0abd7a8a9f8b98be773a25d313ac1b629" },
|
|
20
|
-
{ "id": "e3-public-exposure", "path": "evals/private-holdout-v1/public-exposure.v1.json", "sha256": "
|
|
21
|
-
{ "id": "taxonomy", "path": "evals/real-task-taxonomy.v1.json", "sha256": "
|
|
20
|
+
{ "id": "e3-public-exposure", "path": "evals/private-holdout-v1/public-exposure.v1.json", "sha256": "b7bdf8d76f66982410f047b5138ca7b974f9b441115761a7e81817753bfa41b3" },
|
|
21
|
+
{ "id": "taxonomy", "path": "evals/real-task-taxonomy.v1.json", "sha256": "d42458d04861a60488a5f98532936db71d43dcccc0298d75b09c2255f2922cb1" }
|
|
22
22
|
],
|
|
23
23
|
"deterministicTests": {
|
|
24
24
|
"e0": ["tests/golden-enforcement.test.mjs", "tests/benchmark-core.test.mjs"],
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
{
|
|
24
24
|
"id": "canary-suite",
|
|
25
25
|
"path": "benchmarks/capability-v1/suite.json",
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "pilot-suite",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"artifactBindings": [
|
|
18
18
|
{ "id": "authority-manifest", "path": "packages/piagent-core/policy/authority-manifest.v1.json", "sha256": "911dc026f1a860f593a6850f7348311f6adac83a8f11627abb23654960b605d0" },
|
|
19
|
-
{ "id": "canary-suite", "path": "benchmarks/capability-v1/suite.json", "sha256": "
|
|
19
|
+
{ "id": "canary-suite", "path": "benchmarks/capability-v1/suite.json", "sha256": "29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706" },
|
|
20
20
|
{ "id": "pilot-suite", "path": "benchmarks/production-v1/suite.json", "sha256": "8d03df7c08eee5debbabdb3490beb5d45b021a392b6da77df257e6d94c346d58" },
|
|
21
21
|
{ "id": "task-contract-schema", "path": "schemas/task-contract.schema.json", "sha256": "432a253af865f5c79527b3c7e5e65fc3b6cfea43d19f9e915f3bda792a358bb4" },
|
|
22
22
|
{ "id": "assurance-schema", "path": "schemas/benchmark-assurance-evidence.schema.json", "sha256": "5d937632d2cfff34dbbb781dd367bb78feb64c36d571c36ca15f2cc40c576af8" },
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"artifactBindings": [
|
|
18
18
|
{ "id": "authority-manifest", "path": "packages/piagent-core/policy/authority-manifest.v1.json", "sha256": "911dc026f1a860f593a6850f7348311f6adac83a8f11627abb23654960b605d0" },
|
|
19
|
-
{ "id": "canary-suite", "path": "benchmarks/capability-v1/suite.json", "sha256": "
|
|
19
|
+
{ "id": "canary-suite", "path": "benchmarks/capability-v1/suite.json", "sha256": "29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706" },
|
|
20
20
|
{ "id": "pilot-suite", "path": "benchmarks/production-v1/suite.json", "sha256": "8d03df7c08eee5debbabdb3490beb5d45b021a392b6da77df257e6d94c346d58" },
|
|
21
21
|
{ "id": "task-contract-schema", "path": "schemas/task-contract.schema.json", "sha256": "432a253af865f5c79527b3c7e5e65fc3b6cfea43d19f9e915f3bda792a358bb4" },
|
|
22
22
|
{ "id": "assurance-schema", "path": "schemas/benchmark-assurance-evidence.schema.json", "sha256": "5d937632d2cfff34dbbb781dd367bb78feb64c36d571c36ca15f2cc40c576af8" },
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"id": "author-visible-evaluation-exposure-v1",
|
|
4
4
|
"taxonomy": {
|
|
5
5
|
"path": "evals/real-task-taxonomy.v1.json",
|
|
6
|
-
"sha256": "
|
|
6
|
+
"sha256": "d42458d04861a60488a5f98532936db71d43dcccc0298d75b09c2255f2922cb1"
|
|
7
7
|
},
|
|
8
8
|
"visibleSuites": [
|
|
9
9
|
{
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"id": "capability-v1",
|
|
16
|
-
"manifestSha256": "
|
|
17
|
-
"scenarioIds": ["multi-package-rollout", "fullstack-search-contract", "concurrent-lease-lifecycle", "resumable-migration-runner"]
|
|
16
|
+
"manifestSha256": "29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706",
|
|
17
|
+
"scenarioIds": ["multi-package-rollout", "fullstack-search-contract", "concurrent-lease-lifecycle", "resumable-migration-runner", "durable-session-control-plane", "causal-timeline-recovery"]
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"id": "production-v1",
|
|
@@ -159,7 +159,11 @@
|
|
|
159
159
|
"frameworks": ["node-workspace", "react", "nextjs"],
|
|
160
160
|
"lifecycles": ["fresh", "repair"],
|
|
161
161
|
"risks": ["routine", "high-risk"],
|
|
162
|
-
"historicalPublicScenarios": [
|
|
162
|
+
"historicalPublicScenarios": [
|
|
163
|
+
{ "suite": "capability-v1", "id": "fullstack-search-contract", "evidenceTier": "historical-capability" },
|
|
164
|
+
{ "suite": "capability-v1", "id": "durable-session-control-plane", "evidenceTier": "historical-capability" },
|
|
165
|
+
{ "suite": "capability-v1", "id": "causal-timeline-recovery", "evidenceTier": "historical-capability" }
|
|
166
|
+
],
|
|
163
167
|
"nextEvidenceWorkItem": "CF-FS4-02"
|
|
164
168
|
},
|
|
165
169
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piagent/platform",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -157,6 +157,8 @@
|
|
|
157
157
|
"init-project": "bash scripts/init-project.sh",
|
|
158
158
|
"doctor": "bash scripts/team-doctor.sh",
|
|
159
159
|
"benchmark": "node scripts/benchmark-runner.mjs",
|
|
160
|
+
"benchmark:deep": "node scripts/benchmark-runner.mjs --deep --surfaces piagent,codex-cli --model openai-codex/gpt-5.6-luna --thinking medium --allow-pi-auth-writeback",
|
|
161
|
+
"benchmark:webui-parity": "node packages/piagent-webui/benchmark/parity-benchmark.mjs",
|
|
160
162
|
"benchmark:redaction": "node scripts/redaction-benchmark.mjs",
|
|
161
163
|
"audit:runtime": "bash scripts/audit-runtime-host.sh",
|
|
162
164
|
"release:identity": "node scripts/verify-release-identity.mjs",
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import { benchmarkTreeIdentity } from "./benchmark-tree-identity.js";
|
|
16
16
|
import { benchmarkGitEnvironment, benchmarkHostEnvironment } from "./benchmark-runtime.js";
|
|
17
17
|
|
|
18
|
-
const builtInSuites = new Set(["core-v1", "capability-v1", "e2-framework-v1", "production-v1"]);
|
|
18
|
+
const builtInSuites = new Set(["core-v1", "capability-v1", "e2-framework-v1", "deep-logic-v1", "production-v1"]);
|
|
19
19
|
const metadataVariable = "PIAGENT_BENCHMARK_BOOTSTRAP_METADATA";
|
|
20
20
|
|
|
21
21
|
function fail(message) {
|
|
@@ -42,7 +42,7 @@ function jsonFile(file, label) {
|
|
|
42
42
|
catch (error) { fail(`Cannot read ${label} ${file}: ${error.message}`); }
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function requestedSuite(argv, cwd, replaySnapshot) {
|
|
45
|
+
export function requestedSuite(argv, cwd, replaySnapshot) {
|
|
46
46
|
const resume = optionValue(argv, "--resume");
|
|
47
47
|
if (resume) {
|
|
48
48
|
const manifestPath = path.join(runRootFromResume(resume, cwd), "run-manifest.json");
|
|
@@ -56,6 +56,7 @@ function requestedSuite(argv, cwd, replaySnapshot) {
|
|
|
56
56
|
return replaySnapshot?.manifest?.suite?.source ?? report?.suite?.source ?? report?.suite?.manifestPath ?? report?.suite?.id ?? "production-v1";
|
|
57
57
|
}
|
|
58
58
|
if (argv.includes("--production")) return "production-v1";
|
|
59
|
+
if (argv.includes("--deep")) return "deep-logic-v1";
|
|
59
60
|
if (argv.includes("--capability")) return "capability-v1";
|
|
60
61
|
return optionValue(argv, "--suite") ?? "core-v1";
|
|
61
62
|
}
|
|
@@ -16,7 +16,8 @@ With no options it uses the built-in core-v1 suite, the current Pi default
|
|
|
16
16
|
model/thinking setting, and the suite's repeat count.
|
|
17
17
|
|
|
18
18
|
Options:
|
|
19
|
-
--suite <id|path> core-v1, capability-v1, e2-framework-v1, production-v1, or suite.json path.
|
|
19
|
+
--suite <id|path> core-v1, capability-v1, e2-framework-v1, deep-logic-v1, production-v1, or suite.json path.
|
|
20
|
+
--deep Alias for --suite deep-logic-v1 (6 large scenarios, current model by default).
|
|
20
21
|
--capability Alias for --suite capability-v1.
|
|
21
22
|
--production Alias for --suite production-v1.
|
|
22
23
|
--surfaces <a,b> raw-pi,piagent (default) or piagent,codex-cli.
|
|
@@ -110,6 +111,9 @@ export function parseBenchmarkArgs(argv) {
|
|
|
110
111
|
case "--production":
|
|
111
112
|
options.suite = "production-v1";
|
|
112
113
|
break;
|
|
114
|
+
case "--deep":
|
|
115
|
+
options.suite = "deep-logic-v1";
|
|
116
|
+
break;
|
|
113
117
|
case "--capability":
|
|
114
118
|
options.suite = "capability-v1";
|
|
115
119
|
break;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const BENCHMARK_SCOPE_BANDS = [
|
|
2
2
|
{ id: "core", suite: "core-v1", scenarios: 4, availability: "runnable", purpose: "Fast regression check for task quality, scope, safety, and exact usage." },
|
|
3
3
|
{ id: "production", suite: "production-v1", scenarios: 18, availability: "runnable", claimTier: "public-regression", purpose: "Broader public regression matrix across archetypes, lifecycle states, and verifier profiles; not a generalization or production-stability claim." },
|
|
4
|
-
{ id: "capability", suite: "capability-v1", scenarios:
|
|
4
|
+
{ id: "capability", suite: "capability-v1", scenarios: 6, availability: "runnable", claimTier: "capability", purpose: "Unsaturated multi-file and multi-component tasks for hill-climbing; not a release gate." },
|
|
5
5
|
{ id: "e2-framework", suite: "e2-framework-v1", scenarios: 4, availability: "runnable", claimTier: "capability", purpose: "Taxonomy-bound real Hono, SQLite, and workspace tasks with reference, mutation, alternative-valid, scope, and grader-sensitivity calibration; not a release gate." },
|
|
6
6
|
{ id: "long-horizon", suite: undefined, scenarios: 1, availability: "runnable-provider-free", evidenceLane: "evals/long-horizon-v1/lane.json", purpose: "At-least-30-minute provider-free lifecycle lane with hard process death, resume, compaction, handoff, bounded continuation, stable verification, and state-growth telemetry; not model-performance evidence." },
|
|
7
7
|
{ id: "private-holdout", suite: undefined, scenarios: 6, availability: "external-custody-required", claimTier: "private-holdout", readinessMatrix: "evals/fs4-readiness-matrix.v1.json", purpose: "Family- and repository-disjoint E3 readiness boundary; actual prompts, graders, repositories, human scores, and custody evidence remain external and cannot be self-attested." }
|
|
@@ -22,6 +22,7 @@ export function loadBenchmarkSuite(input, packageRoot) {
|
|
|
22
22
|
["core-v1", path.join(packageRoot, "benchmarks", "core-v1", "suite.json")],
|
|
23
23
|
["capability-v1", path.join(packageRoot, "benchmarks", "capability-v1", "suite.json")],
|
|
24
24
|
["e2-framework-v1", path.join(packageRoot, "benchmarks", "e2-framework-v1", "suite.json")],
|
|
25
|
+
["deep-logic-v1", path.join(packageRoot, "benchmarks", "deep-logic-v1", "suite.json")],
|
|
25
26
|
["production-v1", path.join(packageRoot, "benchmarks", "production-v1", "suite.json")]
|
|
26
27
|
]);
|
|
27
28
|
const candidate = builtIn.get(input) ?? path.resolve(input);
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
function normalizedText(value) {
|
|
2
|
+
return String(value ?? "")
|
|
3
|
+
.normalize("NFD")
|
|
4
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
5
|
+
.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function uniqueStrings(values) {
|
|
9
|
+
return [...new Set(values.filter(Boolean))];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Derive bounded, auditable proof obligations for stateful boundary contracts.
|
|
14
|
+
*
|
|
15
|
+
* The signals come only from the operator request. They intentionally describe
|
|
16
|
+
* reusable test partitions instead of benchmark identities or expected code.
|
|
17
|
+
*/
|
|
18
|
+
export function acceptanceBoundaryProofGuidance(raw) {
|
|
19
|
+
const value = normalizedText(raw);
|
|
20
|
+
const guidance = [];
|
|
21
|
+
const replayContract = /\b(?:replay(?:ed|s)?|idempot(?:ent|ency))\b/.test(value);
|
|
22
|
+
|
|
23
|
+
if (
|
|
24
|
+
/\b(?:safe[-\s]+integer|number\.max_safe_integer|number\.issafeinteger)\b/.test(value)
|
|
25
|
+
&& /\b(?:advance|bump|cursor|decrement|increment|next|revision|successor)\b|(?:\+|-)\s*1\b/.test(value)
|
|
26
|
+
) {
|
|
27
|
+
guidance.push("For safe-integer state transitions, exercise Number.MAX_SAFE_INTEGER and validate the computed next value before storing it; validating only the pre-transition input is insufficient.");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (/\bfirst[-\s]+(?:observed|seen|encountered)[-\s]+order\b|\border\s+(?:first\s+)?(?:observed|seen|encountered)\b/.test(value)) {
|
|
31
|
+
guidance.push("Prove first-observed ordering with interleaved identities A, B, B, A; deduplication or replay detection must not reorder output by later duplicate positions.");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (
|
|
35
|
+
replayContract
|
|
36
|
+
&& /\b(?:conflict|different\s+content|different\s+command|identity|reuse|same\s+id|same\s+key|same-key)\b/.test(value)
|
|
37
|
+
) {
|
|
38
|
+
guidance.push("Exercise fresh input, exact replay, and reuse of the same identity with different content as separate partitions; replay acceptance must not hide an identity conflict.");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (
|
|
42
|
+
replayContract
|
|
43
|
+
&& /\b(?:before\s+(?:the\s+)?revision|prior\s+idempotency\s+receipt|stale\s+(?:expected\s+)?revision)\b/.test(value)
|
|
44
|
+
) {
|
|
45
|
+
guidance.push("When replay precedes revision matching, use a stale revision and prove the revision check does not reject an otherwise exact replay.");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (replayContract && /\b(?:identical|same|exact)[-\s]+state[-\s]+object\b/.test(value)) {
|
|
49
|
+
guidance.push("Where replay promises state identity, assert the returned state is the exact prior object and that its stored revision remains unchanged.");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (/\b(?:non[- ]whitespace|whitespace[- ]only|trim(?:med|ming)?)\b/.test(value)) {
|
|
53
|
+
guidance.push("Treat empty and whitespace-only strings as separate invalid partitions whenever the contract trims or requires a non-whitespace character.");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
/\b(?:backpressure|budget|capacity|maxchars)\b/.test(value)
|
|
58
|
+
&& /\b(?:atomic(?:ally)?|equal(?:ity)?|exceed|remainder|unchanged)\b/.test(value)
|
|
59
|
+
) {
|
|
60
|
+
guidance.push("Exercise capacity one below, at exact equality, and one above; the rejected item must leave coupled state unchanged and remain buffered when required.");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return uniqueStrings(guidance).slice(0, 6);
|
|
64
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import { acceptanceBoundaryProofGuidance } from "./acceptance-boundary-guidance.js";
|
|
2
3
|
import { evidenceTopLevelArguments, executableRejectionAssertions } from "./acceptance-executable-evidence.js";
|
|
3
4
|
|
|
4
5
|
const INTEGER_TARGET_STOPWORDS = new Set([
|
|
@@ -947,7 +948,7 @@ export function acceptanceInvalidInputEvidence(input = {}) {
|
|
|
947
948
|
|
|
948
949
|
export function acceptanceContractProofGuidance(raw) {
|
|
949
950
|
const value = normalizedText(raw);
|
|
950
|
-
const guidance = [];
|
|
951
|
+
const guidance = [...acceptanceBoundaryProofGuidance(raw)];
|
|
951
952
|
if (onlyUndefinedContract(raw)) guidance.push("Prove undefined falls through while null, false, 0, and empty string are each preserved at the highest-precedence position.");
|
|
952
953
|
if (/\btypeerror\b/.test(value)) guidance.push("Assert TypeError for every rejected partition named by the request; a different error class is not equivalent.");
|
|
953
954
|
const integerTargets = integerConstraintTargets(raw);
|
|
@@ -958,7 +959,7 @@ export function acceptanceContractProofGuidance(raw) {
|
|
|
958
959
|
if (/\bnon-negative\b/.test(value)) guidance.push("Exercise zero as valid and a negative value as invalid for every non-negative constraint.");
|
|
959
960
|
if (/\binclusive\b|\bthrough\b|\bfrom\b[^.\n]{0,80}\bto\b/.test(value)) guidance.push("Exercise both inclusive endpoints and the nearest value outside each endpoint.");
|
|
960
961
|
if (/\bround(?:ing)?\b|\bceil(?:ing)?\b|\bclamp\b/.test(value)) guidance.push("Exercise zero, exact, partial/rounding, below-minimum, and above-maximum behavior where applicable.");
|
|
961
|
-
return uniqueStrings(guidance).slice(0,
|
|
962
|
+
return uniqueStrings(guidance).slice(0, 8);
|
|
962
963
|
}
|
|
963
964
|
|
|
964
965
|
export function acceptanceContractSemanticConflicts(obligation, taskText, sourceText) {
|