diff --git a/site/en/index.html b/site/en/index.html index 1e222ee..9520954 100644 --- a/site/en/index.html +++ b/site/en/index.html @@ -4,65 +4,41 @@ - + - - + + - GeoTask | Spatiotemporal Task Context Engine for AI Agents + WorldState + GeoTask | From World State to Task Context -
- -
- +
-
-
-

Spatiotemporal Task Context Engine for AI Agents

-

Not more context.
The context this task actually needs.

-

GeoTask constructs spatiotemporal context that is relevant, applicable, resolution-adequate, and explicitly sufficient, then reassesses only the parts that are actually affected when reality changes.

-
Task Sufficiency at Minimum Context Cost — minimize carried context while keeping critical context misses visible.
- -
Task-relativeContext for the task, not “the whole world”
Provider-neutralGIS / API / Sensor / WorldState
Explicit SufficiencySufficiency and gaps stay observable
Minimum ContextLower cost without hiding critical misses
-
-
- -

Problem

The context problem is not how much an agent can carry. It is what is sufficient.

Long context windows, RAG, databases, and tools can expose more information. They do not automatically prove that information applies to the current task.

Relevant ≠ Applicable

A fact can match the topic and still be wrong for the current object, place, time window, or operating condition.

Available ≠ Adequate

A map, forecast, inventory value, or sensor reading may exist while its spatial, temporal, precision, or semantic resolution is still inadequate.

Large ≠ Sufficient

A huge payload can still miss one critical requirement; optional context can also add token, network, and human recovery cost without helping the task.

+

Open spatiotemporal foundations for AI agents

From world state
to the context this task actually needs.

WorldState represents reality as traceable, replayable state with evidence, validity, unknowns, and conflicts. GeoTask constructs the context the current task actually needs from that state and other providers.

Not more context: make world state explicit, then provide the minimum sufficient context for the task.
-

Task → Context, not World → Prompt

GeoTask starts from task requirements, then assesses candidate information. Relevance, applicability, resolution, and sufficiency remain separate so the final TaskContext and its gaps are explicit.

Task→Requirements→Candidates→Relevance→Applicability→Resolution→Sufficiency→Minimum TaskContext
Core concepts include TaskFrame, ContextRequirement, ContextCandidate, ContextAssessment, ContextGap, SufficiencyAssessment, TaskContext, ContextConstructionTrace, plus Minimum Context and Temporal Reassessment contracts.
+

One public story: Reality → WorldState → GeoTask → Agent

The projects are tightly related because they form a continuous information chain. They remain independent foundations with separate semantic ownership, repositories, roadmaps, and benchmarks.

Realitythe physical world→WorldStatewhat is true, unknown, conflicted or stale?→GeoTaskwhat does this task need to know?→Agentreason and act
One public story does not mean one repository.
-

Boundary

GeoTask does not own world truth and does not replace an agent runtime.

Its independent value is task-relative context. Upstream systems provide candidate reality; downstream systems keep reasoning, domain decisions, authorization, and execution.

UpstreamWorld / Data Providers

WorldState, GIS, APIs, sensors, databases, or other providers expose candidate facts, provenance, and state.

GeoTaskTask Context

Determines what the task needs and whether candidates are relevant, applicable, resolution-adequate, and sufficient.

DownstreamAgent / Domain System

The harness runs reasoning; domain systems continue to own professional judgment, authorization, execution, and responsibility.

Context Sufficient ≠ Domain Decision ≠ Action Authorization
+

Two foundations

World truth semantics and task-context semantics stay separate.

WorldState

What is true about the world?

WorldState is an open, lightweight, domain-neutral foundation for evidence-grounded world state. It preserves provenance, temporal validity, uncertainty, unknowns, conflicts, and history instead of silently resolving them away.

  • Entity / Observation / Evidence / Provenance
  • StateAssertion / Relation / Validity
  • Unknown / Conflict / History / StateDelta
  • North Star: Truth Fidelity
Open WorldState →

GeoTask

What does this task need to know?

GeoTask is a Spatiotemporal Task Context Engine for AI agents. It evaluates candidate information by relevance, applicability, resolution adequacy, and explicit sufficiency, then seeks a minimum sufficient TaskContext.

  • TaskFrame / ContextRequirement / ContextCandidate
  • Relevance / Applicability / Resolution Adequacy
  • SufficiencyAssessment / TaskContext / ContextGap
  • North Star: Task Sufficiency at Minimum Context Cost
Open GeoTask →
-

Current Public Proof

