From dd6816402e7d3533ddc955565b09fb1c63677e75 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <10815391+schchit@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:09:25 -0500 Subject: [PATCH 1/4] Consolidate current JEP delivery and retire obsolete owner tasks; audit public site read-only --- .github/workflows/public-site-audit.yml | 28 +++++ ...IGURATION-HANDOFF-2026-09-27-HISTORICAL.md | 104 +++++++++++++++++ CONFIGURATION-HANDOFF-2026-09-27.md | 107 +++--------------- DELIVERY-2026-09-26.md | 24 ++-- DELIVERY-CURRENT.md | 57 ++++++++++ PROJECTS.md | 10 +- WEBSITE-REVIEW-2026-09-27.md | 25 ++++ profile/README.md | 6 +- scripts/audit_public_site.py | 89 +++++++++++++++ 9 files changed, 332 insertions(+), 118 deletions(-) create mode 100644 .github/workflows/public-site-audit.yml create mode 100644 CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md create mode 100644 DELIVERY-CURRENT.md create mode 100644 WEBSITE-REVIEW-2026-09-27.md create mode 100644 scripts/audit_public_site.py diff --git a/.github/workflows/public-site-audit.yml b/.github/workflows/public-site-audit.yml new file mode 100644 index 0000000..1129b7f --- /dev/null +++ b/.github/workflows/public-site-audit.yml @@ -0,0 +1,28 @@ +name: Read-only public website audit +on: + pull_request: + paths: ['scripts/audit_public_site.py', '.github/workflows/public-site-audit.yml'] + push: + branches: [main] + paths: ['scripts/audit_public_site.py', '.github/workflows/public-site-audit.yml'] + workflow_dispatch: +permissions: + contents: read +jobs: + audit: + runs-on: ubuntu-latest + timeout-minutes: 6 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - run: python scripts/audit_public_site.py + - uses: actions/upload-artifact@v4 + if: always() + with: + name: public-site-audit + path: public-site-audit/ + retention-days: 14 diff --git a/CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md b/CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md new file mode 100644 index 0000000..ec8ded2 --- /dev/null +++ b/CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md @@ -0,0 +1,104 @@ +# JEP 0.7:需要你完成的配置 + +日期:2026-09-27。Core 的 PyPI 授权与发布已经完成;不要再次上传、删除旧包或新建 PyPI Token。本轮开发与发行验收见 [交付记录](DELIVERY-2026-09-27.md)。 + +## 1.npm 首次发布及自动发布授权(命名空间更新) + +当前决定:使用已有 npm 账号 **`hjs-api-db`**,包名 **`@hjs-api-db/jep-sdk-js`**,软件版本 **0.7.2**。GitHub 源码仓库仍是 **`hjs-spec/sdk-js`**。不再申请 npm 的 `hjs-spec` 用户/组织;不转换 `hjs-api-db`,不改 `jep-eth`,不动 `hjs-client` 或 `jep-snap`。 + +[SDK #12](https://github.com/hjs-spec/sdk-js/pull/12) 已更新包元数据、导入/安装说明、测试和工作流。运行时代码与类型声明不变,协议仍是 Core 0.7;旧 0.7.1 安装包保持原样。旧交付记录中的 0.7.1 测试是其原组合证据,不自动代表新包已通过 npm 发布验收。 + +### 先发布真实安装包,再配置 Trusted Publisher + +从 [GitHub v0.7.2](https://github.com/hjs-spec/sdk-js/releases/tag/v0.7.2) 获取 `hjs-api-db-jep-sdk-js-0.7.2.tgz`。不要给旧 tarball 改文件名冒充新包,不需要空壳占位包。 + +在本机安装当前 Node.js LTS;使用 `hjs-api-db` 的已验证邮箱账号并启用 npm 双重验证。下载目录打开 PowerShell,逐条执行: + +```powershell +npm.cmd login --auth-type=web --registry=https://registry.npmjs.org/ +npm.cmd whoami --registry=https://registry.npmjs.org/ +``` + +只有 `whoami` 返回 **`hjs-api-db`** 才执行: + +```powershell +npm.cmd publish .\hjs-api-db-jep-sdk-js-0.7.2.tgz --access public --registry=https://registry.npmjs.org/ +npm.cmd view @hjs-api-db/jep-sdk-js@0.7.2 version dist.integrity --registry=https://registry.npmjs.org/ +``` + +密码、验证码、恢复码、Token、带令牌的登录链接都不发送到聊天。首次本地发布没有 GitHub OIDC provenance,不能声称已有。npm 上已有同版本时先核对完整性,不重复上传或删除重建。 + +### 首次发布成功后的填写表 + +进入 [新包设置](https://www.npmjs.com/package/@hjs-api-db/jep-sdk-js/access) → Trusted publishing → GitHub Actions: + +| 字段 | 填写值 | +|---|---| +| Organization or user | `hjs-spec`(这里填 GitHub 所有者,不是 npm 账号) | +| Repository | `sdk-js` | +| Workflow filename | `release.yml` | +| Environment name | 留空,不填写 Any | +| Allowed actions | 允许直接 `npm publish`,以匹配工作流 | + +工作流使用 Node 24、GitHub 托管 runner 与 `id-token: write`,不再使用旧 `NPM_TOKEN` 回退。首次发布及授权之后,未来的新版本可按该路径自动发布;保存配置并不等于已经完成一次 OIDC 发布验收。 + +**不要重跑旧的 0.7.1 失败任务**:旧运行仍携带旧命名空间。首次手动发布 0.7.2 后,也不要再次上传同一版本来测试 OIDC。需要 registry-only 恢复时,`registry.yml` 要有自己的独立授权,不能使用仅授权 `release.yml` 的信任关系。 + +首次发布后,独立核对 npm 版本、下载 tarball 的 SHA-256/SHA-512 与 GitHub 原件、在干净目录安装并导入新包。之后正常安装命令为 `npm install @hjs-api-db/jep-sdk-js@0.7.2`。未完成前,GitHub tarball 可直接安装;不宣称 npm 已可用。 + +参考:[SDK 发布说明](https://github.com/hjs-spec/sdk-js/blob/main/PUBLISHING.md)、[npm 公开 scoped 包](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages/)、[npm Trusted Publisher](https://docs.npmjs.com/trusted-publishers/)。 + +## 2.Hugging Face 生产 API + +用途:提供托管的在线签名/验证服务。仅使用本地 Core/Agent SDK 时可以暂不部署。此处列的是当前部署脚本要求;本轮没有读取秘密值、替换身份或启动生产部署。 + +打开 [Space Settings](https://huggingface.co/spaces/yuqiangJEP/jep-api/settings),进入 Variables and secrets。 + +| 类型 | 名称 | 填什么 | +|---|---|---| +| Variable | `JEP_DEPLOYMENT_MODE` | `production` | +| Secret | `JEP_DATABASE_URL` | 已批准的生产 PostgreSQL 连接串;确认数据库/数据归属、网络和 TLS,不要填临时测试库 | +| Secret | `JEP_SIGNING_TOKEN` | 已批准的调用签名接口访问凭据;它不是 HF Token,也不是签名私钥 | +| Secret | `JEP_KEYRING_JSON` | 已批准的 Ed25519 密钥环 JSON;保持既有签名身份和历史公钥,不临时造新钥匙来通过检查 | + +密钥环和 Vault 两条路径选一条。已经使用 Vault 时,不填 `JEP_KEYRING_JSON`,改配: + +| 类型 | 名称 | 填什么 | +|---|---|---| +| Variable | `JEP_VAULT_ADDR` | HTTPS Vault 地址 | +| Variable | `JEP_VAULT_KEY` | 已批准的非派生 Ed25519 Transit key 名称 | +| Variable | `JEP_VAULT_KID_PREFIX` | 与既有签名身份一致的 kid 前缀 | +| Secret | `JEP_VAULT_TOKEN` | 对相应 Transit key 具有必要权限的凭据 | + +需要自定义 Transit mount / namespace / CA 时,先按仓库部署说明核对后再配置;默认材料不代替实际基础设施方案。不要同时配置本地密钥环和 Vault。 + +可在自己的安全环境使用以下“结构示例”整理现有密钥环,尖括号是占位符,不能直接粘贴为生产凭据: + +```json +{ + "active_kid": "<现有并获批准的签名 key id>", + "keys": [ + { + "kid": "<与 active_kid 一致>", + "kty": "OKP", + "crv": "Ed25519", + "x": "<既有 32 字节公钥的无填充 Base64URL>", + "d": "<与该公钥匹配的既有 32 字节私钥 seed 的无填充 Base64URL>" + } + ] +} +``` + +历史公钥应继续保留在 keys 中,通常不需要旧私钥 d。不得把这个实际填好私钥的 JSON 提交 GitHub 或发到聊天。 + +字段来源:[部署预检脚本](https://github.com/hjs-spec/jep-api/blob/main/scripts/deploy_hf.py)、[密钥加载与校验](https://github.com/hjs-spec/jep-api/blob/main/keys.py)。 + +配置后先执行 `scripts/deploy_hf.py --check-only`(现有 check-hf 工作流也可使用),只看配置名称/模式,不上传或重启。预检成功只说明名称齐全;密钥、公钥匹配、数据库连接与服务状态还需要实际启动验收。 + +部署使用已测试 API 软件 0.8.4、Core `jep-core-0.7`、源码 `0ed259f8f137f57c8122487ba44e0dcfce5bc172`;核验 `/health` 返回以上三项。再用批准的专用测试上下文检查未授权拒绝、签名及历史验证、重启后的公钥/幂等状态持久化,不以一次健康检查代替全部生产验收。 + +交回时只需确认:生产数据库已确定;现有签名身份已确认;上述 Variable/Secret 名称已配置;选择密钥环还是 Vault。不要提供秘密值。 + +## 不需要做的事 + +不重新提交 IETF -07;不批量发布旧实验包的 post1;不删除历史 0.6 包/签名;不改 Prooftask;不为当前本地验证配置生产数据库或密钥。 diff --git a/CONFIGURATION-HANDOFF-2026-09-27.md b/CONFIGURATION-HANDOFF-2026-09-27.md index ec8ded2..d58a293 100644 --- a/CONFIGURATION-HANDOFF-2026-09-27.md +++ b/CONFIGURATION-HANDOFF-2026-09-27.md @@ -1,104 +1,25 @@ -# JEP 0.7:需要你完成的配置 +# JEP 外围配置交接:当前状态 -日期:2026-09-27。Core 的 PyPI 授权与发布已经完成;不要再次上传、删除旧包或新建 PyPI Token。本轮开发与发行验收见 [交付记录](DELIVERY-2026-09-27.md)。 +更新日期:2026-09-27。本页替代此前的首次发布操作清单;[原文按原字节保留](CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md),仅用于历史复现,不要再照旧清单操作。 -## 1.npm 首次发布及自动发布授权(命名空间更新) +## 已完成,不要重复操作 -当前决定:使用已有 npm 账号 **`hjs-api-db`**,包名 **`@hjs-api-db/jep-sdk-js`**,软件版本 **0.7.2**。GitHub 源码仓库仍是 **`hjs-spec/sdk-js`**。不再申请 npm 的 `hjs-spec` 用户/组织;不转换 `hjs-api-db`,不改 `jep-eth`,不动 `hjs-client` 或 `jep-snap`。 +Core 的 PyPI 发布及公开下载验收已经完成。JavaScript 包 `@hjs-api-db/jep-sdk-js@0.7.2` 已完成真实首发、独立哈希对比和不带凭据的安装验证。npm 账号为 `hjs-api-db`;GitHub 源码仓库为 `hjs-spec/sdk-js`,两个命名空间不必相同。 -[SDK #12](https://github.com/hjs-spec/sdk-js/pull/12) 已更新包元数据、导入/安装说明、测试和工作流。运行时代码与类型声明不变,协议仍是 Core 0.7;旧 0.7.1 安装包保持原样。旧交付记录中的 0.7.1 测试是其原组合证据,不自动代表新包已通过 npm 发布验收。 +所有者已在本轮对话确认:npm 的 `release.yml` Trusted Publisher 已添加;首次发布创建的临时 Token 和 GitHub `NPM_BOOTSTRAP_TOKEN` 已清理。这是所有者确认,不声称后台已经独立读取这些账号设置,也不声称已经完成一次 OIDC 上传。下一次正常软件发版时再验证,不为了测试而重发 0.7.2 或另造版本。 -### 先发布真实安装包,再配置 Trusted Publisher +## 托管 API 暂缓 -从 [GitHub v0.7.2](https://github.com/hjs-spec/sdk-js/releases/tag/v0.7.2) 获取 `hjs-api-db-jep-sdk-js-0.7.2.tgz`。不要给旧 tarball 改文件名冒充新包,不需要空壳占位包。 +当前保留 API 源码、测试、发行件和自行部署能力;不要求配置数据库、签名私钥、HF Token 或购买硬件。此前独立新建的 Railway API、数据库和磁盘已清理,活动资源清单已核对。原 Hugging Face Space 未改动,不作为当前正式服务推荐。 -在本机安装当前 Node.js LTS;使用 `hjs-api-db` 的已验证邮箱账号并启用 npm 双重验证。下载目录打开 PowerShell,逐条执行: +未来明确决定提供托管服务时,重新确定费用、运维责任、数据库、网络、客户身份与权限隔离、签名身份、备份恢复和验收计划。只按照届时的 [API 部署说明](https://github.com/hjs-spec/jep-api/blob/main/DEPLOYMENT.md) 执行,不复用已删除试运行环境的凭据,不默认复用 Prooftask 资源。 -```powershell -npm.cmd login --auth-type=web --registry=https://registry.npmjs.org/ -npm.cmd whoami --registry=https://registry.npmjs.org/ -``` +## 尚需后续确认的外围项 -只有 `whoami` 返回 **`hjs-api-db`** 才执行: +- 正常下一版 npm 的免 Token 发布:在实际发版时验收,不是现在重新授权。 +- PyPI 既有版本页面:源代码中的 README 链接已经列入修复,随下一次正常发行更新;不覆盖历史发行文件。 +- 官网:公开路由抓取与缓存结果需要区分。网站源仓库或部署项目尚未从当前可访问仓库定位,不能把检查报告称作上线修复。实际后续项见 [网站核查记录](WEBSITE-REVIEW-2026-09-27.md)。 -```powershell -npm.cmd publish .\hjs-api-db-jep-sdk-js-0.7.2.tgz --access public --registry=https://registry.npmjs.org/ -npm.cmd view @hjs-api-db/jep-sdk-js@0.7.2 version dist.integrity --registry=https://registry.npmjs.org/ -``` +除官网来源定位外,目前没有要求所有者立即新增账号、Token、数据库或服务器的步骤。密码、验证码、恢复码和真实密钥均不通过聊天传递。 -密码、验证码、恢复码、Token、带令牌的登录链接都不发送到聊天。首次本地发布没有 GitHub OIDC provenance,不能声称已有。npm 上已有同版本时先核对完整性,不重复上传或删除重建。 - -### 首次发布成功后的填写表 - -进入 [新包设置](https://www.npmjs.com/package/@hjs-api-db/jep-sdk-js/access) → Trusted publishing → GitHub Actions: - -| 字段 | 填写值 | -|---|---| -| Organization or user | `hjs-spec`(这里填 GitHub 所有者,不是 npm 账号) | -| Repository | `sdk-js` | -| Workflow filename | `release.yml` | -| Environment name | 留空,不填写 Any | -| Allowed actions | 允许直接 `npm publish`,以匹配工作流 | - -工作流使用 Node 24、GitHub 托管 runner 与 `id-token: write`,不再使用旧 `NPM_TOKEN` 回退。首次发布及授权之后,未来的新版本可按该路径自动发布;保存配置并不等于已经完成一次 OIDC 发布验收。 - -**不要重跑旧的 0.7.1 失败任务**:旧运行仍携带旧命名空间。首次手动发布 0.7.2 后,也不要再次上传同一版本来测试 OIDC。需要 registry-only 恢复时,`registry.yml` 要有自己的独立授权,不能使用仅授权 `release.yml` 的信任关系。 - -首次发布后,独立核对 npm 版本、下载 tarball 的 SHA-256/SHA-512 与 GitHub 原件、在干净目录安装并导入新包。之后正常安装命令为 `npm install @hjs-api-db/jep-sdk-js@0.7.2`。未完成前,GitHub tarball 可直接安装;不宣称 npm 已可用。 - -参考:[SDK 发布说明](https://github.com/hjs-spec/sdk-js/blob/main/PUBLISHING.md)、[npm 公开 scoped 包](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages/)、[npm Trusted Publisher](https://docs.npmjs.com/trusted-publishers/)。 - -## 2.Hugging Face 生产 API - -用途:提供托管的在线签名/验证服务。仅使用本地 Core/Agent SDK 时可以暂不部署。此处列的是当前部署脚本要求;本轮没有读取秘密值、替换身份或启动生产部署。 - -打开 [Space Settings](https://huggingface.co/spaces/yuqiangJEP/jep-api/settings),进入 Variables and secrets。 - -| 类型 | 名称 | 填什么 | -|---|---|---| -| Variable | `JEP_DEPLOYMENT_MODE` | `production` | -| Secret | `JEP_DATABASE_URL` | 已批准的生产 PostgreSQL 连接串;确认数据库/数据归属、网络和 TLS,不要填临时测试库 | -| Secret | `JEP_SIGNING_TOKEN` | 已批准的调用签名接口访问凭据;它不是 HF Token,也不是签名私钥 | -| Secret | `JEP_KEYRING_JSON` | 已批准的 Ed25519 密钥环 JSON;保持既有签名身份和历史公钥,不临时造新钥匙来通过检查 | - -密钥环和 Vault 两条路径选一条。已经使用 Vault 时,不填 `JEP_KEYRING_JSON`,改配: - -| 类型 | 名称 | 填什么 | -|---|---|---| -| Variable | `JEP_VAULT_ADDR` | HTTPS Vault 地址 | -| Variable | `JEP_VAULT_KEY` | 已批准的非派生 Ed25519 Transit key 名称 | -| Variable | `JEP_VAULT_KID_PREFIX` | 与既有签名身份一致的 kid 前缀 | -| Secret | `JEP_VAULT_TOKEN` | 对相应 Transit key 具有必要权限的凭据 | - -需要自定义 Transit mount / namespace / CA 时,先按仓库部署说明核对后再配置;默认材料不代替实际基础设施方案。不要同时配置本地密钥环和 Vault。 - -可在自己的安全环境使用以下“结构示例”整理现有密钥环,尖括号是占位符,不能直接粘贴为生产凭据: - -```json -{ - "active_kid": "<现有并获批准的签名 key id>", - "keys": [ - { - "kid": "<与 active_kid 一致>", - "kty": "OKP", - "crv": "Ed25519", - "x": "<既有 32 字节公钥的无填充 Base64URL>", - "d": "<与该公钥匹配的既有 32 字节私钥 seed 的无填充 Base64URL>" - } - ] -} -``` - -历史公钥应继续保留在 keys 中,通常不需要旧私钥 d。不得把这个实际填好私钥的 JSON 提交 GitHub 或发到聊天。 - -字段来源:[部署预检脚本](https://github.com/hjs-spec/jep-api/blob/main/scripts/deploy_hf.py)、[密钥加载与校验](https://github.com/hjs-spec/jep-api/blob/main/keys.py)。 - -配置后先执行 `scripts/deploy_hf.py --check-only`(现有 check-hf 工作流也可使用),只看配置名称/模式,不上传或重启。预检成功只说明名称齐全;密钥、公钥匹配、数据库连接与服务状态还需要实际启动验收。 - -部署使用已测试 API 软件 0.8.4、Core `jep-core-0.7`、源码 `0ed259f8f137f57c8122487ba44e0dcfce5bc172`;核验 `/health` 返回以上三项。再用批准的专用测试上下文检查未授权拒绝、签名及历史验证、重启后的公钥/幂等状态持久化,不以一次健康检查代替全部生产验收。 - -交回时只需确认:生产数据库已确定;现有签名身份已确认;上述 Variable/Secret 名称已配置;选择密钥环还是 Vault。不要提供秘密值。 - -## 不需要做的事 - -不重新提交 IETF -07;不批量发布旧实验包的 post1;不删除历史 0.6 包/签名;不改 Prooftask;不为当前本地验证配置生产数据库或密钥。 +[当前交付入口](DELIVERY-CURRENT.md) · [集成目录](PROJECTS.md) diff --git a/DELIVERY-2026-09-26.md b/DELIVERY-2026-09-26.md index 7bdb248..0550e79 100644 --- a/DELIVERY-2026-09-26.md +++ b/DELIVERY-2026-09-26.md @@ -1,23 +1,13 @@ # Delivery status -The current installation and publication record is [Core 0.7 implementation hardening — 2026-09-27](DELIVERY-2026-09-27-HARDENING.md): Core 0.7.5, Agent SDK 2.1.6 and API 0.8.5, with post-publication installation checks on Linux, Windows and macOS. +Use [Current JEP delivery status](DELIVERY-CURRENT.md) for maintained installation, npm publication and optional-hosting status. -The [earlier same-day closeout](DELIVERY-2026-09-27.md) and the [historical 2026-09-26 report](DELIVERY-2026-09-26-HISTORICAL.md) remain unchanged records of their respective checks. Historical statements that Core PyPI publishing was blocked are not current status. +Dated evidence is preserved separately and does not automatically describe current delivery: -## External configuration still required +- [Original 2026-09-26 audit](DELIVERY-2026-09-26-HISTORICAL.md) +- [Earlier 2026-09-27 closeout](DELIVERY-2026-09-27.md) +- [2026-09-27 hardening release evidence](DELIVERY-2026-09-27-HARDENING.md) -### npm +No repeat PyPI or npm initial upload is needed. The npm package is `@hjs-api-db/jep-sdk-js@0.7.2`; the GitHub repository remains `hjs-spec/sdk-js`. Maintainer-operated API hosting is deferred, not a required owner configuration task. See [the current handoff](CONFIGURATION-HANDOFF-2026-09-27.md). -See [the current owner handoff](CONFIGURATION-HANDOFF-2026-09-27.md#1npm-发布授权). - -### Hugging Face live API - -See [the current owner handoff](CONFIGURATION-HANDOFF-2026-09-27.md#2hugging-face-生产-api). - -### Core conformance on PyPI - -Resolved. Use `jep-core-conformance==0.7.5`; no repeat upload, deletion of historical packages or new API token is needed. - -## Frozen publication - -The published Core Internet-Draft -07 and historical signed artifacts remain unchanged. The frozen RFCXML SHA-256 remains `601809b4053d485fa68367db22f5e43919e859c4f0227609b8f851c627e9caab`. +Published Internet-Draft -07, historical test reports, signed artifacts and earlier releases remain unchanged. Software patches do not rewrite the protocol publication. diff --git a/DELIVERY-CURRENT.md b/DELIVERY-CURRENT.md new file mode 100644 index 0000000..702c1c7 --- /dev/null +++ b/DELIVERY-CURRENT.md @@ -0,0 +1,57 @@ +# Current JEP delivery status + +Updated 2026-09-27. This is the maintained status entry, not a replacement for dated test reports. Core protocol 0.7 / Internet-Draft -07 and software package versions are separate. No hosted API is required for local creation, export and independent verification. + +## Current installation choices + +| Component | Package / release | Delivery and scope | +|---|---|---| +| Core verifier | `jep-core-conformance==0.7.5` | GitHub and PyPI; current Python verifier, explicit 0.6 compatibility | +| Local recorder | `jep-agent-sdk==2.1.6` | GitHub and PyPI; no hosted API required | +| CLI | `jep-cli==0.7.2` | GitHub and PyPI; HTTP client, not a local signer | +| Python HTTP SDK | `jep-sdk-py==0.7.0` | GitHub and PyPI; requires a separately configured API | +| JavaScript HTTP SDK | `@hjs-api-db/jep-sdk-js@0.7.2` | GitHub and npm; new npm scope, GitHub owner remains hjs-spec | +| Go HTTP SDK | `hjs-spec/sdk-go` v0.7.2 | GitHub/module tag; HTTP transport, not an independent verifier | +| HTTP Quickstart | v0.7.0 | GitHub package; local API setup is separate | +| Reference API | v0.8.5 | Source/container release; self-hosting available, maintainer production hosting deferred | + +Minimal local installation: + +```sh +python -m pip install jep-core-conformance==0.7.5 jep-agent-sdk==2.1.6 +``` + +Use a new environment. Do not install historical `jep-v06-conformance-seed` beside the current Core package: both own `jep_conformance`. Current Core includes `jep-validate-06` for explicitly selected legacy input. Third-party dependencies require network access unless separately supplied. + +For a first usable signed record, follow the [local SDK example](https://github.com/hjs-spec/jep-agent-sdk#local-create--export--independent-verification). For HTTP integration, use [Quickstart](https://github.com/hjs-spec/jep-quickstart) and configure your own endpoint. Installing an HTTP client does not start or configure a service. + +## What has been verified + +The [hardening closeout](DELIVERY-2026-09-27-HARDENING.md) records publication and three-platform installation of Core 0.7.5 / SDK 2.1.6 with API 0.8.5. Its JavaScript member was the historical 0.7.1 tarball; that old report is not evidence for a changed combination. + +The [npm closeout](https://github.com/hjs-spec/sdk-js/blob/main/PUBLISHING.md) records independent public downloads and a clean, credential-free install of the actual new-scope 0.7.2 tarball. Its bytes matched the GitHub artifact. The owner subsequently confirmed that the Trusted Publisher was added and the temporary tokens/secret removed; that is owner confirmation, not a read-back or an actual OIDC upload test. + +The current combined gate is updated in [Core #34](https://github.com/hjs-spec/jep-core/pull/34): actual release commits, new npm scope, Linux/Windows/macOS installs, signature/hash transport and unchanged Binding/02 reproduction pins. Final check links are recorded in the PR; only completed passing runs count as evidence. Historical reports and files are not relabeled as this new set. + +## Deployment and credentials + +Maintainer-operated API hosting is deferred by the owner. The isolated Railway API, PostgreSQL service and persistent volume were removed and absence from the active resource inventory was checked. Backend retention and final billing are outside that inventory check. The original Hugging Face Space was left unchanged and is not a current production endpoint. No credentials or infrastructure need to be supplied for the local path. + +[API #16](https://github.com/hjs-spec/jep-api/pull/16) removes automatic Hugging Face deployment after software releases; future hosting is manual opt-in with existing security/readiness checks. [JavaScript #15](https://github.com/hjs-spec/sdk-js/pull/15) retires the one-time npm bootstrap outside active workflows, preserving exact historical source. Normal releases and read-only package verification remain available. + +Do not provision resources, recreate bootstrap tokens, repeat npm/PyPI uploads or test OIDC by republishing an existing version. Actual token-free npm publication is a next-intended-release acceptance item, not a present success claim. + +## Publication-page and website limits + +Core #34 fixes README links and adds package project URLs in source for the next intended release. Already-uploaded PyPI metadata has not been replaced and the same version must not be overwritten. Current usable documentation is linked above. + +The separate [website audit](WEBSITE-REVIEW-2026-09-27.md) distinguishes fresh public HTTP observations from cached search results. A site audit does not modify website source, purge its cache or resubmit search indexes. + +## Preserved evidence + +- [2026-09-26 original audit](DELIVERY-2026-09-26-HISTORICAL.md) +- [2026-09-27 earlier installation closeout](DELIVERY-2026-09-27.md) +- [2026-09-27 implementation hardening](DELIVERY-2026-09-27-HARDENING.md) +- [Earlier owner configuration instructions, historical only](CONFIGURATION-HANDOFF-2026-09-27-HISTORICAL.md) + +Published IETF/TSTO artifacts, historical signed records, archived experiments, unrelated services and Prooftask are outside this closeout. [Repository directory](PROJECTS.md) · [Owner handoff](CONFIGURATION-HANDOFF-2026-09-27.md). diff --git a/PROJECTS.md b/PROJECTS.md index d80c4ad..70cba83 100644 --- a/PROJECTS.md +++ b/PROJECTS.md @@ -12,13 +12,13 @@ One protocol source, a no-API local introduction, and an explicit HTTP alternati ## Integrate -Choose **HTTP** when a service owns signing and acceptance state. Choose **local recording** when the application owns its signing key and records agent calls. +Choose **HTTP** when a service owns signing and acceptance state. Choose **local recording** when the application owns its signing key and records agent calls. Maintainer-operated production API hosting is currently deferred; HTTP users configure their own endpoint rather than relying on a historical demo Space. | Path | Repository | Responsibility | |---|---|---| -| HTTP service | [jep-api](https://github.com/hjs-spec/jep-api) | Core 0.7 signing, verification, storage and acceptance state | +| HTTP service | [jep-api](https://github.com/hjs-spec/jep-api) | Self-hostable Core 0.7 signing, verification, storage and acceptance state | | HTTP client | [sdk-py](https://github.com/hjs-spec/sdk-py) | Python client | -| HTTP client | [sdk-js](https://github.com/hjs-spec/sdk-js) | JavaScript client; use the documented GitHub tarball while npm publication is blocked | +| HTTP client | [sdk-js](https://github.com/hjs-spec/sdk-js) | JavaScript client; published on npm as `@hjs-api-db/jep-sdk-js` 0.7.2, with public install verification | | HTTP client | [sdk-go](https://github.com/hjs-spec/sdk-go) | Go client | | HTTP client | [cli](https://github.com/hjs-spec/cli) | Command-line client | | Local recording | [jep-agent-sdk](https://github.com/hjs-spec/jep-agent-sdk) | Signed Core 0.7 agent records, local verification and reports | @@ -107,7 +107,7 @@ HJS documentation is available at the [public draft](https://datatracker.ietf.or 1. Protocol definitions, schemas and conformance vectors live in Core. Downstream copies pin their source revision. 2. New users start with the Agent SDK local example or explicitly choose HTTP Quickstart. Other repositories link to these paths instead of copying an onboarding stack. 3. Every component states its format and actual verification scope. Never infer Core conformance from a name or a successful local replay. -4. Keep existing package names and commands stable. Merge implementation code only after format compatibility and a consumer migration path are proven. +4. Keep existing package names and commands stable. Merge implementation code only after format compatibility and a consumer migration path are proven. The documented npm 0.7.2 scope change is explicit; historical tarballs are unchanged. 5. Preserve published drafts, signed artifacts and research baselines. Code fixes receive new software releases; documentation-only changes need no package version. 6. Keep retired experiments outside the active feature roadmap. Reopening requires a concrete consumer, a named format and a maintenance owner. 7. Keep generic tool filtering, independent receipt formats and finite-model research guards outside Core requirements and the default integration path. SDK research imports remain available for compatibility, without a conformance claim. @@ -115,4 +115,4 @@ HJS documentation is available at the [public draft](https://datatracker.ietf.or [Current interoperability checks](https://github.com/hjs-spec/jep-core/tree/main/integration#current-core-07--binding02) verify signed artifacts across Core, clients, API and local recorders. -[Delivery status](DELIVERY-2026-09-26.md) distinguishes GitHub releases, registries, containers and live deployments. [Consolidation provenance](https://github.com/hjs-spec/jep-core/blob/main/docs/REPOSITORY-CONSOLIDATION-2026-09.md) records the documentation move. +[Current delivery status](DELIVERY-CURRENT.md) distinguishes GitHub releases, registries, containers, owner-confirmed account settings and actual live deployments. Dated reports remain historical evidence. [Consolidation provenance](https://github.com/hjs-spec/jep-core/blob/main/docs/REPOSITORY-CONSOLIDATION-2026-09.md) records the documentation move. diff --git a/WEBSITE-REVIEW-2026-09-27.md b/WEBSITE-REVIEW-2026-09-27.md new file mode 100644 index 0000000..42b6a0e --- /dev/null +++ b/WEBSITE-REVIEW-2026-09-27.md @@ -0,0 +1,25 @@ +# Public website review — 2026-09-27 + +Scope: https://www.humanjudgment.org and apex-domain redirects, read-only. No deployment, cache purge, DNS write or search-console submission is authorized by a passing audit job alone. + +Cached search extracts mixed a current 0.7 homepage with older developers/architecture and historical governance/alignment/primitives copy. This is a lead to verify, not proof of the current source tree. A failed fetch is likewise not proof of a deleted page. + +A small, non-scheduled audit workflow captures fresh public HTTP status, redirect targets, selected non-sensitive cache/server headers, body digests, HTML titles/descriptions/canonical links and visible-text indicators. Raw bodies are saved as workflow evidence. It does not execute site JavaScript; a client-rendered shell cannot establish route text. Optional old routes returning 404/410 are acceptable. Errors are recorded rather than silently converted to successful checks. + +## Required content checks + +| Route | Acceptance check | +|---|---| +| `/`, `/protocol` | Current protocol entry and explicit boundaries; no unsupported production-service claim | +| `/developers` | Stable event `id`; no Core-required nonce; actual detached-JWS example or link to runnable SDK example; independent result checks | +| `/architecture` | Event Identity separate from Event Hash; no legacy mandatory-field list presented as current | +| `/governance`, `/alignment`, `/primitives` | Either current accurate material, explicit historical labeling, or redirect/retirement; no unqualified zero-PII, automatic legal-compliance/circuit-break, sovereign witness, or unmeasured performance guarantees | +| `/robots.txt`, `/sitemap.xml` | Current intended discoverable routes only; metadata and canonical routing must agree | + +A term match is not itself a defect: a page may correctly say that Core does **not** require a nonce or that signatures do **not** prove authorization. Review the full surrounding text before changing content. + +## Source and deployment access + +The current GitHub connection's accessible repository inventory and scoped code searches did not identify a website repository or deployment project for this domain. That does not prove no source exists. Do not edit Prooftask, an unrelated app, or a guessed repository as a substitute. Identify the owning site project before changing routes, metadata, redirects or cache settings. + +Final fresh-audit observations are to be appended after the workflow finishes. Until then this file is an acceptance checklist, not a completed website fix. [Current delivery](DELIVERY-CURRENT.md). diff --git a/profile/README.md b/profile/README.md index e5825f1..a7c08c5 100644 --- a/profile/README.md +++ b/profile/README.md @@ -9,11 +9,11 @@ JEP records claims and the checks performed on them. A signature alone does not |---|---| | Understand the protocol or check conformance | [JEP Core](https://github.com/hjs-spec/jep-core) | | Create, export and independently verify without an API | [Local example](https://github.com/hjs-spec/jep-agent-sdk#local-create--export--independent-verification) | -| Try the HTTP service/client path | [HTTP Quickstart](https://github.com/hjs-spec/jep-quickstart) | +| Try the self-hosted HTTP service/client path | [HTTP Quickstart](https://github.com/hjs-spec/jep-quickstart) | | Integrate an application or agent | [Choose an integration](https://github.com/hjs-spec/.github/blob/main/PROJECTS.md#integrate) | -Current protocol: **Core 0.7**, wire major `jep: "1"`. Software versions are independent. The published Internet-Draft -07 is frozen; historical formats use explicit compatibility paths. +Current protocol: **Core 0.7**, wire major `jep: "1"`. Software versions are independent. The published Internet-Draft -07 is frozen; historical formats use explicit compatibility paths. Maintainer-operated production API hosting is deferred and is not required for local use. -[Repository directory](https://github.com/hjs-spec/.github/blob/main/PROJECTS.md) · [Architecture and format boundaries](https://github.com/hjs-spec/jep-core/tree/main/docs/architecture) · [Delivery status](https://github.com/hjs-spec/.github/blob/main/DELIVERY-2026-09-26.md) +[Repository directory](https://github.com/hjs-spec/.github/blob/main/PROJECTS.md) · [Architecture and format boundaries](https://github.com/hjs-spec/jep-core/tree/main/docs/architecture) · [Current delivery status](https://github.com/hjs-spec/.github/blob/main/DELIVERY-CURRENT.md) HJS (archive/evidence lifecycle) and JAC (declared dependencies) are optional companions. Retired runtime, replay and observation experiments remain available for reproduction; new signed recording and reports are maintained in the Agent SDK. diff --git a/scripts/audit_public_site.py b/scripts/audit_public_site.py new file mode 100644 index 0000000..2e20cb7 --- /dev/null +++ b/scripts/audit_public_site.py @@ -0,0 +1,89 @@ +"""Small read-only audit; no secrets, JS execution, crawling or scheduled hosting.""" +from datetime import datetime, timezone +from html.parser import HTMLParser +import hashlib +import json +from pathlib import Path +from urllib.error import HTTPError +from urllib.parse import urlsplit +from urllib.request import HTTPRedirectHandler, Request, build_opener + +HOSTS = {'humanjudgment.org', 'www.humanjudgment.org'} +ROUTES = ['/', '/protocol', '/developers', '/architecture', '/governance', '/alignment', '/primitives', '/robots.txt', '/sitemap.xml'] +MARKERS = ['draft-06', 'nonce', 'validation levels', 'zero pii', 'sovereign witness', '1.5ms', '100k', 'jep-core 0.7', 'event identity'] + + +class Redirects(HTTPRedirectHandler): + def redirect_request(self, req, fp, code, msg, headers, newurl): + parsed = urlsplit(newurl) + if parsed.scheme != 'https' or parsed.hostname not in HOSTS: + raise ValueError('Unexpected redirect target; no request sent: ' + newurl) + return super().redirect_request(req, fp, code, msg, headers, newurl) + + +class Page(HTMLParser): + def __init__(self): + super().__init__() + self.hidden = 0 + self.text = [] + self.metadata = [] + self.scripts = [] + def handle_starttag(self, tag, attrs): + attr = dict(attrs) + if tag in ('script', 'style'): + self.hidden += 1 + if tag == 'script' and attr.get('src'): + self.scripts.append(attr['src']) + if tag == 'meta' and attr.get('name') in ('description', 'robots', 'generator'): + self.metadata.append(attr) + if tag == 'link' and attr.get('rel') == 'canonical': + self.metadata.append(attr) + def handle_endtag(self, tag): + if tag in ('script', 'style') and self.hidden: + self.hidden -= 1 + def handle_data(self, data): + if not self.hidden and data.strip(): + self.text.append(data.strip()) + + +def main(): + root = Path('public-site-audit') + root.mkdir(exist_ok=True) + report = {'checked_at': datetime.now(timezone.utc).isoformat(), 'observations': [], + 'scope': 'Fresh public HTTP, not source/deployment access or search-index verification.'} + opener = build_opener(Redirects()) + targets = [('www.humanjudgment.org', route) for route in ROUTES] + [('humanjudgment.org', '/'), ('humanjudgment.org', '/developers')] + for index, (host, route) in enumerate(targets): + url = 'https://' + host + route + item = {'requested_url': url} + try: + try: + response = opener.open(Request(url, headers={'User-Agent': 'JEP-public-entry-audit/1.0', 'Cache-Control': 'no-cache'}), timeout=20) + except HTTPError as exc: + response = exc + with response: + data = response.read(2 * 1024 * 1024 + 1) + if len(data) > 2 * 1024 * 1024: + raise ValueError('Response exceeds audit size limit') + item.update(status=response.status, final_url=response.url, bytes=len(data), sha256=hashlib.sha256(data).hexdigest(), + headers={name: response.headers[name] for name in ['date', 'server', 'cache-control', 'age', 'etag', 'content-type', 'x-vercel-id', 'x-vercel-cache', 'cf-cache-status', 'location'] if name in response.headers}) + text = data.decode('utf-8', errors='replace') + (root / (str(index) + '.body.txt')).write_text(text, encoding='utf-8') + page = Page() + page.feed(text) + visible = '\n'.join(page.text) + (root / (str(index) + '.visible.txt')).write_text(visible, encoding='utf-8') + item.update(metadata=page.metadata, scripts=page.scripts[:12], visible_characters=len(visible), + indicators=[marker for marker in MARKERS if marker in visible.lower()], + rendering='client-rendered-or-sparse' if len(visible) < 200 and page.scripts else 'HTTP text captured') + except Exception as exc: + item['error'] = type(exc).__name__ + ': ' + str(exc) + report['observations'].append(item) + (root / 'report.json').write_text(json.dumps(report, indent=2), encoding='utf-8') + print(json.dumps(report, indent=2)) + if not any(item.get('status') == 200 for item in report['observations']): + raise SystemExit('No successful response; audit is incomplete') + + +if __name__ == '__main__': + main() From 0d266cdf667db7a76198076ea528b151825809f7 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <10815391+schchit@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:14:41 -0500 Subject: [PATCH 2/4] Record fresh website findings and concrete remaining fixes without claiming source changes --- WEBSITE-REVIEW-2026-09-27.md | 51 ++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/WEBSITE-REVIEW-2026-09-27.md b/WEBSITE-REVIEW-2026-09-27.md index 42b6a0e..9b8a538 100644 --- a/WEBSITE-REVIEW-2026-09-27.md +++ b/WEBSITE-REVIEW-2026-09-27.md @@ -1,25 +1,48 @@ # Public website review — 2026-09-27 -Scope: https://www.humanjudgment.org and apex-domain redirects, read-only. No deployment, cache purge, DNS write or search-console submission is authorized by a passing audit job alone. +Scope: https://www.humanjudgment.org and apex-domain redirects, read-only. No website deployment, cache purge, DNS write or search-console submission was performed. The original Hugging Face Space and Prooftask were not changed. -Cached search extracts mixed a current 0.7 homepage with older developers/architecture and historical governance/alignment/primitives copy. This is a lead to verify, not proof of the current source tree. A failed fetch is likewise not proof of a deleted page. +## Evidence -A small, non-scheduled audit workflow captures fresh public HTTP status, redirect targets, selected non-sensitive cache/server headers, body digests, HTML titles/descriptions/canonical links and visible-text indicators. Raw bodies are saved as workflow evidence. It does not execute site JavaScript; a client-rendered shell cannot establish route text. Optional old routes returning 404/410 are acceptable. Errors are recorded rather than silently converted to successful checks. +The [fresh HTTP audit](https://github.com/hjs-spec/.github/actions/runs/36299281135) requested 11 fixed public URLs at **06:09:49–06:09:51 UTC**. The downloaded [audit artifact](https://github.com/hjs-spec/.github/actions/runs/36299281135/artifacts/10924604596) has SHA-256 `4aa1c5694868759f56cfeeb6a355e0fea9398f530ed1b0ceec06338c241a8a96`. It contains the response report, original HTTP bodies and extracted visible text. Full surrounding text was reviewed, not just keyword matches. -## Required content checks +This proves what those public endpoints served in that observation, not the state of a source repository or all geographical caches. Requesting no-cache did not guarantee bypass of Vercel caches: some replies were HIT; alignment and primitives returned PRERENDER with age 0. The response server was Vercel. This does not identify the owning Vercel account or project. -| Route | Acceptance check | -|---|---| -| `/`, `/protocol` | Current protocol entry and explicit boundaries; no unsupported production-service claim | -| `/developers` | Stable event `id`; no Core-required nonce; actual detached-JWS example or link to runnable SDK example; independent result checks | -| `/architecture` | Event Identity separate from Event Hash; no legacy mandatory-field list presented as current | -| `/governance`, `/alignment`, `/primitives` | Either current accurate material, explicit historical labeling, or redirect/retirement; no unqualified zero-PII, automatic legal-compliance/circuit-break, sovereign witness, or unmeasured performance guarantees | -| `/robots.txt`, `/sitemap.xml` | Current intended discoverable routes only; metadata and canonical routing must agree | +## Confirmed findings -A term match is not itself a defect: a page may correctly say that Core does **not** require a nonce or that signatures do **not** prove authorization. Review the full surrounding text before changing content. +| Route | Observed state | Required action | +|---|---|---| +| `/` and `/protocol` | HTTP 200; current 0.7 structure, Event Identity, independent checks and explicit boundaries are present | Preserve current content; do not redo the old six-field migration | +| `/developers` | HTTP 200; 11 standard members, seven unconditionally required, no Core-required nonce and independent checks are already described | Repair the remaining example and qualification issues below, not the whole page | +| `/architecture` | HTTP 200; current 11-member list and Event Identity are present | Preserve the updated structure | +| `/governance` | HTTP 200; sandbox page still includes unqualified sovereign-witness, zero-PII, automatic circuit-break and performance claims | Remove obsolete claims or retire the route; a sandbox label does not qualify universal claims elsewhere on the page | +| `/alignment` | HTTP 200; legal-to-logic and compliance simulation plus the same universal claims | Retire or clearly distinguish a non-operative historical simulation from current protocol guarantees | +| `/primitives` | HTTP 200; sidecar interception and runtime/compliance behavior presented as primitive functionality | Replace with current primitive semantics or redirect to `/protocol`; retain history outside the current protocol entry | +| `/robots.txt` and `/sitemap.xml` | HTTP 404 | Add intended crawler/sitemap documents in the owning site project; their absence is not proof that search engines cannot index the site | +| Apex `/` and `/developers` | Redirected to www; final bodies match direct www requests | Preserve working canonical-domain routing | + +All seven content routes used the same generic description in these HTTP responses; no HTML canonical link was observed. Route-specific descriptions and canonical metadata are a follow-up for the owning site. This is not a ranking guarantee. + +### Remaining developer-example issues + +The visible example uses a `ref` array, whereas the [current structural schema](https://github.com/hjs-spec/jep-core/blob/main/schemas/jep-event.schema.json) accepts a typed reference object or digest. It also uses an object-shaped placeholder signature with an `EdDSA` header and no demonstrated key binding, rather than the current implemented detached-JWS baseline. Core allows profile-defined signature containers, so the object shape alone is not a universal Core violation; the example nevertheless must not be presented as a runnable example of the current baseline. + +Prefer linking to or importing a real output from the [versioned local SDK create/export/verify example](https://github.com/hjs-spec/jep-agent-sdk#local-create--export--independent-verification). Use valid `ref` form, actual baseline signature syntax and explicit verification material, or visibly label abbreviated strings as non-verifiable illustrations. Do not supply a private key or claim that a co-shipped public key independently proves actor identity. Distinguish the supported baseline algorithms and sample error vocabulary from all possible protocol profiles. + +### Obsolete route claims + +The three old routes continue to say that every action is witnessed by a sovereign node, that no personal data ever touches the protocol, that termination provides an atomic runtime kill-switch, and that latency/throughput meet specific universal targets. Those claims are not established by the current protocol and no corresponding deployment/benchmark evidence was supplied in the site. Do not attribute legal compliance decisions, automatic enforcement or universal privacy properties to Core. No jurisdictional legal analysis is asserted by this audit. + +For minimum maintenance, redirect retired routes to the accurate protocol or architecture page and remove their old navigation/sitemap entries. If preservation in-place is necessary, label the entire page as a historical non-operative simulation and remove unsupported current-service promises. Merely hiding the route from navigation is insufficient while its public URL still returns the claims. ## Source and deployment access -The current GitHub connection's accessible repository inventory and scoped code searches did not identify a website repository or deployment project for this domain. That does not prove no source exists. Do not edit Prooftask, an unrelated app, or a guessed repository as a substitute. Identify the owning site project before changing routes, metadata, redirects or cache settings. +The current GitHub connection's accessible repository inventory and scoped code searches did not identify the website source repository. That does not prove no source exists. Do not edit Prooftask, an unrelated app or a guessed repository as a substitute. + +The public responses identify Vercel as the host. The Vercel connector is available but was not connected in this session; connecting the account that owns humanjudgment.org, or exposing the exact site repository, is the remaining access prerequisite for a real source/deployment fix. No new hosting account, paid plan, API database or published package is needed. + +## Completion boundary + +The audit is complete for the named HTTP observations. Website changes are **not deployed**. A successful audit workflow means evidence was collected, not that every route conforms. After access is provided, change the identified site source, preserve the current 0.7 pages, deploy to that existing project, and rerun the same fixed-route check. Verify both domain forms and intended routes before requesting search re-indexing. Do not treat stale search extracts as the current source of truth. -Final fresh-audit observations are to be appended after the workflow finishes. Until then this file is an acceptance checklist, not a completed website fix. [Current delivery](DELIVERY-CURRENT.md). +[Current delivery](DELIVERY-CURRENT.md) · [Owner handoff](CONFIGURATION-HANDOFF-2026-09-27.md). From d5563044e0a1a9f833384e905c90180aa9d350e6 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <10815391+schchit@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:15:31 -0500 Subject: [PATCH 3/4] Add completed current-combination test evidence and merged peripheral change status --- DELIVERY-CURRENT.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/DELIVERY-CURRENT.md b/DELIVERY-CURRENT.md index 702c1c7..f1bafc7 100644 --- a/DELIVERY-CURRENT.md +++ b/DELIVERY-CURRENT.md @@ -25,27 +25,36 @@ Use a new environment. Do not install historical `jep-v06-conformance-seed` besi For a first usable signed record, follow the [local SDK example](https://github.com/hjs-spec/jep-agent-sdk#local-create--export--independent-verification). For HTTP integration, use [Quickstart](https://github.com/hjs-spec/jep-quickstart) and configure your own endpoint. Installing an HTTP client does not start or configure a service. -## What has been verified +## Current combination: completed verification -The [hardening closeout](DELIVERY-2026-09-27-HARDENING.md) records publication and three-platform installation of Core 0.7.5 / SDK 2.1.6 with API 0.8.5. Its JavaScript member was the historical 0.7.1 tarball; that old report is not evidence for a changed combination. +[Core #34](https://github.com/hjs-spec/jep-core/pull/34) is merged. Its checks use the actual API 0.8.5, Agent SDK 2.1.6 and new-scope JavaScript 0.7.2 release commits, with retained CLI/Go and Binding/02 reproduction pins. -The [npm closeout](https://github.com/hjs-spec/sdk-js/blob/main/PUBLISHING.md) records independent public downloads and a clean, credential-free install of the actual new-scope 0.7.2 tarball. Its bytes matched the GitHub artifact. The owner subsequently confirmed that the Trusted Publisher was added and the temporary tokens/secret removed; that is owner confirmation, not a read-back or an actual OIDC upload test. +- [Linux, Windows and macOS installations](https://github.com/hjs-spec/jep-core/actions/runs/36299156516): all three jobs passed. Each checked **13 original release files**, including four Python wheel/source pairs independently downloaded from PyPI and GitHub. The new-scope npm tarball was separately downloaded and compared to GitHub bytes and SHA-256/SHA-512/SHA-1 metadata. A credential-free npm install/import passed on each platform; Python wheels were installed with dependencies in a new environment. +- Installed Python smoke checks on all three platforms passed J/D/T/V signatures, four Core/SDK/CLI roundtrips, eight tamper rejections, eighteen malformed-input rejections, missing-key `indeterminate`, and accepted/already-accepted/identity-conflict behavior. +- [Current interoperability](https://github.com/hjs-spec/jep-core/actions/runs/36299156543): **11 signed events, five transport paths, 55 exact signed-artifact roundtrips, four verifiers and 50 Binding/02 structural/reference checks** passed. The paired Core/API/Agent boundary suite reports **25 passing cases**, including invalid-input rejection without consuming acceptance state. This is not 25 distinct vulnerabilities or a domain-policy/external-truth test. +- [Core current/legacy conformance](https://github.com/hjs-spec/jep-core/actions/runs/36299156499): passed, retaining frozen-publication checks and adding package-link/registry-selection/isolation guard tests. -The current combined gate is updated in [Core #34](https://github.com/hjs-spec/jep-core/pull/34): actual release commits, new npm scope, Linux/Windows/macOS installs, signature/hash transport and unchanged Binding/02 reproduction pins. Final check links are recorded in the PR; only completed passing runs count as evidence. Historical reports and files are not relabeled as this new set. +Downloaded CI evidence ZIPs were checked against GitHub artifact digests; the included original release files were checked against the report digests. Reports, checksums and installation instructions remain downloadable from the runs. No release file was rebuilt or re-uploaded in this closeout. -## Deployment and credentials +The [earlier hardening closeout](DELIVERY-2026-09-27-HARDENING.md) included the historical JavaScript 0.7.1 tarball. It remains unchanged and is not relabeled as evidence for the new combined set. The script's explicit historical baseline is also preserved; the current CI uses `--current-release`. -Maintainer-operated API hosting is deferred by the owner. The isolated Railway API, PostgreSQL service and persistent volume were removed and absence from the active resource inventory was checked. Backend retention and final billing are outside that inventory check. The original Hugging Face Space was left unchanged and is not a current production endpoint. No credentials or infrastructure need to be supplied for the local path. +## npm account and publishing boundary -[API #16](https://github.com/hjs-spec/jep-api/pull/16) removes automatic Hugging Face deployment after software releases; future hosting is manual opt-in with existing security/readiness checks. [JavaScript #15](https://github.com/hjs-spec/sdk-js/pull/15) retires the one-time npm bootstrap outside active workflows, preserving exact historical source. Normal releases and read-only package verification remain available. +The [npm closeout](https://github.com/hjs-spec/sdk-js/blob/main/PUBLISHING.md) records completed public first publication. The owner subsequently confirmed that the `release.yml` Trusted Publisher was added and the temporary tokens/secret removed; that is owner confirmation, not an independent account-setting read-back or an actual OIDC upload test. -Do not provision resources, recreate bootstrap tokens, repeat npm/PyPI uploads or test OIDC by republishing an existing version. Actual token-free npm publication is a next-intended-release acceptance item, not a present success claim. +[JavaScript #15](https://github.com/hjs-spec/sdk-js/pull/15) is merged after [passing tests](https://github.com/hjs-spec/sdk-js/actions/runs/36298984316). It removes the one-time bootstrap from active workflows and preserves its exact text outside that directory. Normal OIDC releases and read-only installation checks remain available. Do not provision resources, recreate bootstrap tokens, repeat existing npm/PyPI uploads or create a version solely to test OIDC. Actual token-free npm publication is a next-intended-release acceptance item. + +## Hosted API remains deferred + +[API #16](https://github.com/hjs-spec/jep-api/pull/16) is merged after [regression checks passed](https://github.com/hjs-spec/jep-api/actions/runs/36298878884). Hugging Face deployment no longer runs after software releases. A deliberate future deployment requires main, a manual run and exact confirmation `deploy-hosted-api`, and still must pass existing production configuration/readiness gates. Software tests, source releases and container builds are retained. + +The isolated Railway API, PostgreSQL service and persistent volume were removed earlier and absence from active resource inventory was checked. Backend retention and final billing are outside that inventory check. The original Hugging Face Space was left unchanged and is not a current production endpoint. No credentials or infrastructure need to be supplied for the local path. This closeout provisions no new hosting resources and adds no scheduled monitoring. ## Publication-page and website limits -Core #34 fixes README links and adds package project URLs in source for the next intended release. Already-uploaded PyPI metadata has not been replaced and the same version must not be overwritten. Current usable documentation is linked above. +Core #34 fixes README links and adds package project URLs **in source for the next intended release**. Already-uploaded PyPI metadata has not been replaced and the same version must not be overwritten. Current usable documentation is linked above. -The separate [website audit](WEBSITE-REVIEW-2026-09-27.md) distinguishes fresh public HTTP observations from cached search results. A site audit does not modify website source, purge its cache or resubmit search indexes. +The [fresh website audit](WEBSITE-REVIEW-2026-09-27.md) confirms that the main protocol/architecture structure is already updated. Remaining work is narrower: the developer example, three old marketing/simulation routes, and absent robots/sitemap documents. The website responses identify Vercel; its owning project/source was not available through the current connection. The audit does not change website code, purge caches or resubmit search indexes. Website changes remain undeployed. ## Preserved evidence From 8cdcaaeba81d1f7ef72dbe3504fa314c411f64f0 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <10815391+schchit@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:19:17 -0500 Subject: [PATCH 4/4] Record confirmed Vercel installation separately from unavailable project actions --- WEBSITE-REVIEW-2026-09-27.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WEBSITE-REVIEW-2026-09-27.md b/WEBSITE-REVIEW-2026-09-27.md index 9b8a538..049f9ef 100644 --- a/WEBSITE-REVIEW-2026-09-27.md +++ b/WEBSITE-REVIEW-2026-09-27.md @@ -39,10 +39,10 @@ For minimum maintenance, redirect retired routes to the accurate protocol or arc The current GitHub connection's accessible repository inventory and scoped code searches did not identify the website source repository. That does not prove no source exists. Do not edit Prooftask, an unrelated app or a guessed repository as a substitute. -The public responses identify Vercel as the host. The Vercel connector is available but was not connected in this session; connecting the account that owns humanjudgment.org, or exposing the exact site repository, is the remaining access prerequisite for a real source/deployment fix. No new hosting account, paid plan, API database or published package is needed. +The public responses identify Vercel as the host. After the owner installed Vercel at 06:16 UTC, plugin discovery confirmed `installed: true`. However, action discovery still returned no Vercel namespace, project-reading action or deployment action in this session. This is a tool-exposure limitation, not evidence that the owner failed to install or authorize it. Do not ask the owner to repeat installation or share a token. When project actions become available, resolve the existing humanjudgment.org deployment and its source before making changes. An exact accessible source repository would also resolve source access. No new hosting account, paid plan, API database or package publication is needed. ## Completion boundary -The audit is complete for the named HTTP observations. Website changes are **not deployed**. A successful audit workflow means evidence was collected, not that every route conforms. After access is provided, change the identified site source, preserve the current 0.7 pages, deploy to that existing project, and rerun the same fixed-route check. Verify both domain forms and intended routes before requesting search re-indexing. Do not treat stale search extracts as the current source of truth. +The audit is complete for the named HTTP observations. Website changes are **not deployed**. A successful audit workflow means evidence was collected, not that every route conforms. After project/source access is available, change the identified site source, preserve the current 0.7 pages, deploy to that existing project, and rerun the same fixed-route check. Verify both domain forms and intended routes before requesting search re-indexing. Do not treat stale search extracts as the current source of truth. [Current delivery](DELIVERY-CURRENT.md) · [Owner handoff](CONFIGURATION-HANDOFF-2026-09-27.md).