港口合同
每个跨越Isomorph边界的数据形状的单一真理源
组件. 司马先: 手写 JSON Schema 在 schema/ 是来源; 跳
软件包( r)gen-go/)和类型脚本包(gen-ts/ → @fourier-labs/harbour-contracts已经 生成
和执着。 没有处理器, 后置堆栈, 或 MCP 操作程序是针对一个形状构建的
这里首先存在.
版式
| 路径 | 什麽 |
|---|---|
schema/*.json | JSON Schema (草案-07). 你唯一手写的档案. |
gen-go/ | 已生成 去包装 contracts (进口) github.com/Fourier-Labs-AI/harbour-contracts/gen-go) (中文(简体) ). |
gen-ts/ | 生成 TS 源; 发布于 @fourier-labs/harbour-contracts。 。 。 . |
contract-release.json | 生成出放出/版本外加聚合和每个文件的schema,AI-fixture,Go-source和TypeScript-source摘要,用于严格的消费针. |
tools/gen/gen.mjs | 单一代码驱动程序(节点). 验证每个计划,然后发出Go + TS. |
docs/adr/ | 会议记录(例如:. 0001-t1-ratified.md) (中文(简体) ). |
计划
| 文件 | 形状 | 长期 |
|---|---|---|
deploy-request.schema.json | MCP 磁共振 deploy(app, {commit, branch}) 有效载荷; 新预览部署默认为 branch_select 除非 sequential 明确 | 第7节 |
error-envelope.schema.json | 每个 FAILED 转换时发射的失败信封 | 第2.1节 |
error-category.enum.json | 闭合故障类别 enum + 每个类别 retryable 登记 | 第2.2节 |
artifact-contract.schema.json | 建立产出合同(供应商-可移动性接合),包括以摘要为主、定义明确的应用程序明确参考 | 第3节 |
well-defined-app-manifest.schema.json | 用于静态、全存储和浏览器第一应用程序的版本运行时线:工作量、时间表、队列、服务绑定、语言运行时、浏览器能力和路由认证 | 定义良好的应用程序 P0 |
version-state.schema.json | 状态机器 T1a — 状态,法律过渡,版本Id格式 | 第1节 |
env-bindings.schema.json | EnvBindings 编号 : Target 编号 : Binding (BYOC完成) (英语) | 第4.2.2节 |
kvs-routing-entry.schema.json | CloudFront KVS 路由值 (% 1){static, api}(中文(简体) ) | 第8条 |
ai-composite-policy-digest.schema.json | 订购复合政策摘要标识并生成GO/TS助手 | AI 治理 § 5.1 |
ai-classification-stamp.schema.json | 不可更改的确切版本分类证据 | AI治理 §5.2 |
ai-deployment-gate-decision.schema.json | 仅附加明确的部署门决定 | AI治理 §5.2 |
ai-governance-decision.schema.json | AI治理决定,包括审查的OpenAI兼容客户端配置边界的无值描述符 | AI 治理 §5 |
ai-gateway-key-lifecycle-event.schema.json | 无价值版本的关键生命周期证据 | AI 治理 §7 |
ai-runtime-binding.schema.json | 平台中性工作量标识/保密约束 | AI治理第5.8节 |
binding-classification-subject.schema.json | 版本分配前的完整无值绑定名称分类 | AI 治理 § 5.7 / SEC-UP-01 |
sanitized-binding-evidence.schema.json | 准确的版本 sanitized 运行时间约束分配收据 | AI治理 第5.7节/SEC-UP-02 |
ai-pricing-revision, (中文(简体) ), ai-metering-policy, (中文(简体) ), ai-budget-ledger-event, (中文(简体) ), ai-trace-event-v2 | 附加计量 v2 记录,包括媒体维度和 P5 痕量归属; v1 记录仍可读取 | AI 治理 §9 |
app-integrations-declaration.schema.json | 承诺 .isomorph/integrations.json (单位:千美元)isomorph.app-integrations/2.0: 已关闭的八十一操作集(黑读/后/更新/删除/DM/ Lookup,Gmail list/thread/read/send/attachment-ADR 0018; Basecamp 项目/待办列表/待办列表/待办/消息/评论/人名单,待办、消息、评论和营火帖-ADR 0022;Sharepoint list/ite/drive/file list,文件搜索和读取,项目创建和更新,文件上传-ADR 0024;电话短消息列表-ADR 0028;电话号码读取-ADR 0029;Google日历、驱动器、Docs和工作表及展望、OneDRrive、Excel和Teams读取和写作签名人-ADR 0032;仓库视图读取和表格附载取`访问 ' 读取 | 附录 — ADR 0028; service request) with fixed or declared identity modes (gmail.message.send ' 于0.102.0 — ADR 0045宣布;4个Gmail自0.106.0 — ADR 0049读取;拥有共享操作/身份/环境enums |
integration-execute-request, (中文(简体) ), integration-execute-result, (中文(简体) ), integration-connect-result, (中文(简体) ), integration-error-details | App SDK集成电线合同 /_harbour/integrations/*: 操作输入范围(仓库读取过滤器、组、总量和仓库中的种类,并说何时) truncated – ADR 0017; Slack 和 Gmail 读取页面, 邮递线程, 邮件携带 HTML 和附件 – ADR 0018; 读取的开发仓库可能携带应用程序 sampleRows 结果是 sample ——ADR 0021; Basecamp 列表页面 pageToken,ids是数字字符串,写答 {id, appUrl} — ADR 0022; SharePoint 列表页图 $skiptoken身份证是图式身份证, fields 是一个有界限的记录, 写答 {id, webUrl} - ADR 0024;仓库附件需要 rows,并使用一个电话短信列表 since编号 :from ——ADR 0028;一个电话号码读取不需输入 ——ADR 0029;日历事件取用RFC 3339 start编号 :end,工作表和Excel带 values,一个带边框的单元格矩阵, Docs take replacements,且该事件读取,文档读取,值和工作表结果有各自的形状——ADR 0032,操作结果形状,同意状态和关闭状态 details.code 设置理由 | 发展工具包§4,§8 |
saas-connection.schema.json, (中文(简体) ), data-grant-v2.schema.json | 租户SaaS的连接记录(每个租户和供应商安装一个频道图;信息技术可选 oauthClient, (中文(简体) ), userModeApproval, (中文(简体) ), directMessages, (中文(简体) ), externalRecipients ——ADR 0018; Basecamp 连接被固定 account 和项目编号 channels ——ADR 0022;一个SharePoint连接的被钉住的微软365租户在 account 和站点编号 channels ——ADR 0024;最多20个 approvers - 除了租户管理者之外,他们可以批准访问请求——ADR 0026 channels - ADR 0028,一个应用程序用别名读取——ADR 0029;8个Google Workspace和Microsoft 365的供应商,只有用户同意,一个Teams连接的固定租户和 <teamId>/<channelId> 频道映射 — ADR 0032; 可选 startedBy 当一个构建者的第一个请求创建连接时 —— ADR 0034; 一个 Gmail 连接的 installation 是公司邮箱IT连接, botName 其地址——ADR 0045和添加剂 harbour.data-grant/2.0 具有结构化资源和提供租赁/清理的赠款记录(生成状况机器;遗产) data-grant 未触及) | 第5节 |
kit-bundle-manifest.schema.json, (中文(简体) ), kit-lock.schema.json | 已发布套装捆绑身份( SDK tarball 文摘加可选) sdk.version 链接 sdk.url 下载位置)和承诺 .isomorph/kit.lock.json 密码 建造 SDK 复仇门比较 | 发展工具箱§3 |
deploy-response.schema.json | 接受机构 POST /v1/tenants/{tenant}/apps/{app}/deployments,仅在权威的 QUEUED 版本存在并接受其 SQS 消息后返回 | —— 说 |
deployment-source.schema.json | 证书无源 DeployRequest 机构 : provider 实值 github 或者说 gitlab, (中文(简体) ), repositoryUrl 并且部署控制平面对照租户的源链接(ADR 0023)检查宿主; 证书通过 Matterize Source 内部解决 | —— 说 |
deployment-environment.schema.json | 预览 API 所接受的公共环境(preview 只能通过促销来实现生产) | —— 说 |
api-error-response.schema.json | 部署/状态Lambda的安全JSON错误机构 4xx/5xxx答复;不同于内部 ErrorEnvelope | —— 说 |
deployment-status-request.schema.json | 经验证的路径参数 GET /v1/tenants/{tenant}/apps/{app}/deployments/{versionId} | —— 说 |
deployment-status-response.schema.json | 200 OK body for GET status: 准确的不可改变版本,带有 progress 线索, deployTarget 财务报告和审定财务报表 diagnosticRef | —— 说 |
deployment-status-failure.schema.json | 前端安全故障投影嵌入了失败状态响应; 带摘要 diagnosticRef 找到经编辑的诊断 | —— 说 |
promotion-request.schema.json | 机构 POST /v1/tenants/{tenant}/apps/{app}/promotions;寄存器身份来自存储的记录,而非调用者 | ADR 0003 数据 |
promotion-response.schema.json | 202 接受体在生产版本及其耐用性约束存在后返回 | ADR 0003 数据 |
transform-report.schema.json | 结构化输出 一种剂必须从一次变换尝试返回; 交给该剂作为输出计划并被控制平面重新验证 | —— 说 |
transform-parked-result.schema.json | 在需要建构器输入时, 在一个持久的检查站后进行连续审查的结果; 没有成功的报告 | —— 说 |
builder-input-proposal.schema.json | 在没有构建者自主输入的情况下,连续预览无法继续进行时发布的无价值建议 | —— 说 |
deployment-continuation.schema.json | 允许从已停放的输入请求中部署一个儿童的不可改变的参考文献;从未使用证书值 | —— 说 |
security-scan-input-v2.schema.json | 向安全保证机器提供投入harbour.security-scan-input/2.0,替换v1):一个包在源输入处验证,扫描在租户的执行账户中 | ADR 0014 (英语) |
security-verdict.schema.json | 安全保证决定; BLOCKED 表面为不可重试 gate.security-scan 类别 | ADR 0014 (英语) |
data-source.schema.json | 行政登记的外部数据来源; credentialRef 是一个隐秘的 URI , 证书从未越过此边界; 可选 development编号 :preview 副本 environments,生产是顶级终点;连接器包括 trino (ADR 0021)和 (中文(简体) ) clickhouse (ADR 0030) (中文(简体) ) | 数据存取 MVP |
data-dependency.schema.json | 与租户数据源清单相比,一个已申报或发现的应用程序的外部数据依赖性 | 数据存取 MVP |
secret-reference.schema.json | 命名一个应用程序所依赖的秘密槽; 只有引用及其生命周期交叉, 绝不是值 | 秘密经理MVP |
ai-callsite-inventory.schema.json | 一个精确的部署版本(仅检测)的不可移动,已消毒的AI呼叫站点发现 | AI 治理 |
ai-runtime-contract.schema.json | 由AI治理计划决定产生的不可移动运行时间合同;范围化配置外加保密管理者参考 | AI 治理 |
ai-policy-snapshot.schema.json | AI Gateway所摄取的、内容不易改变的AI政策快照 | AI 治理 |
ai-gateway-key-lookup.schema.json | 一个版本范围Isomorph 密钥的无值网关认证元数据 | AI 治理 |
ai-trace-event.schema.json | 无值 AI Gateway 追踪元数据( v1); 原始提示和回复从不入队列 | AI 治理 |
ai-transform-event.schema.json | 载有计划拦截计划的AI拦截任务输入 | AI 治理 |
ai-transform-result.schema.json | 确定性拦截结果:仅说明和摘要证据 | AI 治理 |
ai-verification-evidence.schema.json | 通过部署核查提交一个规范版本的无价值的有根据证据 | AI 治理 |
运行时资源简介是由转换、文物和
定义明确的应用程序显示。 支持的配置文件是 standard, (中文(简体) ), memory-1g,以及
memory-2g;消费者必须拒绝未经确认的原始CPU或内存覆盖.
两种计划携带逻辑 超越结构类型,生成到帮助者:
error-category.enum.json→IsRetryable(category)(前进) /isRetryable(category)(TS), 处理具体类别和家庭前缀storage.unsupported-engine.<engine>) (中文(简体) ). 未知类别已关闭( 不可重试) .version-state.schema.json→CanTransition(environment, from, to)编号 :IsTerminal(state)(开始)和canTransition编号 :isTerminal(TS),由x-transitions边缘列表——如此控制平面 任何消费者都同意一个来源的合法性.binding-classification-subject.schema.json财务报告和审定财务报表sanitized-binding-evidence.schema.json· 犬形长度前缀SHA-256 预想/潜水员加上确切姓名, 在 Go 和 TypeScript 中请求映射和分配接收验证器.integration-execute-request.schema.json→IntegrationExecuteInputRules+ 键validateIntegrationExecuteInput(operation, input)(TS)/ (中文(简体) )ValidateIntegrationExecuteInput(走开), 从每个操作的then- 块(propertyNames.enum, (中文(简体) ),required每个外地maximum编号 :default) (中文(简体) ). 治理者执行路径, 应用 SDK 和工具包的本地检查 拒绝同样判决的请求(limit must be an integer between 1 and 15; 计 数 SDK出售TypeScript文件,因为它没有依赖性.
工作流程
make gen # regenerate gen-go/ + gen-ts/ from schema/ (Node only — no Go needed)
make verify # regenerate, then fail if git shows a diff ← the staleness gate (CI runs this)
make build # compile-check the generated Go + TS (needs go + local tsc)
make test # generator determinism + contract-logic tests (Node; Go when installed)
代码是 只节点 这样 make gen 可在任何地方复制 tsc 为:
仅用于 编译检查 产出(make build),而不是生成.
更改形状
- 编辑方案
schema/。类别 enum 和 状态机器是 关闭 - 延长 他们 只有通过 PR 到此 repo (PR是通知消费者的地方). make gen承诺gen-go/+ 键gen-ts/除了改变计划.- CI (中文(简体) )
make verify失败 . - 不编辑
VERSION, (中文(简体) ),package.json其版本或CHANGELOG.md: 发布版本来自 页:1vX.Y.Z合并后按下标签( t)ADR 0050 (英语)) (中文(简体) ). - 形状变化是
(contracts)变化:通过/review+ 键/code-review ultra→/ship。 。 。 .
消费者应该将出版的三部分版本和出版的三部分放在上面
schemasDigest编号 :aiFixturesDigest 内 contract-release.json他们的线人应该
(一) 对照所生成的型号或计划,验证罐头装置;
在合同没有签出时,它不能默默不作.
Npm文物中包含 schema/, (中文(简体) ), fixtures/ai/, (中文(简体) ), gen-ts/ 和释放
显示,所以每个由显示器命名的字节都可从
同样的释放。 通过标记的 Go 模块源源仍然可用 .
generatedGo 财务报告和审定财务报表 generatedTypeScript 封存每个 .go编号 :.ts 文档中
软件包目录. gen-go/contract_release.go 财务报告和审定财务报表
gen-ts/contract-release.ts 是唯一的排除: 那些生成的文件
嵌入集合消化器本身,所以将它们包括进去将产生一个
自我参考,没有有限的摘要。 列出的排除和
(a) 测试拒绝任何不同的排斥设置和独立
重新计算每个包含的文件和集合 .
平台中性的工作量和秘密参考资料是标识,而不是一般的
URLs (英语). 他们用 scheme://authority/path 经审查的添加剂计划
登记(aws-sm, (中文(简体) ), iam-role, (中文(简体) ), k8s-sa, (中文(简体) ), secretref, (中文(简体) ), spiffe, (中文(简体) ), vault, (中文(简体) ),
vault-v2) (中文(简体) ). 一个新的平台在合同发布中扩展了登记处.
用户信息、 端口、 % 编码、 查询字符串、 碎片和空路径
区段故意无法代表,防止引用字段
成为证明或任意价值的运输.
V2 度量计方案是与现有 v1 政策/跟踪挂钩的预测 身份证明 在迁移期间,消费者可双读v1和v2,并可双写 都一样 旧记录从不重写;更正仅为附加调整 或取代记录。 删除 v1 写作需要单独记录 消费者削减证据.
消费
-
开始:
go get github.com/Fourier-Labs-AI/harbour-contracts/[email protected]二事使此相通,而后一相相出,非所显也.
发布标记必须是3个部分的分集. 运行和npm 需要
MAJOR.MINOR.PATCH,而此寄存器记录MAJOR.MINOR.PATCH.MICRO因此,可公布的发布要求多边空间研究组织: 成为零, 并按确定性绘制地图:仓库0.9.0.0− 包装0.9.0→ 发布标签v0.9.0。可选的四部分记账标签v0.9.0.0可能 在同一承诺中指明,但不公布。 CI验证这张地图, 更改日志标题和标签格式.Repo是私人的,Go从全球缓存取来. 设定此值一次 机器 :
go env -w GOPRIVATE=github.com/Fourier-Labs-AI/* git config --global credential."https://github.com/Fourier-Labs-AI".helper '!gh auth git-credential' git config --global credential."https://github.com/Fourier-Labs-AI".useHttpPath true证书的配置必须是 全局和URL范围d,该组合是 非附带事项 :
- 无法覆盖文件夹( I)
includeIf gitdir:…) (中文(简体) ). 运行git ls-remote内部~/go/pkg/mod/cache/vcs/…所以每个指南的助手从不 适用。 完全失败/tmp并且从伊索莫特的复出 让它看起来像一个糟糕的标签 而不是一个认证问题. - 使用 URL 前缀进行范围界定使其远离您其他的 GitHub 账户:仅
github.com/Fourier-Labs-AI/*使用此证书. - 一个SSH
insteadOf重写是通常的建议,而且 这里不对 除非你们 SSH 密钥属于一个有 Fourier org 访问权限的账户. 检查ssh -T [email protected]在到达它之前.
没有以上,
go get失败Repository not found——读作: 缺少标签, 而不是缺少访问权限 . - 无法覆盖文件夹( I)
-
{\FN华文楷体\FS16\1CHE0E0E0}TS:
npm i @fourier-labs/harbour-contracts——由CI从标签上发表. 手写AI政策解决器(resolver/index.ts(b) 与该船同装的船舶@fourier-labs/harbour-contracts/resolver子路径导出( n)package.jsonexports) (中文(简体) ).
页:1
gen.mjs 从节点生产两种语言。 走开 构建字段对齐 实值
(gofmt为通过 make fmt) ;这从未
影响编译,而 staleness gate 比较了原始生成器输出,所以保持绿色.