An independent consumer now proves the model outside its original domain.

The public Core includes Task Context contracts, provider candidates, relevance / applicability / resolution, sufficiency composition, minimum context, and temporal continuity, with a non-low-altitude consumer.

Warehouse Robot Picking

Indoor GIS, an inventory API, and an aisle-clearance sensor provide ContextCandidates. GeoTask derives requirements, evaluates relevance, applicability, and resolution separately, composes sufficiency, builds minimum context, and refreshes only the affected requirement after a sensor change.

Indoor GIS / Inventory API / Aisle Sensor - ↓ -TaskFrame → ContextRequirement[] → ContextCandidate[] - ↓ -Relevance / Applicability / Resolution Adequacy - ↓ -Sufficiency → Minimum Sufficient TaskContext - ↓ -Sensor Change → Bounded Temporal Reassessment

Counterexample by design: even when the measured aisle is narrower than the robot, GeoTask may correctly conclude that the context is sufficient if that measurement is relevant, applicable, fresh, and resolution-adequate. It still does not decide that the robot may traverse the aisle.

Open the complete example →
+

Boundary

Tightly integrated, not tightly coupled.

GeoTask can consume WorldState, but it can also consume GIS, APIs, sensors, databases, or other world models. WorldState can serve GIS, digital-twin, analytics, and other consumers without GeoTask.

WorldState does not know the task

It owns state, evidence, validity, provenance, unknowns, conflicts, history, and change.

GeoTask does not own world truth

It owns task-relative context, applicability, resolution adequacy, sufficiency, gaps, and context construction.

Context sufficient ≠ decision ≠ authorization

A sufficient TaskContext does not itself decide the domain outcome or authorize real-world action.

World → State is the center of WorldState. Task → Context is the center of GeoTask.
-

Measure

The objective is not context reduction by itself. It is minimum cost under sufficiency.

Every positive “reduce context” metric needs a counter-metric so the system cannot look efficient by silently dropping critical information.

Critical Requirement Coverage ↑Counter: Critical Context Miss Rate
Sufficiency Accuracy ↑Counter: False Sufficiency Rate
Context Reduction ↑Counter: Critical Context Miss Rate
Applicability Accuracy ↑Counter: Irrelevant / Inapplicable Context Rate
Context Rebuild Locality ↑Counter: Unnecessary Context Rebuild
+

Independent proof

Each foundation must still work without the other.

GeoTask: Warehouse Robot Picking

Indoor GIS, an inventory API, and an aisle sensor provide candidates. GeoTask derives requirements, assesses relevance / applicability / resolution, composes sufficiency, builds minimum context, and refreshes only affected requirements.

TaskFrame → ContextRequirement[] → ContextCandidate[] +→ Relevance / Applicability / Resolution Adequacy +→ Sufficiency → Minimum Sufficient TaskContext +→ Bounded Temporal Reassessment
Open the GeoTask proof →

WorldState: Cold-chain State

The cold-chain consumer demonstrates that evidence, validity, unknown/conflict preservation, history, and state transitions remain useful without GeoTask or a low-altitude domain product.

Observation → Evidence → StateAssertion +→ Validity / Provenance +→ Unknown / Conflict Preservation +→ WorldStateSnapshot
Open the WorldState proof →
-

Research Roadmap

The next frontier is the Task Context method itself, not more numbered examples.

GeoTask evolves as an independent foundation with its own problems, benchmarks, and cross-domain evidence.

Requirement Derivation

Move from manually supplied requirements toward stable Task → Requirement methods with explicit lineage.

Applicability & Resolution

Prove that the same fact can have different applicability across tasks while making spatial, temporal, precision, and semantic adequacy testable.

Minimum Context Cost

Reduce carried bytes, tokens, provider latency, and recovery cost without increasing critical misses.

Temporal Reassessment

Map reality changes to affected requirements and perform bounded reassessment plus only the rebuild that is actually needed.

Independent Consumers

Validate the Core in additional domains so no single product or data model shapes GeoTask semantics.

Open Method & Protocol

The durable public asset is a Task Context Method, Engine, Benchmark, and open contracts — not a closed domain platform.

About the previous positioning: early Verifiable World Model / World-State Cycle / Verification assets remain public and maintained for compatibility and traceability. They no longer define long-term semantic ownership. The current positioning is Task Context Engine.
- -

Move from “give the model more information” to “prove this task has enough information.”

GeoTask Core is MIT licensed. Start with the independent consumer, the Python API, or the existing public examples, then connect your own GIS, API, sensor, WorldState, or other provider.

+

Understand the shared story, then use the foundation you need.

Use WorldState when you need traceable world state with evidence and validity. Use GeoTask when you need task-relative, explicitly sufficient context for an AI agent. Use both when reality changes and the task context must be reassessed.

- - + diff --git a/site/index.html b/site/index.html index a27a845..0eb31c9 100644 --- a/site/index.html +++ b/site/index.html @@ -4,8 +4,8 @@ - - + + @@ -13,60 +13,50 @@ - - - + + + - - - GeoTask|面向 AI Agent 的时空任务上下文引擎 - + + + WorldState + GeoTask|从现实状态到任务上下文 + -
+
-

Spatiotemporal Task Context Engine for AI Agents

不是给 Agent 更多上下文,
而是给它当前任务真正需要的上下文。

GeoTask 是面向 AI Agent 的时空任务上下文引擎。它围绕任务构造相关、适用、分辨率足够且可明确判断充分性的上下文,并在现实变化后只重评真正受影响的部分。

Task Sufficiency at Minimum Context Cost —— 用最小必要上下文支撑任务,同时让 Critical Context Miss 保持可见。
+

面向智能体的开放时空基础

从现实状态,
到任务真正需要的上下文。

WorldState 把现实状态表达为带证据、有效期、未知与冲突的可追溯、可重放状态;GeoTask 围绕当前任务,从这些现实信息和其他数据源中构造真正需要、适用且足够的上下文。

不是给 Agent 更多上下文,而是先把现实状态说清楚,再给当前任务真正需要的上下文。
-

Problem

Agent 的上下文问题,不是“装多少”,而是“什么足够”。

长上下文窗口、RAG、数据库和工具可以提供更多信息,但不会自动回答这些信息是否真的适用于当前任务。

相关 ≠ 适用

同一事实可以与任务主题相关,却不适用于当前对象、空间、时间窗口或运行条件。

有数据 ≠ 分辨率足够

存在地图、气象、库存或传感器值,并不意味着空间、时间、精度和语义粒度足以支持任务。

上下文很多 ≠ 上下文充分

大 payload 仍可能遗漏 critical requirement;大量可选信息也可能只增加 token、网络与认知成本。

+

为什么要分成两层

Agent 既要知道“世界是什么”,也要知道“这个任务需要知道什么”。

这两个问题紧密相连,但不是同一个问题。把它们混在一个模型、一个提示词或一个通用数据层里,往往会同时丢失现实状态的来源与有效边界,以及任务针对性。

世界有状态

同一对象会变化、过期、冲突,也可能暂时未知。现实状态必须保留来源、有效期和不确定性。

任务有需求

同一事实对不同任务的重要性不同;相关 ≠ 适用,有数据 ≠ 分辨率足够。

更多 ≠ 足够

大量上下文仍可能遗漏关键需求,也可能把无关信息、网络成本和 token 成本带入 Agent。

-

Task → Context,而不是 World → Prompt

GeoTask 先从任务建立 Requirement,再评估候选信息;Relevance、Applicability、Resolution Adequacy 和 Sufficiency 保持分离。

Task→Requirements→Candidates→Relevance→Applicability→Resolution→Sufficiency→Minimum TaskContext
核心对象包括 TaskFrame、ContextRequirement、ContextCandidate、ContextAssessment、ContextGap、SufficiencyAssessment、TaskContext 与 ContextConstructionTrace。
+

一个公共故事:Reality → WorldState → GeoTask → Agent

WorldState 与 GeoTask 可以共享一个公共入口,因为二者组成了连续的认知链;但它们仍是两个独立 Foundation,各自拥有自己的语义、仓库、路线图和 Benchmark。

Reality现实世界→WorldState世界现在是什么?→GeoTask这个任务需要知道什么?→Agent推理与行动
公共入口可以合并;工程所有权不能合并。一个故事 ≠ 一个仓库。
-

Boundary

GeoTask 不拥有世界真值,也不替代 Agent Runtime。

上游负责现实候选信息,下游负责推理、领域判断与动作授权;GeoTask 拥有的是 Task-relative Context。

UpstreamWorld / Data Providers

WorldState、GIS、API、Sensor、Database 或 Other Provider 提供候选事实与状态。

GeoTaskTask Context

判断当前任务需要什么,哪些候选相关、适用、分辨率足够,以及上下文是否充分。

DownstreamAgent / Domain System

Agent Harness 运行推理;领域系统继续拥有专业判断、授权、执行与责任边界。

Context Sufficient ≠ Domain Decision ≠ Action Authorization
+

边界

两个 Foundation,分别守住现实状态语义与任务充分性。

WorldState 不知道当前任务

它只负责事实、证据、未知、冲突、有效期、历史和变化。

GeoTask 不拥有世界真值

它消费 WorldState、GIS、API、Sensor、Database 或其他 Provider,把信息变成任务相对上下文。

Context Sufficient ≠ Domain Decision ≠ Action Authorization

上下文充分不等于领域结论成立,更不等于现实动作已经获得授权。

-

Current Public Proof

已经有独立消费者,不再只靠定义证明自己。

公共 Core 已覆盖 Requirement、Candidate、Relevance / Applicability / Resolution、Sufficiency、Minimum Context 与 Temporal Reassessment。

Warehouse Robot Picking

室内 GIS、库存 API 与通道净宽传感器分别提供 ContextCandidate;GeoTask 构造 Requirement、判断充分性并在传感器变化后只刷新受影响 Requirement。

Indoor GIS / Inventory API / Aisle Sensor - ↓ -TaskFrame → ContextRequirement[] → ContextCandidate[] - ↓ +
World Foundation

WorldState

世界现在是什么?什么是真的、未知的、冲突的、过期的或已经变化?

WorldState 是开放、轻量、领域无关的世界状态基础,把观察、证据、权威记录和外部 Provider 组织为可追溯、可重放的现实状态,并显式保留未知、冲突与有效期。

  • Entity / Observation / Evidence / Provenance
  • StateAssertion / Relation / Validity
  • Unknown / Conflict / History / StateDelta
  • North Star:Truth Fidelity
Task Context Foundation

GeoTask

当前任务真正需要知道什么?这些信息是否适用、分辨率足够,而且上下文已经充分?

GeoTask 是面向 AI Agent 的时空任务上下文引擎。它不是把整个世界塞进上下文,而是构造当前任务真正需要的最小充分上下文。

  • TaskFrame / ContextRequirement / ContextCandidate
  • Relevance / Applicability / Resolution Adequacy
  • SufficiencyAssessment / TaskContext / ContextGap
  • 北极星:Task Sufficiency at Minimum Context Cost
+ +

组合方式

紧密结合,但不强耦合。

GeoTask 可以直接消费 WorldState,也可以消费 GIS、API、传感器、数据库或其他世界模型。WorldState 同样可以服务传统 GIS、数字孪生和其他应用,而不要求它们使用 GeoTask。

WorldState 可独立

删除 GeoTask 后,WorldState 仍应能作为领域无关的世界状态基础运行。

GeoTask 可独立

不使用官方 WorldState,GeoTask 仍应能完成 Task → Context。

组合时更完整

WorldState 提供带证据、有效期、未知与冲突的现实状态;GeoTask 再把这些信息裁剪为任务充分上下文,二者在动态任务中天然形成连续链路。

Task → Context 是 GeoTask 的中心;World → State 是 WorldState 的中心。公共页面可以组合,但语义所有权必须继续分离。
+ +

实证

不是只画架构图:两个 Foundation 都要证明自己能够独立工作。

GeoTask · Independent Consumer

Warehouse Robot Picking

这个公开案例不依赖 Lowa,也不要求官方 WorldState。它从 Indoor GIS / Inventory API / Aisle Sensor 获取候选信息,再由 GeoTask 判断当前拣货任务真正需要什么。

TaskFrame → ContextRequirement[] → ContextCandidate[] Relevance / Applicability / Resolution Adequacy - ↓ -Sufficiency → Minimum Sufficient TaskContext - ↓ -Sensor Change → Bounded Temporal Reassessment

关键反例:即使通道实测宽度小于机器人宽度,只要测量本身相关、适用、新鲜且分辨率足够,GeoTask 仍可判断“上下文充分”;但不会判断“机器人可以通行”。

打开完整示例 →
+→ Sufficiency → Minimum Sufficient TaskContext +Sensor Change → Bounded Temporal Reassessment

例如:当“通道实测宽度小于机器人宽度”时,系统可以明确区分“上下文充分”和“机器人可以通行”这两个不同结论。

查看独立消费者 →
WorldState · Independent Consumer

Cold-chain State

WorldState 的独立消费者使用冷链状态证明现实状态语义可以脱离 GeoTask 和低空业务存在:状态、证据、有效期、未知与冲突仍然具有独立价值。

Observation → Evidence → StateAssertion +→ Validity / Provenance +→ Unknown / Conflict Preservation +→ WorldStateSnapshot
查看 WorldState 独立消费者 →
-

Measure

充分前提下的最小成本,而不是 Context Reduction 本身。

任何“减少上下文”的正指标都必须配反指标,避免系统通过漏掉关键事实获得漂亮数字。

Critical Requirement Coverage ↑Counter: Critical Context Miss Rate
Sufficiency Accuracy ↑Counter: False Sufficiency Rate
Applicability Accuracy ↑Counter: Irrelevant / Inapplicable Context Rate
Context Rebuild Locality ↑Counter: Unnecessary Context Rebuild
+

度量

两个项目不靠“功能数量”证明价值,而靠各自的正指标与反指标。

WorldState:Truth Fidelity

关注 State Correctness、Provenance Coverage、Validity Accuracy、Conflict Preservation、Replayability;反指标是 Unsupported State Rate / False Resolution Rate。

GeoTask:任务充分性

关注 Critical Requirement Coverage、Sufficiency Accuracy、Context Reduction、Applicability Accuracy;反指标是 Critical Context Miss Rate / False Sufficiency Rate / Irrelevant Context Rate。

-

Research Roadmap

下一阶段研究 Task Context 方法本身。

Requirement Derivation

稳定的 Task → Requirement 方法与推导轨迹。

Applicability & Resolution

把对象、空间、时间、精度和语义分辨率变成显式要求。

Minimum Context Cost

在 Critical Context Miss 不上升的前提下降低上下文成本。

Temporal Reassessment

变化只触发有界重评和必要的最小重建。

Independent Consumers

用更多领域验证公共 Core 不被单一业务塑形。

Open Method & Protocol

长期公共资产是 Method、Engine、Benchmark 与开放合同。

关于旧定位:Verifiable World Model / World-State Cycle / Verification 资产继续作为历史兼容面维护,但不再定义长期语义所有权。当前定位以 Task Context Engine 为准。
+

共同下一步

真正值得二者一起展示的,是现实变化后的动态闭环。

静态页面只是入口。长期共同主线应展示:现实发生变化后,WorldState 如何表达变化,GeoTask 如何只重评受影响的任务需求。

1
Reality changes

新的观察、证据、冲突、失效或 Provider 状态出现。

2
WorldState → StateDelta

明确什么变了、何时变化、哪些旧状态不再成立,并保留来源与历史。

3
GeoTask → affected requirements

只识别受影响的 ContextRequirement,重新判断适用性、分辨率和充分性。

4
Minimum rebuild

不受影响的上下文继续复用;只有必要部分刷新,避免全量重建。

-
-
-
-

P1 Reference Agent:历史 Product Track 的完整闭环

GT01—GT42证明单项能力;Reference Agent把新证据、World State、Discrepancy、Correction、Impact与Control串成一条可运行、可失败、可重放的设施评估更新链。它继续作为已发布兼容资产保留,但不再定义 GeoTask 的当前产品定位。

- 进入Reference Agent体验 → -
-
-
rev1 → rev2新观测记录先只更新事实,不把旧评估偷偷一起修改。
-
Discrepancy → Impact注册Artifact明确哪些结论已经stale、哪些路径需要重算、哪些结果继续复用。
-
rev3只重算障碍距离与净空结论,不触发整站全局重算。
-
Control条件全部满足只使报告更新eligible,生产写入和现实动作仍为false。
-
- -
-
+

P1 Reference Agent:历史兼容产品闭环

GT01—GT42证明单项能力;Reference Agent 把新证据、World State、Discrepancy、Correction、Impact 与 Control 串成一条可运行、可失败、可重放的设施评估更新链。它继续作为已发布兼容资产保留,但不再定义 GeoTask 的当前定位。

+

历史资产

GT01—GT42 不再承担 GeoTask 的主定位,但继续作为公开历史案例保留。

GT01—GT42 继续保留原有编号、URL 和可验证体验,不做“整包迁移到 WorldState”。它们记录了 GeoTask 0.x 从确定性空间计算、证据与世界状态逐步演化到任务上下文方法的历史。

理解现实状态

可从 GT21、GT22、GT23、GT29 开始,理解冲突、快照、变化和多源状态。

理解任务相对性

可从 GT11、GT12、GT13、GT18 开始,理解“存在事实”与“对当前对象/任务适用”之间的差异。

理解动态重评

可从 GT16、GT24、GT25、GT27 开始,再进入 GeoTask 的 Temporal Reassessment。

为什么不整体搬家? 历史案例的产生仓库与今天的长期语义所有权不是一回事。案例保留出处,新的 Truth / Validity / Conflict 能力进入 WorldState;新的 Relevance / Applicability / Sufficiency 能力进入 GeoTask。
展开全部 42 个原始案例与七阶段目录
@@ -150,13 +140,12 @@

7动态世界对象:

+
-
GT01—GT42 继续保留。它们是 GeoTask 从确定性任务协议、Verification 与 World-State Cycle 演化到 Task Context Engine 的公开历史,不再承担定义当前产品定位的职责。
- -
+

文档与仓库

一个公共入口,两个独立工程入口。

第一次访问者在这里理解整体关系;开发者随后进入各自 GitHub Repository 的 README、规范、Benchmark 与路线图。

-

从“给模型更多信息”,转向“证明当前任务的信息已经足够”。

GeoTask Core 采用 MIT License。可以从独立消费者、Python API 或公开案例开始接入自己的 GIS、API、Sensor 或 WorldState Provider。

+

先理解整体,再选择你需要的 Foundation。

需要带证据、有效期、未知与冲突的可追溯现实状态,进入 WorldState;需要为 Agent 构造任务相对、可判断充分性的时空上下文,进入 GeoTask。两者可以独立使用,也可以自然组合。

- + diff --git a/tests/test_public_foundations_portal.py b/tests/test_public_foundations_portal.py new file mode 100644 index 0000000..fea5cfe --- /dev/null +++ b/tests/test_public_foundations_portal.py @@ -0,0 +1,97 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PORTAL = ROOT / "site" / "index.html" +EN_PORTAL = ROOT / "site" / "en" / "index.html" + + +def test_portal_composes_worldstate_and_geotask_without_merging_ownership() -> None: + html = PORTAL.read_text(encoding="utf-8") + + required = ( + "WorldState + GeoTask", + "从现实状态", + "Reality → WorldState → GeoTask → Agent", + "WorldState 不知道当前任务", + "GeoTask 不拥有世界真值", + "一个故事 ≠ 一个仓库", + "https://github.com/stpku/WorldState", + "https://github.com/stpku/GeoTask", + ) + for fragment in required: + assert fragment in html + + +def test_portal_keeps_geotask_task_context_identity() -> None: + html = PORTAL.read_text(encoding="utf-8") + + for fragment in ( + "时空任务上下文引擎", + "Task → Context", + "Task Sufficiency at Minimum Context Cost", + "相关 ≠ 适用", + "Context Sufficient ≠ Domain Decision ≠ Action Authorization", + ): + assert fragment in html + + +def test_portal_keeps_worldstate_truth_identity_without_overclaiming_truth() -> None: + html = PORTAL.read_text(encoding="utf-8") + + for fragment in ( + "世界现在是什么?", + "Truth Fidelity", + "StateAssertion / Relation / Validity", + "Unknown / Conflict / History / StateDelta", + "带证据、有效期、未知与冲突", + ): + assert fragment in html + + assert "负责把现实状态表达得可信" not in html + + +def test_portal_exposes_github_star_call_to_action() -> None: + html = PORTAL.read_text(encoding="utf-8") + + assert 'class="star-link"' in html + assert "★ GitHub" in html + assert "★ Star GeoTask" in html + assert 'aria-label="在 GitHub 上为 GeoTask 点 Star"' in html + assert "查看 WorldState" in html + + +def test_legacy_cases_are_archive_not_current_positioning() -> None: + html = PORTAL.read_text(encoding="utf-8") + + assert "GT01—GT42 继续保留" in html + assert "不做“整包迁移到 WorldState”" in html + assert "展开全部 42 个原始案例与七阶段目录" in html + assert "" in html + assert "" in html + assert 'id="reference-agent"' in html + assert "P1 Reference Agent" in html + for number in range(1, 43): + assert f'href="gt{number:02d}/"' in html + + +def test_english_portal_matches_combined_foundation_story() -> None: + html = EN_PORTAL.read_text(encoding="utf-8") + + required = ( + "WorldState + GeoTask", + "From world state", + "Reality → WorldState → GeoTask → Agent", + "One public story does not mean one repository", + "WorldState does not know the task", + "GeoTask does not own world truth", + "Spatiotemporal Task Context Engine for AI agents", + "Truth Fidelity", + "Task Sufficiency at Minimum Context Cost", + "★ GitHub", + "★ Star GeoTask", + "https://github.com/stpku/WorldState", + "https://github.com/stpku/GeoTask", + ) + for fragment in required: + assert fragment in html