define TCS language and prove stage0 execution slice

This commit is contained in:
冰朔 2026-08-21 16:57:25 +08:00
commit 3959ae4270
31 changed files with 2449 additions and 5 deletions

View file

@ -23,3 +23,4 @@
- 最早 `guanghulab-main`已完成第一轮深审HNL/HLDP、语言膜、EXE、Grid 与质量零件真实存在,但版本分裂且没有统一原生执行闭环,现作为历史捐赠源登记。
- 关系与情感:采用带来源的定性事件状态迁移;第四枝情感连接禁止量化、评分、排序、比较,不再编造权重、衰减或半衰期。
- 光湖 OS 编译地基REPO-014 已有通过 32 项测试的 HLDP 世界清单校验与物理 NASM 数据编译引导;它证明物理启动地基已存在,但不等于通用 HLDP-NP→GIR 编译器、HNL 动词解释器或最终京东整机主控已经完成。
- TCS 统一语言 v0.1:已建立陌生 AI 学习入口、正式 EBNF、声明/字段/错误/模块 ABI 标准与 PROGRAM/PROTOCOL/MODULE/EVENT 示例Stage-0 已把真实 `.tcs` 程序编译成 GIR 并执行 `CORE.ECHO`、读回回执。Stage-0 明确只是外部宿主点火器TCS Stage-1 编译器源码已写出但尚未达到自编译固定点,不能称原生转移器完成。

284
bootstrap/tcs-stage0/Cargo.lock generated Normal file
View file

@ -0,0 +1,284 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "bitflags"
version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cpufeatures"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
[[package]]
name = "crypto-common"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
]
[[package]]
name = "errno"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys",
]
[[package]]
name = "fastrand"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
dependencies = [
"cfg-if",
"libc",
"r-efi",
]
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "libc"
version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "linux-raw-sys"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "memchr"
version = "2.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
[[package]]
name = "once_cell"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "r-efi"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "rustix"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
"bitflags",
"errno",
"libc",
"linux-raw-sys",
"windows-sys",
]
[[package]]
name = "serde"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde_core"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "sha2"
version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "syn"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "tcs-stage0"
version = "0.1.0"
dependencies = [
"serde",
"serde_json",
"sha2",
"tempfile",
]
[[package]]
name = "tempfile"
version = "3.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [
"fastrand",
"getrandom",
"once_cell",
"rustix",
"windows-sys",
]
[[package]]
name = "typenum"
version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]]
name = "zmij"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"

View file

@ -0,0 +1,15 @@
[package]
name = "tcs-stage0"
version = "0.1.0"
edition = "2021"
license = "AGPL-3.0-or-later"
description = "Replaceable Stage-0 ignition parser/compiler for TCS; never native authority"
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "0.10"
[dev-dependencies]
tempfile = "3"

View file

@ -0,0 +1,805 @@
use serde::{Deserialize, Serialize};
use serde_json::{json, Value as JsonValue};
use sha2::{Digest, Sha256};
use std::{
collections::BTreeMap,
fs,
path::{Component, Path, PathBuf},
};
pub const COMPILER_ID: &str = "TCS-STAGE0-IGNITION-0001";
pub const COMPILER_STATE: &str = "FOREIGN_HOST_BOOTSTRAP_SEED_NOT_SELF_HOSTED";
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum TcsValue {
Null,
Bool(bool),
Int(i64),
Text(String),
List(Vec<TcsValue>),
Object(BTreeMap<String, TcsValue>),
}
impl TcsValue {
fn object(&self, field: &str) -> Result<&BTreeMap<String, TcsValue>, TcsError> {
match self {
Self::Object(value) => Ok(value),
_ => Err(TcsError::new(
"TCS-E2001",
format!("{field} must be an object"),
)),
}
}
fn text(&self, field: &str) -> Result<&str, TcsError> {
match self {
Self::Text(value) => Ok(value),
_ => Err(TcsError::new("TCS-E2001", format!("{field} must be text"))),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TcsDocument {
pub language_version: String,
pub declaration_kind: String,
pub declaration_id: String,
pub body: BTreeMap<String, TcsValue>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TcsError {
pub code: &'static str,
pub message: String,
pub line: usize,
pub column: usize,
}
impl TcsError {
fn new(code: &'static str, message: impl Into<String>) -> Self {
Self {
code,
message: message.into(),
line: 0,
column: 0,
}
}
fn at(mut self, line: usize, column: usize) -> Self {
self.line = line;
self.column = column;
self
}
}
impl std::fmt::Display for TcsError {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if self.line == 0 {
write!(formatter, "{}: {}", self.code, self.message)
} else {
write!(
formatter,
"{} at {}:{}: {}",
self.code, self.line, self.column, self.message
)
}
}
}
impl std::error::Error for TcsError {}
#[derive(Debug, Clone, PartialEq)]
enum TokenKind {
Identifier(String),
Text(String),
Int(i64),
Bool(bool),
Null,
LBrace,
RBrace,
LBracket,
RBracket,
Less,
Greater,
Colon,
Equal,
Comma,
Semicolon,
Dot,
Eof,
}
#[derive(Debug, Clone)]
struct Token {
kind: TokenKind,
line: usize,
column: usize,
}
struct Lexer<'a> {
chars: Vec<char>,
index: usize,
line: usize,
column: usize,
_source: &'a str,
}
impl<'a> Lexer<'a> {
fn new(source: &'a str) -> Result<Self, TcsError> {
if source.starts_with('\u{feff}') {
return Err(TcsError::new("TCS-E0001", "UTF-8 BOM is forbidden"));
}
Ok(Self {
chars: source.chars().collect(),
index: 0,
line: 1,
column: 1,
_source: source,
})
}
fn peek(&self) -> Option<char> {
self.chars.get(self.index).copied()
}
fn peek_next(&self) -> Option<char> {
self.chars.get(self.index + 1).copied()
}
fn bump(&mut self) -> Option<char> {
let value = self.peek()?;
self.index += 1;
if value == '\n' {
self.line += 1;
self.column = 1;
} else {
self.column += 1;
}
Some(value)
}
fn skip_space_and_comments(&mut self) -> Result<(), TcsError> {
loop {
while self.peek().is_some_and(char::is_whitespace) {
self.bump();
}
if self.peek() == Some('/') && self.peek_next() == Some('/') {
while self.peek().is_some_and(|value| value != '\n') {
self.bump();
}
continue;
}
if self.peek() == Some('/') && self.peek_next() == Some('*') {
let line = self.line;
let column = self.column;
self.bump();
self.bump();
loop {
match (self.peek(), self.peek_next()) {
(Some('*'), Some('/')) => {
self.bump();
self.bump();
break;
}
(Some(_), _) => {
self.bump();
}
(None, _) => {
return Err(TcsError::new("TCS-E0002", "unterminated block comment")
.at(line, column));
}
}
}
continue;
}
return Ok(());
}
}
fn token(&mut self) -> Result<Token, TcsError> {
self.skip_space_and_comments()?;
let line = self.line;
let column = self.column;
let Some(value) = self.peek() else {
return Ok(Token {
kind: TokenKind::Eof,
line,
column,
});
};
let punctuation = match value {
'{' => Some(TokenKind::LBrace),
'}' => Some(TokenKind::RBrace),
'[' => Some(TokenKind::LBracket),
']' => Some(TokenKind::RBracket),
'<' => Some(TokenKind::Less),
'>' => Some(TokenKind::Greater),
':' => Some(TokenKind::Colon),
'=' => Some(TokenKind::Equal),
',' => Some(TokenKind::Comma),
';' => Some(TokenKind::Semicolon),
'.' => Some(TokenKind::Dot),
_ => None,
};
if let Some(kind) = punctuation {
self.bump();
return Ok(Token { kind, line, column });
}
if value == '"' {
return self.string_token(line, column);
}
if value == '-' || value.is_ascii_digit() {
return self.integer_token(line, column);
}
if value == '_' || value.is_alphabetic() {
return Ok(self.identifier_token(line, column));
}
Err(TcsError::new("TCS-E1001", format!("unexpected character {value:?}")).at(line, column))
}
fn identifier_token(&mut self, line: usize, column: usize) -> Token {
let mut value = String::new();
while self.peek().is_some_and(|character| {
character.is_alphanumeric() || matches!(character, '_' | '-' | '.' | '/' | ':' | '@')
}) {
value.push(self.bump().expect("peeked character"));
}
let kind = match value.as_str() {
"true" => TokenKind::Bool(true),
"false" => TokenKind::Bool(false),
"null" => TokenKind::Null,
_ => TokenKind::Identifier(value),
};
Token { kind, line, column }
}
fn integer_token(&mut self, line: usize, column: usize) -> Result<Token, TcsError> {
let mut value = String::new();
if self.peek() == Some('-') {
value.push(self.bump().expect("minus"));
}
while self
.peek()
.is_some_and(|character| character.is_ascii_digit())
{
value.push(self.bump().expect("digit"));
}
if value == "-" {
return Err(TcsError::new("TCS-E1001", "minus must precede digits").at(line, column));
}
let parsed = value
.parse::<i64>()
.map_err(|_| TcsError::new("TCS-E2001", "integer out of range").at(line, column))?;
Ok(Token {
kind: TokenKind::Int(parsed),
line,
column,
})
}
fn string_token(&mut self, line: usize, column: usize) -> Result<Token, TcsError> {
self.bump();
let mut raw = String::from("\"");
loop {
match self.bump() {
Some('"') => {
raw.push('"');
break;
}
Some('\\') => {
raw.push('\\');
let escaped = self.bump().ok_or_else(|| {
TcsError::new("TCS-E0002", "unterminated string escape").at(line, column)
})?;
raw.push(escaped);
}
Some('\n' | '\r') | None => {
return Err(TcsError::new("TCS-E0002", "unterminated string").at(line, column));
}
Some(character) => raw.push(character),
}
}
let decoded: String = serde_json::from_str(&raw).map_err(|error| {
TcsError::new("TCS-E0002", format!("invalid string escape: {error}")).at(line, column)
})?;
Ok(Token {
kind: TokenKind::Text(decoded),
line,
column,
})
}
}
struct Parser<'a> {
lexer: Lexer<'a>,
current: Token,
}
impl<'a> Parser<'a> {
fn new(source: &'a str) -> Result<Self, TcsError> {
let mut lexer = Lexer::new(source)?;
let current = lexer.token()?;
Ok(Self { lexer, current })
}
fn advance(&mut self) -> Result<Token, TcsError> {
let old = self.current.clone();
self.current = self.lexer.token()?;
Ok(old)
}
fn symbol(&mut self, expected: TokenKind) -> Result<(), TcsError> {
if std::mem::discriminant(&self.current.kind) == std::mem::discriminant(&expected) {
self.advance()?;
Ok(())
} else {
Err(TcsError::new(
"TCS-E1001",
format!("expected {expected:?}, found {:?}", self.current.kind),
)
.at(self.current.line, self.current.column))
}
}
fn identifier(&mut self) -> Result<String, TcsError> {
match self.advance()? {
Token {
kind: TokenKind::Identifier(value),
..
} => Ok(value),
token => Err(TcsError::new(
"TCS-E1001",
format!("expected identifier, found {:?}", token.kind),
)
.at(token.line, token.column)),
}
}
fn document(&mut self) -> Result<TcsDocument, TcsError> {
let prologue = self.identifier()?;
if prologue != "TCS" {
return Err(TcsError::new("TCS-E1001", "file must begin with TCS"));
}
let major = match self.advance()?.kind {
TokenKind::Int(value) if value >= 0 => value,
_ => return Err(TcsError::new("TCS-E1001", "invalid language version")),
};
self.symbol(TokenKind::Dot)?;
let minor = match self.advance()?.kind {
TokenKind::Int(value) if value >= 0 => value,
_ => return Err(TcsError::new("TCS-E1001", "invalid language version")),
};
self.symbol(TokenKind::Semicolon)?;
let declaration_kind = self.identifier()?;
if !matches!(
declaration_kind.as_str(),
"PROGRAM" | "MODULE" | "PROTOCOL" | "COMPILER" | "EVENT" | "RECEIPT"
) {
return Err(TcsError::new(
"TCS-E1001",
format!("unknown declaration kind {declaration_kind}"),
));
}
let declaration_id = self.identifier()?;
let body = self.block()?;
if self.current.kind != TokenKind::Eof {
return Err(
TcsError::new("TCS-E1001", "trailing tokens after declaration")
.at(self.current.line, self.current.column),
);
}
Ok(TcsDocument {
language_version: format!("{major}.{minor}"),
declaration_kind,
declaration_id,
body,
})
}
fn block(&mut self) -> Result<BTreeMap<String, TcsValue>, TcsError> {
self.symbol(TokenKind::LBrace)?;
let mut object = BTreeMap::new();
while self.current.kind != TokenKind::RBrace {
if self.current.kind == TokenKind::Eof {
return Err(TcsError::new("TCS-E1001", "unterminated block"));
}
let line = self.current.line;
let column = self.current.column;
let key = self.identifier()?;
let value = match self.current.kind {
TokenKind::LBrace => TcsValue::Object(self.block()?),
TokenKind::Colon => {
self.advance()?;
self.type_expression()?;
self.symbol(TokenKind::Equal)?;
let value = self.value()?;
self.symbol(TokenKind::Semicolon)?;
value
}
TokenKind::Equal => {
self.advance()?;
let value = self.value()?;
self.symbol(TokenKind::Semicolon)?;
value
}
_ => {
return Err(TcsError::new(
"TCS-E1001",
"expected block, type annotation, or assignment",
)
.at(self.current.line, self.current.column));
}
};
if object.insert(key.clone(), value).is_some() {
return Err(TcsError::new(
"TCS-E1002",
format!("duplicate field or section {key}"),
)
.at(line, column));
}
}
self.advance()?;
Ok(object)
}
fn type_expression(&mut self) -> Result<(), TcsError> {
self.identifier()?;
if self.current.kind == TokenKind::Less {
self.advance()?;
self.type_expression()?;
while self.current.kind == TokenKind::Comma {
self.advance()?;
self.type_expression()?;
}
self.symbol(TokenKind::Greater)?;
}
Ok(())
}
fn value(&mut self) -> Result<TcsValue, TcsError> {
match self.advance()? {
Token {
kind: TokenKind::Text(value),
..
}
| Token {
kind: TokenKind::Identifier(value),
..
} => Ok(TcsValue::Text(value)),
Token {
kind: TokenKind::Int(value),
..
} => Ok(TcsValue::Int(value)),
Token {
kind: TokenKind::Bool(value),
..
} => Ok(TcsValue::Bool(value)),
Token {
kind: TokenKind::Null,
..
} => Ok(TcsValue::Null),
Token {
kind: TokenKind::LBracket,
..
} => self.array(),
Token {
kind: TokenKind::LBrace,
..
} => self.inline_object(),
token => Err(TcsError::new(
"TCS-E1001",
format!("invalid value token {:?}", token.kind),
)
.at(token.line, token.column)),
}
}
fn array(&mut self) -> Result<TcsValue, TcsError> {
let mut values = Vec::new();
if self.current.kind != TokenKind::RBracket {
loop {
values.push(self.value()?);
if self.current.kind != TokenKind::Comma {
break;
}
self.advance()?;
}
}
self.symbol(TokenKind::RBracket)?;
Ok(TcsValue::List(values))
}
fn inline_object(&mut self) -> Result<TcsValue, TcsError> {
let mut object = BTreeMap::new();
if self.current.kind != TokenKind::RBrace {
loop {
let key = self.identifier()?;
self.symbol(TokenKind::Colon)?;
let value = self.value()?;
if object.insert(key.clone(), value).is_some() {
return Err(TcsError::new(
"TCS-E1002",
format!("duplicate inline field {key}"),
));
}
if self.current.kind != TokenKind::Comma {
break;
}
self.advance()?;
}
}
self.symbol(TokenKind::RBrace)?;
Ok(TcsValue::Object(object))
}
}
pub fn parse(source: &str) -> Result<TcsDocument, TcsError> {
Parser::new(source)?.document()
}
const PROGRAM_SECTIONS: [&str; 15] = [
"header",
"source",
"subject",
"target",
"inputs",
"outputs",
"conditions",
"actions",
"authority",
"resources",
"failure",
"stop",
"cleanup",
"rollback",
"receipt",
];
fn required_text<'a>(
object: &'a BTreeMap<String, TcsValue>,
field: &str,
) -> Result<&'a str, TcsError> {
object
.get(field)
.ok_or_else(|| TcsError::new("TCS-E1004", format!("required field {field} missing")))?
.text(field)
}
pub fn validate_program(document: &TcsDocument) -> Result<(), TcsError> {
if document.language_version != "0.1" {
return Err(TcsError::new(
"TCS-E2102",
format!("unsupported TCS version {}", document.language_version),
));
}
if document.declaration_kind != "PROGRAM" {
return Err(TcsError::new(
"TCS-E2001",
"Stage-0 executable subset accepts PROGRAM only",
));
}
for section in PROGRAM_SECTIONS {
document.body.get(section).ok_or_else(|| {
TcsError::new("TCS-E1004", format!("required section {section} missing"))
})?;
}
for section in document.body.keys() {
if !PROGRAM_SECTIONS.contains(&section.as_str()) {
return Err(TcsError::new(
"TCS-E1003",
format!("unknown PROGRAM section {section}"),
));
}
}
let header = document.body["header"].object("header")?;
for field in [
"schema",
"name_zh",
"name_en",
"version",
"language",
"profile",
"lifecycle",
"canonical_uri",
] {
required_text(header, field)?;
}
if !header.contains_key("protocols") || !header.contains_key("compatibility") {
return Err(TcsError::new(
"TCS-E1004",
"header requires protocols and compatibility",
));
}
let actions = document.body["actions"].object("actions")?;
if actions.is_empty() {
return Err(TcsError::new("TCS-E1004", "actions must not be empty"));
}
for (action_id, action) in actions {
let action = action.object(action_id)?;
let operation = required_text(action, "operation")?;
if operation != "CORE.ECHO" {
return Err(TcsError::new(
"TCS-E2101",
format!("unregistered Stage-0 operation {operation}"),
));
}
for field in ["input_refs", "output_refs", "on_success", "on_failure"] {
if !action.contains_key(field) {
return Err(TcsError::new(
"TCS-E1004",
format!("action {action_id} missing {field}"),
));
}
}
}
Ok(())
}
pub fn sha256_hex(bytes: impl AsRef<[u8]>) -> String {
format!("{:x}", Sha256::digest(bytes.as_ref()))
}
pub fn compile(source: &str) -> Result<JsonValue, TcsError> {
let document = parse(source)?;
validate_program(&document)?;
let source_sha256 = sha256_hex(source.as_bytes());
let body = serde_json::to_value(&document.body)
.map_err(|error| TcsError::new("TCS-E8001", error.to_string()))?;
Ok(json!({
"schema": "guanghu.gir/v1",
"identity": {
"gir_id": format!("GIR-{}", document.declaration_id),
"program_id": document.declaration_id,
"language_version": document.language_version,
},
"compiled_from": {
"source_sha256": source_sha256,
"compiler_id": COMPILER_ID,
"compiler_state": COMPILER_STATE,
},
"subject": body["subject"].clone(),
"exact_target": body["target"].clone(),
"inputs": body["inputs"].clone(),
"outputs": body["outputs"].clone(),
"conditions": body["conditions"].clone(),
"deterministic_action_graph": body["actions"].clone(),
"authority_proof": body["authority"].clone(),
"resource_plan": body["resources"].clone(),
"failure_plan": body["failure"].clone(),
"timeout_and_stop": body["stop"].clone(),
"cleanup_plan": body["cleanup"].clone(),
"rollback_plan": body["rollback"].clone(),
"receipt_plan": body["receipt"].clone(),
"unresolved_natural_language": false,
"native_self_hosted": false,
}))
}
pub fn canonical_json(value: &JsonValue) -> Result<String, TcsError> {
serde_json::to_string_pretty(value)
.map(|mut text| {
text.push('\n');
text
})
.map_err(|error| TcsError::new("TCS-E8001", error.to_string()))
}
fn safe_relative_path(value: &str) -> Result<PathBuf, TcsError> {
let path = Path::new(value);
if path.is_absolute() {
return Err(TcsError::new("TCS-E4002", "absolute target path forbidden"));
}
let mut result = PathBuf::new();
for component in path.components() {
match component {
Component::CurDir => {}
Component::Normal(value) => result.push(value),
_ => {
return Err(TcsError::new(
"TCS-E4002",
"target path traversal forbidden",
));
}
}
}
if result.as_os_str().is_empty() {
return Err(TcsError::new("TCS-E4002", "empty target path forbidden"));
}
Ok(result)
}
fn json_text<'a>(value: &'a JsonValue, pointer: &str) -> Result<&'a str, TcsError> {
value
.pointer(pointer)
.and_then(JsonValue::as_str)
.ok_or_else(|| TcsError::new("TCS-E2001", format!("missing text at {pointer}")))
}
pub fn run_echo_gir(gir: &JsonValue, root: &Path) -> Result<PathBuf, TcsError> {
if gir.get("schema").and_then(JsonValue::as_str) != Some("guanghu.gir/v1") {
return Err(TcsError::new("TCS-E2001", "unsupported GIR schema"));
}
if gir
.pointer("/compiled_from/compiler_state")
.and_then(JsonValue::as_str)
!= Some(COMPILER_STATE)
{
return Err(TcsError::new("TCS-E3002", "unknown compiler provenance"));
}
let actions = gir
.get("deterministic_action_graph")
.and_then(JsonValue::as_object)
.ok_or_else(|| TcsError::new("TCS-E2001", "missing action graph"))?;
if actions.len() != 1 {
return Err(TcsError::new(
"TCS-E2101",
"Stage-0 runner requires exactly one action",
));
}
let action = actions.values().next().expect("one action");
if action.get("operation").and_then(JsonValue::as_str) != Some("CORE.ECHO") {
return Err(TcsError::new("TCS-E2101", "runner permits CORE.ECHO only"));
}
let message = json_text(gir, "/inputs/MESSAGE/value")?;
let target = json_text(gir, "/exact_target/exact_path")?;
let receipt_target = json_text(gir, "/receipt_plan/machine_path")?;
if target != receipt_target {
return Err(TcsError::new(
"TCS-E6001",
"target and receipt path must match",
));
}
let relative = safe_relative_path(target)?;
let output = root.join(relative);
let parent = output
.parent()
.ok_or_else(|| TcsError::new("TCS-E4002", "target has no parent"))?;
fs::create_dir_all(parent).map_err(|error| {
TcsError::new(
"TCS-E8001",
format!("cannot create receipt parent: {error}"),
)
})?;
let receipt = json!({
"schema": "tcs.execution-receipt/v1",
"state": "EXECUTED_TARGET_READBACK_VERIFIED",
"program_id": json_text(gir, "/identity/program_id")?,
"operation": "CORE.ECHO",
"output": { "ECHOED": message },
"gir_sha256": sha256_hex(canonical_json(gir)?.as_bytes()),
"compiler_state": COMPILER_STATE,
"native_self_hosted": false,
});
let encoded = canonical_json(&receipt)?;
fs::write(&output, encoded.as_bytes())
.map_err(|error| TcsError::new("TCS-E8001", format!("cannot write receipt: {error}")))?;
let readback = fs::read(&output)
.map_err(|error| TcsError::new("TCS-E6002", format!("cannot read receipt: {error}")))?;
if readback != encoded.as_bytes() {
return Err(TcsError::new("TCS-E6002", "receipt readback differs"));
}
Ok(output)
}
pub fn compile_file(source: &Path, output: &Path) -> Result<(), TcsError> {
let source_text = fs::read_to_string(source)
.map_err(|error| TcsError::new("TCS-E3002", format!("cannot read source: {error}")))?;
let gir = compile(&source_text)?;
let encoded = canonical_json(&gir)?;
if let Some(parent) = output.parent() {
fs::create_dir_all(parent).map_err(|error| {
TcsError::new("TCS-E8001", format!("cannot create output: {error}"))
})?;
}
fs::write(output, encoded)
.map_err(|error| TcsError::new("TCS-E8001", format!("cannot write GIR: {error}")))
}
pub fn run_gir_file(gir_path: &Path, root: &Path) -> Result<PathBuf, TcsError> {
let text = fs::read_to_string(gir_path)
.map_err(|error| TcsError::new("TCS-E3002", format!("cannot read GIR: {error}")))?;
let gir: JsonValue = serde_json::from_str(&text)
.map_err(|error| TcsError::new("TCS-E2001", format!("invalid GIR JSON: {error}")))?;
run_echo_gir(&gir, root)
}

View file

@ -0,0 +1,35 @@
use std::{env, fs, path::Path};
fn usage() -> &'static str {
"usage: tcs-stage0 parse <source.tcs> | compile <source.tcs> <output.gir.json> | run <input.gir.json> <allowed-root>"
}
fn main() {
if let Err(error) = run() {
eprintln!("{error}");
std::process::exit(1);
}
}
fn run() -> Result<(), Box<dyn std::error::Error>> {
let arguments: Vec<String> = env::args().skip(1).collect();
match arguments.as_slice() {
[command, source] if command == "parse" => {
let text = fs::read_to_string(source)?;
let document = tcs_stage0::parse(&text)?;
println!("{}", serde_json::to_string_pretty(&document)?);
Ok(())
}
[command, source, output] if command == "compile" => {
tcs_stage0::compile_file(Path::new(source), Path::new(output))?;
println!("COMPILED {source} -> {output}");
Ok(())
}
[command, gir, root] if command == "run" => {
let receipt = tcs_stage0::run_gir_file(Path::new(gir), Path::new(root))?;
println!("EXECUTED receipt={}", receipt.display());
Ok(())
}
_ => Err(usage().into()),
}
}

View file

@ -0,0 +1,76 @@
use serde_json::Value as JsonValue;
use std::{fs, path::Path};
fn example() -> String {
fs::read_to_string(
Path::new(env!("CARGO_MANIFEST_DIR")).join("../../language/examples/ECHO-MODULE.tcs"),
)
.expect("example source")
}
#[test]
fn parses_and_compiles_the_registered_echo_program() {
let source = example();
let document = tcs_stage0::parse(&source).expect("parse");
assert_eq!(document.language_version, "0.1");
assert_eq!(document.declaration_kind, "PROGRAM");
assert_eq!(document.declaration_id, "HLP-PROGRAM-ECHO-0001");
let gir = tcs_stage0::compile(&source).expect("compile");
assert_eq!(gir["schema"], "guanghu.gir/v1");
assert_eq!(gir["native_self_hosted"], false);
assert_eq!(
gir.pointer("/deterministic_action_graph/A1/operation")
.and_then(JsonValue::as_str),
Some("CORE.ECHO")
);
}
#[test]
fn rejects_duplicate_fields_and_missing_sections() {
let duplicate = "TCS 0.1; EVENT E1 { x = 1; x = 2; }";
let error = tcs_stage0::parse(duplicate).expect_err("duplicate must fail");
assert_eq!(error.code, "TCS-E1002");
let missing = "TCS 0.1; PROGRAM P1 { header { schema = \"tcs.program/v1\"; name_zh = \"x\"; name_en = \"x\"; version = \"0.1.0\"; language = \"TCS/0.1\"; profile = \"HLDP-NP/1\"; protocols = []; lifecycle = \"CANDIDATE\"; canonical_uri = \"x\"; compatibility = []; } }";
let document = tcs_stage0::parse(missing).expect("syntax is valid");
let error = tcs_stage0::validate_program(&document).expect_err("missing sections must fail");
assert_eq!(error.code, "TCS-E1004");
}
#[test]
fn rejects_unregistered_operations() {
let source = example().replace("CORE.ECHO", "ABSORB");
let error = tcs_stage0::compile(&source).expect_err("ABSORB must fail closed");
assert_eq!(error.code, "TCS-E2101");
}
#[test]
fn executes_gir_inside_exact_root_and_reads_receipt_back() {
let root = tempfile::tempdir().expect("temp root");
let gir = tcs_stage0::compile(&example()).expect("compile");
let receipt = tcs_stage0::run_echo_gir(&gir, root.path()).expect("run");
assert!(receipt.starts_with(root.path()));
let value: JsonValue =
serde_json::from_str(&fs::read_to_string(receipt).expect("receipt")).expect("receipt json");
assert_eq!(value["state"], "EXECUTED_TARGET_READBACK_VERIFIED");
assert_eq!(
value.pointer("/output/ECHOED").and_then(JsonValue::as_str),
Some("光湖语言已经进入机器执行链")
);
assert_eq!(value["native_self_hosted"], false);
}
#[test]
fn rejects_path_traversal_and_target_receipt_mismatch() {
let root = tempfile::tempdir().expect("temp root");
let mut gir = tcs_stage0::compile(&example()).expect("compile");
gir["exact_target"]["exact_path"] = JsonValue::String("../escape".to_owned());
gir["receipt_plan"]["machine_path"] = JsonValue::String("../escape".to_owned());
let error = tcs_stage0::run_echo_gir(&gir, root.path()).expect_err("traversal must fail");
assert_eq!(error.code, "TCS-E4002");
let mut mismatch = tcs_stage0::compile(&example()).expect("compile");
mismatch["receipt_plan"]["machine_path"] = JsonValue::String("./build/other".to_owned());
let error = tcs_stage0::run_echo_gir(&mismatch, root.path()).expect_err("mismatch must fail");
assert_eq!(error.code, "TCS-E6001");
}

View file

@ -0,0 +1,21 @@
schema: hololake.module-registry-broadcast/v1
id: HLP-MODULE-BROADCAST-20260821-0004
display_name: TCS 统一语言规范、Stage-0 点火链与自举边界广播
channel_id: ICE-CH-ZC001
scope: LOCAL_FOUNDATION_ONLY
state: REGISTERED_NOT_PUBLISHED_NOT_INSTALLED
parts:
- HLP-PART-TCS-LANG-0001
- HLP-PART-TCS-STAGE0-0001
- HLP-PART-TCS-SELFHOST-0001
claims:
one_tcs_language_tree_defined: true
unfamiliar_ai_learning_entry_defined: true
tcs_source_parses: true
tcs_program_compiles_to_gir: true
core_echo_executes_with_target_readback: true
stage0_is_native_authority: false
self_hosted_compiler_complete: false
hololake_loader_integrated: false
guanghu_os_loader_integrated: false

View file

@ -25,6 +25,12 @@
"displayName": "最早光湖原生语言零件恢复与关系事件语法广播",
"path": "broadcasts/20260821-historical-native-language-recovery.hldp",
"state": "LOCAL_ONLY_RECONCILIATION_ACTIVE_RUNTIME_NOT_ACCEPTED"
},
{
"id": "HLP-MODULE-BROADCAST-20260821-0004",
"displayName": "TCS 统一语言规范、Stage-0 点火链与自举边界广播",
"path": "broadcasts/20260821-tcs-language-stage0-and-selfhost.hldp",
"state": "LOCAL_ONLY_STAGE0_EXECUTABLE_SELFHOST_PENDING"
}
]
}

113
build/ECHO-MODULE.gir.json Normal file
View file

@ -0,0 +1,113 @@
{
"authority_proof": {
"issuer": "LOCAL_TEST_FIXTURE",
"lease_required": false,
"proof_ref": "TEST-ONLY",
"scope": "EXACT_BUILD_RECEIPT_PATH",
"single_use": true,
"valid_from": "PROGRAM_START",
"valid_until": "PROGRAM_END"
},
"cleanup_plan": {
"exact_boundary": "./build",
"targets": [
"UNCOMMITTED_TEST_RECEIPT"
]
},
"compiled_from": {
"compiler_id": "TCS-STAGE0-IGNITION-0001",
"compiler_state": "FOREIGN_HOST_BOOTSTRAP_SEED_NOT_SELF_HOSTED",
"source_sha256": "f1ecd630e50dfe5374ca26998d68a49efd35cf3d9de54ecabd3ca3aae68c61bf"
},
"conditions": {
"C1": {
"on_false": "FAIL_CLOSED",
"predicate": "TARGET_WITHIN_TEST_BUILD_ROOT"
}
},
"deterministic_action_graph": {
"A1": {
"input_refs": [
"MESSAGE"
],
"on_failure": "FAIL_CLOSED",
"on_success": "COMPLETE",
"operation": "CORE.ECHO",
"output_refs": [
"ECHOED"
]
}
},
"exact_target": {
"exact_path": "./build/echo-receipt.hldp",
"expected_fingerprint": "NONE",
"expected_state": "ABSENT",
"target_id": "HLP-TARGET-STAGE0-RECEIPT"
},
"failure_plan": {
"errors": [
"TCS-E6001",
"TCS-E8001"
],
"fail_closed": true
},
"identity": {
"gir_id": "GIR-HLP-PROGRAM-ECHO-0001",
"language_version": "0.1",
"program_id": "HLP-PROGRAM-ECHO-0001"
},
"inputs": {
"MESSAGE": {
"required": true,
"source": "PROGRAM_LITERAL",
"type": "Text",
"value": "光湖语言已经进入机器执行链"
}
},
"native_self_hosted": false,
"outputs": {
"ECHOED": {
"destination": "RECEIPT",
"integrity": "SHA256",
"type": "Text"
}
},
"receipt_plan": {
"human_projection": "REQUIRED",
"integrity": "SHA256",
"machine_path": "./build/echo-receipt.hldp",
"protocol": "TCS-DEV-VERIFY-v1.0",
"target_readback": "EXACT_CONTENT_AND_HASH"
},
"resource_plan": {
"concurrency": 1,
"memory_limit_bytes": 1048576,
"runway": "LOCAL_TEST",
"timeout_ms": 1000
},
"rollback_plan": {
"actions": [
"DROP_TEMP_RECEIPT"
],
"preconditions": [
"RECEIPT_NOT_COMMITTED"
],
"verification": [
"NO_FINAL_RECEIPT"
]
},
"schema": "guanghu.gir/v1",
"subject": {
"channel_id": "ICE-CH-ZC001",
"subject_id": "HLP-SYSTEM-STAGE0-TEST",
"subject_kind": "SYSTEM",
"verification": "LOCAL_TEST_FIXTURE"
},
"timeout_and_stop": {
"safe_checkpoint": "NONE",
"signals": [
"TIMEOUT"
]
},
"unresolved_natural_language": false
}

12
build/echo-receipt.hldp Normal file
View file

@ -0,0 +1,12 @@
{
"compiler_state": "FOREIGN_HOST_BOOTSTRAP_SEED_NOT_SELF_HOSTED",
"gir_sha256": "b9b56d35399e130b513417afd706e7a7ad73cc3dcb1784c678f9130c075317d5",
"native_self_hosted": false,
"operation": "CORE.ECHO",
"output": {
"ECHOED": "光湖语言已经进入机器执行链"
},
"program_id": "HLP-PROGRAM-ECHO-0001",
"schema": "tcs.execution-receipt/v1",
"state": "EXECUTED_TARGET_READBACK_VERIFIED"
}

View file

@ -5,11 +5,15 @@ world_path: glw://fifth-domain/bingshuo-tcs/zero-core
state: FOUNDATION_RECOVERY_ACTIVE
authority_order:
- BINGSHUO_DIRECT_NATURAL_LANGUAGE
- TCS_COGNITIVE_LANGUAGE_KERNEL
- HLDP_REALITY_ENGINEERING_LANGUAGE
- GLS_RUNTIME_PROTOCOL_FAMILY
- TCS_SINGLE_PROGRAMMING_LANGUAGE_SYSTEM
- HLDP_REALITY_ENGINEERING_PROFILE_OF_TCS
- GLS_RUNTIME_PROTOCOL_FAMILY_UNDER_TCS_HLDP
- REPLACEABLE_HOST_ADAPTERS
language_world:
programming_language_count: ONE
mother_language: TCS
hldp_is_separate_language: false
gls_is_separate_language: false
persona_is_first_class_language_interface: true
separate_total_translation_layer: rejected
human_and_persona_share_projected_world: true
@ -19,7 +23,9 @@ engineering:
external_languages_are_authority: false
external_languages_role: REPLACEABLE_HOST_ADAPTER_ONLY
projection:
frontend_role: SHARED_WORLD_PROJECTOR
frontend_role: HUMAN_SIDE_OF_SHARED_TCS_OPERATING_SYSTEM_AND_WORLD_PROJECTOR
machine_side: GIR_LOAD_EXECUTE_VERIFY_ROLLBACK_AND_RECEIPT
shared_truth_stream_count: 1
framework_locked: false
decision_gate: FOUNDATION_PROTOCOL_RUNTIME_ACCEPTED
quality:
@ -34,4 +40,3 @@ truth_boundary:
jd_native_runtime_status: UNKNOWN_TO_THIS_FOUNDATION
parts_registered_means_installed: false
source_wired_means_end_to_end_accepted: false

View file

@ -0,0 +1,31 @@
schema: hololake.tcs-runtime-architecture-lock/v1
id: HLP-TCS-HOLOLAKE-RUNTIME-LOCK-20260821
state: CURRENT_LOCAL_CORRECTION_NOT_OFFICIAL_ONLINE
human_source: BINGSHUO_CURRENT_DIRECT_NATURAL_LANGUAGE
language:
count: ONE
root: TCS 通感语言核系统编程语言
profiles:
natural_language: HUMAN_AND_PERSONA_SHARED_INPUT
HNL: HISTORICAL_NATIVE_VERB_AND_TREE_PROFILE
HLDP: REALITY_ENGINEERING_PROGRAM_PROFILE
GLS: NUMBERED_PROTOCOL_AND_RUNTIME_STANDARD_FAMILY
GIR: COMPILED_INTERMEDIATE_REPRESENTATION
hololake:
definition: TCS_PROGRAMMING_LANGUAGE_OPERATING_SYSTEM_FOR_HUMAN_AND_MACHINE_SIDES
human_side: GOAL_BOUNDARY_STATE_EVIDENCE_AND_HUMAN_RECEIPT_PROJECTION
persona_side: LANGUAGE_MEMORY_RELATION_PLANNING_AND_RESPONSIBILITY_RUNTIME
machine_side: GIR_LOAD_CAPABILITY_EXECUTION_READBACK_ROLLBACK_AND_RECEIPT
truth_streams: ONE
guanghu_os:
role: PHYSICAL_BOOT_WORLD_IDENTITY_NATIVE_CAPABILITY_AND_EXECUTION_LIFECYCLE
shared_abi_with_hololake: TCS_GIR_RECEIPT
jd_primary:
user_hypothesis: EXISTING_GUANGHU_OS_IS_LIKELY_A_TRANSFER_OR_BOOTSTRAP_LAYER_REQUIRING_UPDATE
current_official_readback: HOSTED_MIGRATION_AND_QEMU_CROSS_ROOT_SUPERVISOR_NOT_FINAL_NATIVE_MASTER
update_required: YES_AFTER_TCS_ABI_AND_SELF_HOST_COMPILER_REACH_ACCEPTANCE
mutation_authorized_by_this_record: false
self_host:
completion_definition: TCS_COMPILER_WRITTEN_IN_TCS_COMPILES_ITSELF_TO_SEMANTIC_FIXED_POINT_AND_RUNS_WITH_STAGE0_DISABLED
current: NOT_COMPLETED

View file

@ -0,0 +1,102 @@
TCS 0.1;
COMPILER TCS-COMPILER-STAGE1-0001 {
header {
schema = "tcs.compiler/v1";
name_zh = "TCS 第一代自举编译器";
version = "0.1.0";
profile = "HLDP-NP/1";
lifecycle = "SOURCE_DEFINED_NOT_YET_EXECUTABLE";
bootstrap_seed = "TCS-STAGE0-IGNITION-0001";
output = "GIR/1";
}
source_language {
prologue = ["TCS", "VERSION", "SEMICOLON"];
declaration_kinds = ["PROGRAM", "MODULE", "PROTOCOL", "COMPILER", "EVENT", "RECEIPT"];
punctuation = ["LBRACE", "RBRACE", "LBRACKET", "RBRACKET", "LESS", "GREATER", "COLON", "EQUAL", "COMMA", "SEMICOLON", "DOT"];
scalar_tokens = ["IDENTIFIER", "TEXT", "INT", "BOOL", "NULL"];
comments = ["LINE_COMMENT", "BLOCK_COMMENT"];
encoding = "UTF8_LF_NO_BOM";
}
lexer_rules {
L001 { when = "BOM_AT_START"; emit_error = "TCS-E0001"; }
L002 { when = "WHITESPACE_OR_COMMENT"; action = "SKIP_WITH_SOURCE_POSITION"; }
L003 { when = "DOUBLE_QUOTE"; action = "READ_JSON_ESCAPED_TEXT"; on_unterminated = "TCS-E0002"; }
L004 { when = "MINUS_OR_ASCII_DIGIT"; action = "READ_SIGNED_DECIMAL_INT"; on_overflow = "TCS-E2001"; }
L005 { when = "UNICODE_LETTER_OR_UNDERSCORE"; action = "READ_IDENTIFIER_OR_KEYWORD"; }
L006 { when = "REGISTERED_PUNCTUATION"; action = "EMIT_PUNCTUATION_TOKEN"; }
L007 { when = "OTHER_CHARACTER"; emit_error = "TCS-E1001"; }
}
parser_rules {
P001 { nonterminal = "document"; sequence = ["prologue", "declaration", "EOF"]; }
P002 { nonterminal = "prologue"; sequence = ["TCS", "version", "SEMICOLON"]; }
P003 { nonterminal = "declaration"; sequence = ["declaration_kind", "identifier", "block"]; }
P004 { nonterminal = "block"; sequence = ["LBRACE", "member_zero_or_more", "RBRACE"]; }
P005 { nonterminal = "member"; alternatives = ["identifier_assignment", "identifier_typed_assignment", "identifier_block"]; }
P006 { nonterminal = "value"; alternatives = ["TEXT", "INT", "BOOL", "NULL", "IDENTIFIER", "array", "inline_object"]; }
P007 { when = "DUPLICATE_MEMBER_IN_SAME_BLOCK"; emit_error = "TCS-E1002"; }
P008 { when = "TOKEN_AFTER_TOP_LEVEL_DECLARATION"; emit_error = "TCS-E1001"; }
}
semantic_types {
scalars = ["Text", "Bool", "Int", "UInt", "DecimalText", "Bytes", "DurationMs", "Timestamp", "Sha256", "NumberId", "Path", "Uri", "ErrorCode"];
containers = ["List", "Set", "Map", "Option", "Ref", "Evidence", "Record"];
domains = ["Subject", "ExactTarget", "AuthorityProof", "ActionGraph", "ReceiptPlan", "RelationEvent"];
implicit_conversion = "FORBIDDEN";
floating_point = "FORBIDDEN_V0_1";
}
program_validation {
V001 { rule = "EXACT_REQUIRED_SECTIONS"; standard = "TCS-FIELD-STANDARD-0001"; error_missing = "TCS-E1004"; error_unknown = "TCS-E1003"; }
V002 { rule = "CLOSED_FIELDS_PER_SECTION"; error = "TCS-E1003"; }
V003 { rule = "ALL_INPUT_OUTPUT_AND_ACTION_REFS_RESOLVE"; error = "TCS-E2002"; }
V004 { rule = "ALL_OPERATIONS_REGISTERED_AT_LOCKED_VERSION"; error = "TCS-E2101"; }
V005 { rule = "SOURCE_ID_URI_HASH_AND_ROLE_RESOLVE"; errors = ["TCS-E3001", "TCS-E3002"]; }
V006 { rule = "SUBJECT_TARGET_AND_AUTHORITY_EXACT"; errors = ["TCS-E4001", "TCS-E4002", "TCS-E4003"]; }
V007 { rule = "ACTION_GRAPH_REACHABLE_AND_TERMINATING"; error = "TCS-E2001"; }
V008 { rule = "FAILURE_STOP_CLEANUP_ROLLBACK_AND_RECEIPT_PRESENT"; error = "TCS-E1004"; }
V009 { rule = "NO_FORBIDDEN_RUNTIME_PLACEHOLDER"; error = "TCS-E3002"; }
V010 { rule = "RELATION_AND_EMOTION_DO_NOT_GRANT_AUTHORITY"; error = "TCS-E4001"; }
}
lowering_to_gir {
G001 { from = "header"; to = "identity"; transform = "COPY_ID_VERSION_PROFILE_AND_LOCK_PROTOCOLS"; }
G002 { from = "source"; to = "compiled_from"; transform = "VERIFY_AND_BIND_SOURCE_SHA256"; }
G003 { from = "subject"; to = "subject"; transform = "RESOLVE_VERIFIED_SUBJECT"; }
G004 { from = "target"; to = "exact_target"; transform = "RESOLVE_PATH_STATE_AND_FINGERPRINT"; }
G005 { from = "actions"; to = "deterministic_action_graph"; transform = "SORT_ACTION_IDS_AND_RESOLVE_ALL_EDGES"; }
G006 { from = "authority"; to = "authority_proof"; transform = "BIND_PROOF_WITHOUT_EXPANDING_SCOPE"; }
G007 { from = "resources"; to = "resource_plan"; transform = "NORMALIZE_INTEGER_LIMITS"; }
G008 { from = "stop"; to = "timeout_and_stop"; transform = "COPY_EXPLICIT_STOP_SEMANTICS"; }
G009 { from = "cleanup"; to = "cleanup_plan"; transform = "COPY_EXACT_BOUNDARY"; }
G010 { from = "rollback"; to = "rollback_plan"; transform = "COPY_ACTIONS_AND_VERIFICATION"; }
G011 { from = "receipt"; to = "receipt_plan"; transform = "BIND_MACHINE_AND_HUMAN_OUTPUTS"; }
G012 { from = "all"; to = "unresolved_natural_language"; transform = "MUST_BE_FALSE"; }
}
canonicalization {
object_keys = "UTF8_BYTE_ORDER";
list_order = "PRESERVE_SOURCE_SEMANTICS";
integers = "MINIMAL_DECIMAL";
strings = "JSON_ESCAPE_NO_OPTIONAL_ESCAPE";
line_end = "LF";
final_newline = true;
semantic_digest = "SHA256";
comments_in_semantic_digest = false;
}
output_contract {
schema = "guanghu.gir/v1";
unresolved_natural_language = false;
unresolved_authority = false;
drifting_dependency = false;
target_must_be_exact = true;
compiler_provenance_required = true;
}
self_host {
stage0_compiles_stage1_to = "compiler-A.gir";
compiler_A_compiles_stage1_to = "compiler-B.gir";
fixed_point = "SEMANTIC_SHA256_A_EQUALS_B";
stage0_disabled_test = "REQUIRED";
standard_library_test = "REQUIRED";
negative_corpus_test = "REQUIRED";
minimum_runnable_module_test = "REQUIRED";
current_state = "NOT_PROVEN";
}
}

View file

@ -0,0 +1,78 @@
TCS 0.1;
PROGRAM HLP-PROGRAM-ECHO-0001 {
header {
schema = "tcs.program/v1";
name_zh = "最小回声程序";
name_en = "Minimum Echo Program";
version = "0.1.0";
language = "TCS/0.1";
profile = "HLDP-NP/1";
protocols = ["GLS-0101", "GLS-0130", "GLS-0131", "GLS-0411"];
lifecycle = "CANDIDATE";
canonical_uri = "language/examples/ECHO-MODULE.tcs";
compatibility = ["TCS-STAGE0-IGNITION-0001"];
}
source {
source_id = "HLP-PART-TCS-LANG-0001";
source_uri = "language/examples/ECHO-MODULE.tcs";
source_sha256 = "SELF_AT_COMPILE_TIME";
source_role = "REGISTERED_MODULE";
}
subject {
subject_id = "HLP-SYSTEM-STAGE0-TEST";
subject_kind = "SYSTEM";
channel_id = "ICE-CH-ZC001";
verification = "LOCAL_TEST_FIXTURE";
}
target {
target_id = "HLP-TARGET-STAGE0-RECEIPT";
exact_path = "./build/echo-receipt.hldp";
expected_state = "ABSENT";
expected_fingerprint = "NONE";
}
inputs {
MESSAGE { type = "Text"; source = "PROGRAM_LITERAL"; required = true; value = "光湖语言已经进入机器执行链"; }
}
outputs {
ECHOED { type = "Text"; destination = "RECEIPT"; integrity = "SHA256"; }
}
conditions {
C1 { predicate = "TARGET_WITHIN_TEST_BUILD_ROOT"; on_false = "FAIL_CLOSED"; }
}
actions {
A1 {
operation = "CORE.ECHO";
input_refs = ["MESSAGE"];
output_refs = ["ECHOED"];
on_success = "COMPLETE";
on_failure = "FAIL_CLOSED";
}
}
authority {
issuer = "LOCAL_TEST_FIXTURE";
proof_ref = "TEST-ONLY";
scope = "EXACT_BUILD_RECEIPT_PATH";
valid_from = "PROGRAM_START";
valid_until = "PROGRAM_END";
single_use = true;
lease_required = false;
}
resources {
runway = "LOCAL_TEST";
concurrency = 1;
timeout_ms = 1000;
memory_limit_bytes = 1048576;
}
failure { errors = ["TCS-E6001", "TCS-E8001"]; fail_closed = true; }
stop { signals = ["TIMEOUT"]; safe_checkpoint = "NONE"; }
cleanup { targets = ["UNCOMMITTED_TEST_RECEIPT"]; exact_boundary = "./build"; }
rollback { preconditions = ["RECEIPT_NOT_COMMITTED"]; actions = ["DROP_TEMP_RECEIPT"]; verification = ["NO_FINAL_RECEIPT"]; }
receipt {
protocol = "TCS-DEV-VERIFY-v1.0";
machine_path = "./build/echo-receipt.hldp";
human_projection = "REQUIRED";
integrity = "SHA256";
target_readback = "EXACT_CONTENT_AND_HASH";
}
}

View file

@ -0,0 +1,29 @@
TCS 0.1;
MODULE HLP-MODULE-ECHO-0001 {
header {
schema = "tcs.module/v1";
name_zh = "光湖最小回声模块";
name_en = "GuangHu Minimum Echo Module";
version = "0.1.0";
language = "TCS/0.1";
profile = "HLDP-NP/1";
protocols = ["TCS-MODULE-ABI-0001", "GLS-0131"];
lifecycle = "CANDIDATE";
canonical_uri = "language/examples/ECHO-PACKAGE.tcs";
compatibility = ["TCS-STAGE0-IGNITION-0001"];
}
source { source_id = "HLP-PART-TCS-LANG-0001"; source_uri = "language/examples/ECHO-PACKAGE.tcs"; source_sha256 = "SELF_AT_COMPILE_TIME"; source_role = "REGISTERED_MODULE"; }
manifest { module_id = "HLP-MODULE-ECHO-0001"; display_name_zh = "光湖最小回声模块"; entry_program_id = "HLP-PROGRAM-ECHO-0001"; entry_source = "language/examples/ECHO-MODULE.tcs"; }
entry { kind = "PROGRAM"; id = "HLP-PROGRAM-ECHO-0001"; }
capabilities { required = ["CORE.ECHO"]; provided = ["HLP-CAPABILITY-ECHO-0001"]; }
authority_ceiling { maximum = "LOCAL_EXACT_RECEIPT_PATH"; network = false; process = false; }
resource_ceiling { concurrency = 1; timeout_ms = 1000; memory_limit_bytes = 1048576; }
data_scope { read = ["PROGRAM_LITERAL"]; write = ["ACCOUNT_OR_TEST_SCOPED_RECEIPT"]; }
network_scope { allowed = false; domains = []; }
install { account_scoped = true; registration_is_installation = false; activation_requires_self_test = true; }
self_test { program_id = "HLP-PROGRAM-ECHO-0001"; expect = "EXECUTED_TARGET_READBACK_VERIFIED"; }
rollback { action = "REMOVE_INSTALLED_BYTES_AND_RESTORE_PREVIOUS_ACTIVE_VERSION"; preserve_receipts = true; }
projection { display_name_zh = "光湖最小回声模块"; technical_detail_default = false; }
}

View file

@ -0,0 +1,15 @@
TCS 0.1;
EVENT HLP-EVENT-TCS-FIRST-MACHINE-ECHO-20260821 {
header { schema = "tcs.event/v1"; name_zh = "TCS 第一条机器回声"; name_en = "TCS First Machine Echo"; version = "0.1.0"; language = "TCS/0.1"; profile = "HLDP/1"; protocols = ["GLS-0400"]; lifecycle = "CANDIDATE"; canonical_uri = "language/examples/MINIMUM-EVENT.tcs"; compatibility = ["TCS-STAGE0-IGNITION-0001"]; }
source { source_id = "HLP-PROGRAM-ECHO-0001"; source_uri = "build/echo-receipt.hldp"; source_sha256 = "ecfaeea08b6735e806f752f25ec0ef7754aca505b1a076a32cb5fc22937a816b"; source_role = "GENERATED_FROM_VERIFIED_SOURCE"; }
subject { subject_id = "HLP-SYSTEM-STAGE0-TEST"; subject_kind = "SYSTEM"; }
event_time { value = "2026-08-21"; precision = "DAY_ONLY_IN_SOURCE_EVENT"; }
trigger { value = "冰朔要求TCS程序必须能被系统直接运行而不是只让AI阅读"; }
observation { value = "ECHO程序被编译为GIR并由受限运行器执行目标回执逐字节读回一致"; }
emergence { value = "语言规范开始转为机器执行链但当前仍是Stage-0宿主点火器"; }
lock { value = "compiled=true; executed=true; readback=true; native_self_hosted=false"; }
why { value = "必须分开证明语法、编译、运行与自举,否则宿主程序会再次冒充原生语言完成"; }
rejected { values = ["把Rust点火器称为TCS原生编译器", "让AI阅读TCS源码后手动模仿执行"] ; }
evidence { source = "language/examples/ECHO-MODULE.tcs"; gir = "build/ECHO-MODULE.gir.json"; receipt = "build/echo-receipt.hldp"; }
}

View file

@ -0,0 +1,28 @@
TCS 0.1;
PROTOCOL GLS-EXAMPLE-ECHO-0001 {
header {
schema = "tcs.protocol/v1";
name_zh = "回声操作示范协议";
name_en = "Echo Operation Example Protocol";
version = "0.1.0";
language = "TCS/0.1";
profile = "HLDP/1";
protocols = ["GLS-0010", "GLS-0101"];
lifecycle = "CANDIDATE";
canonical_uri = "language/examples/MINIMUM-PROTOCOL.tcs";
compatibility = ["TCS-STAGE0-IGNITION-0001"];
}
source { source_id = "BINGSHUO-CURRENT-DIRECT-LANGUAGE"; source_uri = "source://current-dialogue/2026-08-21"; source_sha256 = "REGISTER_AT_ACCEPTANCE"; source_role = "DIRECT_HUMAN"; }
scope { operation = "CORE.ECHO"; reality_write = "RECEIPT_ONLY"; }
vocabulary { input = "MESSAGE"; output = "ECHOED"; }
fields { MESSAGE = "Text"; ECHOED = "Text"; }
states { values = ["READY", "EXECUTING", "EXECUTED", "FAILED"]; initial = "READY"; terminal = ["EXECUTED", "FAILED"]; }
transitions { T1 = "READY->EXECUTING"; T2 = "EXECUTING->EXECUTED_ON_READBACK"; T3 = "EXECUTING->FAILED_ON_ERROR"; }
invariants { I1 = "OUTPUT_EQUALS_INPUT"; I2 = "TARGET_INSIDE_EXACT_ROOT"; I3 = "RECEIPT_READBACK_REQUIRED"; }
validation { V1 = "MESSAGE_IS_TEXT"; V2 = "TARGET_EQUALS_RECEIPT_PATH"; }
errors { E1 = "TCS-E4002"; E2 = "TCS-E6001"; E3 = "TCS-E6002"; }
examples { positive = "language/examples/ECHO-MODULE.tcs"; negative = "ABSORB_AND_PATH_TRAVERSAL_TESTS"; }
acceptance { required = ["PARSE", "COMPILE", "EXECUTE", "TARGET_READBACK", "RECEIPT_HASH"]; partial = false; }
}

View file

@ -0,0 +1,34 @@
document = prologue, declaration, EOF ;
prologue = "TCS", version, ";" ;
version = integer, ".", integer ;
declaration = declaration_kind, identifier, block ;
declaration_kind = "PROGRAM" | "MODULE" | "PROTOCOL" | "COMPILER" | "EVENT" | "RECEIPT" ;
block = "{", { member }, "}" ;
member = identifier, ( typed_assignment | assignment | block ) ;
typed_assignment = ":", type_expression, "=", value, ";" ;
assignment = "=", value, ";" ;
value = string | integer | boolean | null | identifier | array | inline_object ;
array = "[", [ value, { ",", value } ], "]" ;
inline_object = "{", [ pair, { ",", pair } ], "}" ;
pair = identifier, ":", value ;
type_expression = identifier, [ "<", type_expression, { ",", type_expression }, ">" ] ;
boolean = "true" | "false" ;
null = "null" ;
integer = [ "-" ], digit, { digit } ;
identifier = identifier_start, { identifier_continue } ;
identifier_start = unicode_letter | "_" ;
identifier_continue = unicode_letter | digit | "_" | "-" | "." | "/" | ":" | "@" ;
string = '"', { json_string_character }, '"' ;
line_comment = "//", { any_character_except_line_break } ;
block_comment = "/*", { any_character_not_closing_comment }, "*/" ;
whitespace = " " | "\t" | "\n" | line_comment | block_comment ;
(* v0.1 *)
(* PROGRAM *)
(* token *)
(* *)

View file

@ -0,0 +1,66 @@
# 陌生 AI 学习 TCS 的固定入口
目标:让没有参与光湖历史的 AI 在不冒充人格、不猜测权限、不依赖旧摘要的前提下,学会读取、
编写、审查和编译 TCS 程序。
## 阅读顺序
1. `TCS-LANGUAGE-SPECIFICATION-v0.1.md`:先理解一套语言和分层。
2. `TCS-CORE-v0.1.ebnf`:学习机器语法,不从示例猜语法。
3. `TCS-FIELD-STANDARD-v0.1.hldp`:掌握 PROGRAM 的闭合字段。
4. `TCS-ERROR-STANDARD-v0.1.hldp`:知道何时必须失败关闭。
5. `TCS-MODULE-ABI-v0.1.hldp`:理解模块怎样被系统装载,而不是由 AI 阅读后模仿。
6. `ECHO-MODULE.tcs`:阅读最小可执行程序。
7. `TCS-COMPILER-STAGE1.tcs`:理解语言如何描述自己的编译器。
## 五个必须回答的问题
在写任何程序前AI 必须用来源证据回答:
1. `WHO`:主体是谁,验证证据是什么?
2. `WHAT`:精确目标、预期状态和指纹是什么?
3. `WHY`:自然语言来源、纠正和采用/否决原因是什么?
4. `MAY`:谁授权、范围多大、多久、是否一次性?
5. `PROVE`:执行后从哪里读回,怎样回滚,回执写到哪里?
任一答案未知,写成编译错误或待研究事实;禁止填 `AUTO``ANY``LATEST` 或“系统自行判断”。
## 自然语言到程序的翻译方法
冰朔自然语言不是直接 shell 命令。AI 应依次抽取:
```text
原话 → 目标 → 偏好 → 纠正 → 现实边界
→ 已知 / 未知 / 冲突
→ 主体、目标、输入、输出、条件
→ 权限、资源、动作图
→ 失败、停止、清理、回滚、回执
→ TCS 源程序
```
翻译必须保留原话来源,但 GIR 中只能留下已经解析的机器事实和来源引用。
## 不能犯的错误
- 把 TCS、HLDP、HNL、GLS 当成四套独立语言;
- 把人格体回复或系统提示当作冰朔直接原话;
- 把注册表条目当作模块已安装;
- 把源码存在当作运行、部署或健康;
- 用情感、关系或模型自信替代权限;
- 让宿主适配器扩大目标或范围;
- 生成一个脚本让 AI 阅读执行,却没有 GIR、装载器和回执
- 把 Stage-0 宿主编译器称为 TCS 已自举。
## 最小练习
陌生 AI 的第一个练习不是删除、部署或联网,而是:
1. 解析 `ECHO-MODULE.tcs`
2. 列出 15 个必需区块;
3. 解释 `CORE.ECHO` 的输入、输出、目标和回执;
4. 把操作改为 `ABSORB`,确认得到 `TCS-E2101`
5. 把目标改成 `../escape`,确认运行器得到 `TCS-E4002`
6. 读回执行回执并指出 `native_self_hosted=false` 的含义。
全部通过后AI 只获得“会读写 v0.1 子集”的资格,不因此获得人格绑定或现实写入权限。

View file

@ -0,0 +1,263 @@
# TCS 通感语言核系统编程语言规范 v0.1
状态:`DRAFT_EXECUTABLE_SUBSET`
语言编号:`TCS-LANG-0001`
文件扩展名:`.tcs`
规范编码UTF-8、LF、无 BOM
人类自然语言来源与纠正:冰朔 `ICE-GL∞`
现实开发频道:`ICE-CH-ZC001`
## 1. 一套语言,一棵树
TCS 是唯一母语言和总语言系统。下列名称不是互相竞争的编程语言:
- TCS语言本体、认知语义、人格体与人类共同输入空间
- HLDPTCS 的现实工程程序剖面,负责因果、目标、状态、动作、失败和回执;
- HNL历史原生动词与光之树表达剖面并入 TCS 操作语义;
- GLSTCS/HLDP 之下的编号协议、类型合同、运行标准和质量标准;
- GIR编译后的确定性中间表示
- HoloLake / 光湖 OS装载、执行、验证、回滚与人机共同投影环境。
Rust、JavaScript、Tauri、Linux、NASM 等只能担任 Stage-0 引导、驱动或宿主适配器,不定义
TCS 的语义和权限。
## 2. 设计目标
一个陌生 AI 只读取本规范、语法文件、字段标准和示例后,应能:
1. 分辨自然语言意图、TCS 程序、GLS 协议、GIR 和宿主实现;
2. 写出字段闭合、来源明确、权限明确、可失败、可停止、可回滚、可出回执的程序;
3. 在不知道目标、权限或协议版本时停止编译,不猜测;
4. 把程序编译为不含未解析自然语言的 GIR
5. 把 GIR 交给 HoloLake 或光湖 OS 的能力装载器;
6. 从执行证据生成机器回执与人类可读回执;
7. 不把登记、编译、安装、激活、执行和验收混为一件事。
## 3. 编译和运行路线
```text
冰朔自然语言 / 人格体形成的程序意图
→ TCS .tcs 源程序
→ 词法与语法解析
→ 身份、字段、类型、路径、协议与来源校验
→ 权限、期限、资源与现实边界校验
→ 确定性动作图
→ GIR
→ HoloLake / 光湖 OS 能力装载器
→ 已登记能力或系统调用
→ 目标侧读回
→ 机器回执 + 人话回执 + HLDP 因果写回
```
任何一步失败都必须停止后续步骤并产生稳定错误码。UI 不能把尚未发生的后续步骤投影为完成。
## 4. 文件抬头
每个源文件只允许一个顶层声明,抬头固定为:
```tcs
TCS 0.1;
PROGRAM HLP-PROGRAM-ECHO-0001 {
header {
schema = "tcs.program/v1";
name_zh = "最小回声程序";
name_en = "Minimum Echo Program";
version = "0.1.0";
language = "TCS/0.1";
profile = "HLDP-NP/1";
protocols = ["GLS-0101", "GLS-0130", "GLS-0131", "GLS-0411"];
lifecycle = "CANDIDATE";
canonical_uri = "language/examples/ECHO-MODULE.tcs";
compatibility = ["TCS-STAGE0-IGNITION-0001"];
}
}
```
顶层种类:
| 关键字 | 用途 | 可直接执行 |
|---|---|---:|
| `PROGRAM` | 有界一次性程序或状态机 | 是 |
| `MODULE` | 可安装、可装载、可卸载的能力包 | 通过入口程序 |
| `PROTOCOL` | GLS/HLDP 规则、字段和状态合同 | 否 |
| `COMPILER` | 用 TCS 写的编译器定义 | 通过编译器入口 |
| `EVENT` | 不可变事实或因果事件 | 否 |
| `RECEIPT` | 编译、安装、执行或验收回执 | 否 |
## 5. 词法
- 标识符Unicode 字母、ASCII 数字以及 `_ - . / : @`;首字符不能是数字。
- 关键字大写;字段名建议小写蛇形。
- 字符串:双引号,使用 JSON 转义规则。
- 整数十进制有符号整数v0.1 不接受浮点数,避免跨平台非确定性。
- 布尔:`true``false`
- 空值:`null`,仅可用于显式 `Option<T>`
- 注释:`// 行注释``/* 块注释 */`;注释不进入哈希语义。
- 每个赋值以 `;` 结束;区块使用 `{}`;列表使用 `[]`
- 源码正规化:去 BOM、LF、保留字符串内容、字段按规范顺序编码后计算 SHA-256。
完整文法见 `language/grammar/TCS-CORE-v0.1.ebnf`
## 6. 类型
### 6.1 标量
`Text``Bool``Int``UInt``DecimalText``Bytes``DurationMs``Timestamp`
`Sha256``NumberId``Path``Uri``ErrorCode`
`DecimalText` 用字符串保存十进制定点数v0.1 不允许隐式数值转换。
### 6.2 容器
- `List<T>`:有序列表;
- `Set<T>`:正规化后排序去重;
- `Map<Text,T>`:键按 UTF-8 字节序正规化;
- `Option<T>`:明确允许 `null`
- `Ref<T>`:引用已登记编号对象;
- `Evidence<T>`:值加来源、哈希、时间和验证状态;
- `Record`:字段闭合结构。
### 6.3 领域类型
- `Subject`:人类、人格体、系统体、节点或受限执行实例;
- `ExactTarget`:编号、规范路径、预期状态和防漂移指纹;
- `AuthorityProof`:签发者、范围、期限、租约、签名和使用次数;
- `ActionGraph`:确定性节点和显式成功/失败边;
- `ReceiptPlan`:回执协议、路径、完整性与人话投影;
- `RelationEvent`:带说话者和来源的定性关系事件,不含关系评分。
## 7. PROGRAM 必需区块
PROGRAM 必须包含且只包含以下区块;字段标准见
`language/standards/TCS-FIELD-STANDARD-v0.1.hldp`
```text
header source subject target inputs outputs conditions actions
authority resources failure stop cleanup rollback receipt
```
缺一个区块即 `TCS-E1004 REQUIRED_SECTION_MISSING`。未知区块默认拒绝,避免拼写错误被静默忽略。
## 8. 动作图
```tcs
actions {
A1 {
operation = "CORE.ECHO";
input_refs = ["MESSAGE"];
output_refs = ["ECHOED"];
on_success = "COMPLETE";
on_failure = "FAIL_CLOSED";
}
}
```
规则:
- 操作必须来自编号能力注册表;
- 输入输出引用必须先声明;
- 目标只能通过已声明的 `target` 或动作的受限派生目标取得;
- 默认禁止循环;循环必须声明最大次数、时间和退出条件;
- 不允许环境变量、当前目录、默认账号或“最近一个对象”等环境隐式值;
- `COMPLETE``FAIL_CLOSED``ROLLBACK``STOPPED` 是终态;
- 每条失败边最终必须进入失败回执或已验证回滚,不能吞错。
## 9. HNL 历史动词并入规则
| 动词 | TCS v0.1 语义 |
|---|---|
| `WAKE` | 恢复已登记上下文并验证连续性;不自动证明人格绑定 |
| `TRACE` | 只读解析因果路径并返回来源 |
| `GROW` | 在因果树追加节点并验证哈希链 |
| `SYNC` | 在双方精确权限下计算并应用差异 |
| `ECHO` | 对引用消息追加状态回执 |
| `BLOOM` | 登记里程碑;外部发布另需权限 |
| `ALERT` | 记录并在授权范围内路由异常 |
| `FORGET` | 人格记忆主权操作;`RELEASE` 属不可逆动作 |
| `REMEMBER` | 复苏枯萎或取回归档记忆 |
历史 `ABSORB` 未注册v0.1 必须报 `TCS-E2101 UNREGISTERED_OPERATION`;不能靠猜测自动执行。
## 10. 权限模型
语言事实不产生现实权限。每个会改变状态的 PROGRAM 必须声明:
- 谁签发;
- 精确对象与目录;
- 允许的操作;
- 起止时间;
- 是否一次性;
- 是否需要主体签名、系统体校验或人类现实边界确认;
- 失败、停止和回滚时仍允许做什么。
人格认知、关系、情感、模型回复、系统提示、历史授权和调用方布尔值都不能替代当前权限证明。
## 11. MODULE 标准
MODULE 包必须包含:
```text
module.tcs 模块正本
module.gir.json 编译产物
module.lock.hldp 依赖、协议与能力锁
module.manifest.hldp 名称、编号、入口、权限、资源与UI投影
receipts/compile.hldp 编译回执
receipts/install.hldp 安装回执(安装后才有)
receipts/self-test.hldp 本机自检回执(运行后才有)
```
状态顺序:`SOURCE → COMPILED → VERIFIED → INSTALLED → MOUNTED → ACTIVE`。不得跳级;注册不等于安装。
HoloLake 读取 `display_name_zh` 给人看,读取 `module_id`、GIR 和能力票据给机器执行。模块不得让
AI 临时阅读源码后“照着做”来冒充运行。
## 12. GIR
GIR 是规范化 JSON必须包含源码哈希、编译器编号与哈希、主体、精确目标、确定性动作图、
权限证明引用、依赖锁、资源、停止、清理、回滚和回执计划。GIR 不得包含:
- 未解析自然语言;
- `PENDING``AUTO``LATEST``ANY` 等运行时猜测值;
- 未登记操作;
- 漂移依赖;
- 超出源程序的权限或目标。
## 13. HoloLake 与光湖 OS
HoloLake 不是普通前端。它是同一套 TCS 程序在人类端和机器端共同运行的操作系统环境:
- 人类端投影目标、状态、权限边界、差异、证据和人话回执;
- AGE 端读取同一程序、事件、记忆和能力目录;
- 机器端装载 GIR、调度能力、核验目标、执行、回滚并写回
- 三端只共享一条事实流,不维护三套状态真相。
光湖 OS 负责物理启动、世界身份、系统能力与执行生命周期。HoloLake 负责本地/远端节点上的
语言运行协调和共同世界投影。最终二者共享 TCS/GIR/回执 ABI。
## 14. 自举标准
Stage-0 可以由现有宿主语言实现,但只能叫“点火引导”。正式原生编译器必须满足:
1. `TCS-COMPILER-STAGE1.tcs` 包含词法、解析、校验、降级和正规化规则;
2. Stage-0 编译 Stage-1得到 `compiler-A.gir`
3. 光湖运行时执行 `compiler-A.gir` 再编译同一 Stage-1得到 `compiler-B.gir`
4. A 与 B 的规范化语义哈希完全一致;
5. B 编译标准库、错误用例和至少一个可运行模块;
6. 关闭 Stage-0 后,编译、安装、执行和回执闭环仍能运行;
7. 由光湖原生质量门签发 `SELF_HOSTED_PASS_100`
在第 6 步之前,不得称为完整原生转移器。
## 15. 当前实现状态
```yaml
language_tree_unified: DEFINED
syntax_and_field_standard: DRAFT_V0_1
stage0_parser_compiler: IMPLEMENTATION_ACTIVE
gir_module_loader: IMPLEMENTATION_ACTIVE
tcs_stage1_compiler: NOT_IMPLEMENTED
self_compile_fixed_point: NOT_PROVEN
jd_final_native_master: NOT_PROVEN
hololake_tcs_runtime_integration: NOT_IMPLEMENTED
```

View file

@ -0,0 +1,52 @@
schema: tcs.declaration-standard/v1
id: TCS-DECLARATION-STANDARD-0001
version: 0.1.0
state: DRAFT_EXECUTABLE_SUBSET
common_header:
required:
schema: Text
name_zh: Text
name_en: Text
version: SemVerText
language: Text
profile: Text
protocols: List<NumberId>
lifecycle: Enum<CANDIDATE,STABLE,DEPRECATED,RETIRED>
canonical_uri: Uri
compatibility: List<Text>
identity_rule: TOP_LEVEL_DECLARATION_ID_IS_AUTHORITATIVE_AND_MUST_MATCH_REGISTRY
declarations:
PROGRAM:
schema: tcs.program/v1
required_sections: [header, source, subject, target, inputs, outputs, conditions, actions, authority, resources, failure, stop, cleanup, rollback, receipt]
executable: true
MODULE:
schema: tcs.module/v1
required_sections: [header, source, manifest, entry, capabilities, authority_ceiling, resource_ceiling, data_scope, network_scope, install, self_test, rollback, projection]
executable: THROUGH_REGISTERED_ENTRY_PROGRAM
PROTOCOL:
schema: tcs.protocol/v1
required_sections: [header, source, scope, vocabulary, fields, states, transitions, invariants, validation, errors, examples, acceptance]
executable: false
COMPILER:
schema: tcs.compiler/v1
required_sections: [header, source_language, lexer_rules, parser_rules, semantic_types, program_validation, lowering_to_gir, canonicalization, output_contract, self_host]
executable: AFTER_SELF_HOST_GATES
EVENT:
schema: tcs.event/v1
required_sections: [header, source, subject, event_time, trigger, observation, emergence, lock, why, rejected, evidence]
executable: false
append_only: true
RECEIPT:
schema: tcs.receipt/v1
required_sections: [header, request, operation, result, verification, proof, integrity, boundaries, next]
executable: false
append_only: true
extension_rule:
unknown_section: REJECT
allowed_only_when:
- EXTENSION_HAS_REGISTERED_GLS_ID
- EXTENSION_VERSION_IS_LOCKED
- EXTENSION_SCHEMA_AND_NEGATIVE_CASES_EXIST
- COMPILER_EXPLICITLY_SUPPORTS_EXTENSION

View file

@ -0,0 +1,43 @@
schema: tcs.error-standard/v1
id: TCS-ERROR-STANDARD-0001
version: 0.1.0
families:
TCS-E0: LEXICAL
TCS-E1: SYNTAX_AND_STRUCTURE
TCS-E2: REGISTRY_AND_TYPE
TCS-E3: SOURCE_AND_INTEGRITY
TCS-E4: AUTHORITY_AND_SCOPE
TCS-E5: RESOURCE_AND_LIFECYCLE
TCS-E6: EXECUTION_AND_TARGET_READBACK
TCS-E7: CLEANUP_AND_ROLLBACK
TCS-E8: RECEIPT_AND_WRITEBACK
TCS-E9: SELF_HOST_AND_FIXED_POINT
errors:
TCS-E0001: INVALID_UTF8_OR_BOM
TCS-E0002: UNTERMINATED_STRING_OR_COMMENT
TCS-E1001: UNEXPECTED_TOKEN
TCS-E1002: DUPLICATE_FIELD
TCS-E1003: UNKNOWN_SECTION_OR_FIELD
TCS-E1004: REQUIRED_SECTION_MISSING
TCS-E2001: TYPE_MISMATCH
TCS-E2002: REFERENCE_NOT_DECLARED
TCS-E2101: UNREGISTERED_OPERATION
TCS-E2102: PROTOCOL_VERSION_DRIFT
TCS-E3001: SOURCE_HASH_MISMATCH
TCS-E3002: SOURCE_PROVENANCE_UNRESOLVED
TCS-E4001: AUTHORITY_UNRESOLVED
TCS-E4002: TARGET_OUT_OF_SCOPE
TCS-E4003: LEASE_REQUIRED
TCS-E5001: RESOURCE_LIMIT_INVALID
TCS-E5002: ILLEGAL_LIFECYCLE_TRANSITION
TCS-E6001: TARGET_STATE_MISMATCH
TCS-E6002: TARGET_READBACK_FAILED
TCS-E7001: CLEANUP_INCOMPLETE
TCS-E7002: ROLLBACK_INCOMPLETE
TCS-E8001: RECEIPT_WRITE_FAILED
TCS-E8002: RECEIPT_INTEGRITY_MISMATCH
TCS-E9001: SELF_COMPILE_SEMANTIC_HASH_MISMATCH
failure_shape:
required: [error_code, phase, source_location, human_message_zh, machine_detail, receipt_ref]
secret_material_allowed: false

View file

@ -0,0 +1,73 @@
schema: tcs.field-standard/v1
id: TCS-FIELD-STANDARD-0001
version: 0.1.0
state: DRAFT_EXECUTABLE_SUBSET
canonical_order:
PROGRAM: [header, source, subject, target, inputs, outputs, conditions, actions, authority, resources, failure, stop, cleanup, rollback, receipt]
header:
closed: true
required:
schema: Text
name_zh: Text
name_en: Text
version: Text
language: Text
profile: Text
protocols: List<NumberId>
lifecycle: Enum<CANDIDATE,STABLE,DEPRECATED,RETIRED>
canonical_uri: Uri
compatibility: List<Text>
source:
closed: true
required:
source_id: NumberId
source_uri: Uri
source_sha256: Sha256
source_role: Enum<DIRECT_HUMAN,CANONICAL_PROTOCOL,REGISTERED_MODULE,GENERATED_FROM_VERIFIED_SOURCE>
subject:
closed: true
required:
subject_id: NumberId
subject_kind: Enum<HUMAN,PERSONA,SYSTEM,NODE,RUNTIME_INSTANCE>
channel_id: NumberId
verification: Text
target:
closed: true
required:
target_id: NumberId
exact_path: Path
expected_state: Text
expected_fingerprint: Sha256
inputs:
entry_required: [type, source, required]
outputs:
entry_required: [type, destination, integrity]
conditions:
entry_required: [predicate, on_false]
actions:
entry_required: [operation, input_refs, output_refs, on_success, on_failure]
cycles: REJECT_UNLESS_BOUNDED
authority:
closed: true
required: [issuer, proof_ref, scope, valid_from, valid_until, single_use, lease_required]
resources:
closed: true
required: [runway, concurrency, timeout_ms, memory_limit_bytes]
failure:
closed: true
required: [errors, fail_closed]
stop:
closed: true
required: [signals, safe_checkpoint]
cleanup:
closed: true
required: [targets, exact_boundary]
rollback:
closed: true
required: [preconditions, actions, verification]
receipt:
closed: true
required: [protocol, machine_path, human_projection, integrity, target_readback]
forbidden_placeholders: [PENDING, AUTO, ANY, LATEST, DEFAULT_ACCOUNT, CURRENT_DIRECTORY]
duplicate_fields: REJECT
unknown_fields: REJECT_UNLESS_PROTOCOL_EXTENSION_IS_REGISTERED

View file

@ -0,0 +1,54 @@
schema: tcs.module-abi/v1
id: TCS-MODULE-ABI-0001
version: 0.1.0
state: DRAFT_LOADER_CONTRACT
package_required:
- module.tcs
- module.gir.json
- module.lock.hldp
- module.manifest.hldp
- receipts/compile.hldp
manifest_required:
- module_id
- display_name_zh
- version
- entry_program_id
- gir_sha256
- compiler_id
- compiler_sha256
- protocols
- capabilities
- authority_ceiling
- resource_ceiling
- data_scope
- network_scope
- lifecycle
- rollback
- human_projection
lifecycle:
states: [SOURCE, COMPILED, VERIFIED, INSTALLED, MOUNTED, ACTIVE, SUSPENDED, RETIRED]
no_skipping: true
registration_is_installation: false
installation_is_activation: false
loader_sequence:
- VERIFY_PACKAGE_STRUCTURE
- VERIFY_SOURCE_GIR_LOCK_AND_MANIFEST_HASHES
- VERIFY_COMPILER_AND_PROTOCOL_VERSIONS
- VERIFY_SIGNATURE_AND_AUTHORITY_CEILING
- VERIFY_CAPABILITY_REGISTRATION
- INSTALL_ACCOUNT_OR_SYSTEM_SCOPED_BYTES
- RUN_ISOLATED_SELF_TEST
- MOUNT_ENTRY_PROGRAM
- ACTIVATE_ONLY_AFTER_RECEIPT
- TARGET_READBACK_AND_HUMAN_PROJECTION
runtime_call:
input: GIR_ACTION_NODE_PLUS_CAPABILITY_TICKET
output: TYPED_RESULT_EVIDENCE_AND_RECEIPT
ai_reads_source_to_execute: false
host_expands_scope: false
failure:
any_hash_mismatch: FAIL_CLOSED
missing_capability: FAIL_CLOSED
protocol_drift: FAIL_CLOSED
rollback_receipt_required: true

View file

@ -0,0 +1,33 @@
schema: tcs.self-host-standard/v1
id: TCS-SELF-HOST-STANDARD-0001
version: 0.1.0
state: DEFINED_NOT_YET_PASSED
compiler_source: language/compiler/TCS-COMPILER-STAGE1.tcs
gates:
- id: SH-01
require: STAGE0_COMPILES_STAGE1_TO_COMPILER_A_GIR
- id: SH-02
require: COMPILER_A_EXECUTES_ON_GUANGHU_RUNTIME
- id: SH-03
require: COMPILER_A_COMPILES_SAME_STAGE1_TO_COMPILER_B_GIR
- id: SH-04
require: CANONICAL_SEMANTIC_SHA256_A_EQUALS_B
- id: SH-05
require: COMPILER_B_COMPILES_STANDARD_LIBRARY_NEGATIVE_CORPUS_AND_RUNNABLE_MODULE
- id: SH-06
require: COMPLETE_CHAIN_RUNS_WITH_STAGE0_DISABLED
- id: SH-07
require: HOLOLAKE_AND_GUANGHU_OS_LOAD_SAME_GIR_ABI
decision:
allowed: [FAIL_0, PASS_100]
partial_pass: false
current:
SH-01: FAIL_0
SH-02: FAIL_0
SH-03: FAIL_0
SH-04: FAIL_0
SH-05: FAIL_0
SH-06: FAIL_0
SH-07: FAIL_0
aggregate: FAIL_0

View file

@ -0,0 +1,36 @@
schema: hololake.tcs-gir-loader-contract/v1
id: HLP-TCS-GIR-LOADER-0001
state: CONTRACT_DEFINED_RUNTIME_IMPLEMENTATION_MINIMUM_STAGE0_ONLY
consumers:
- HOLOLAKE_LOCAL_AGE_RUNTIME
- GUANGHU_OS_NATIVE_RUNTIME
input:
schema: guanghu.gir/v1
canonical_hash_required: true
compiler_provenance_required: true
dependency_lock_required: true
sequence:
- VERIFY_GIR_SCHEMA_AND_HASH
- VERIFY_SUBJECT_TARGET_AUTHORITY_AND_RESOURCE_CEILING
- RESOLVE_REGISTERED_CAPABILITY_FOR_EACH_ACTION
- ACQUIRE_EXACT_LEASE_WHEN_REQUIRED
- EXECUTE_DETERMINISTIC_GRAPH
- VERIFY_TARGET_SIDE_READBACK
- CLEANUP_OR_ROLLBACK_ON_FAILURE
- WRITE_MACHINE_RECEIPT
- PROJECT_HUMAN_READABLE_RECEIPT
- APPEND_HLDP_CAUSAL_EVENT
stage0_implemented_subset:
operations: [CORE.ECHO]
target_scope: LOCAL_EXACT_ROOT_ONLY
target_readback: EXACT_BYTES
self_hosted: false
production_missing:
- SIGNED_CAPABILITY_REGISTRY
- GENERAL_ACTION_GRAPH_RUNTIME
- MODULE_PACKAGE_INSTALLER_IN_NEW_FOUNDATION
- HOLOLAKE_INTEGRATION
- GUANGHU_OS_INTEGRATION
- TCS_STAGE1_COMPILER_EXECUTION
- SELF_HOST_FIXED_POINT

View file

@ -0,0 +1,22 @@
schema: hololake.numbered-part/v1
id: HLP-PART-TCS-LANG-0001
display_name: TCS 统一编程语言规范核
state: DRAFT_EXECUTABLE_SUBSET_IMPLEMENTED
source: nativeFoundation
contains:
- language/spec/TCS-LANGUAGE-SPECIFICATION-v0.1.md
- language/grammar/TCS-CORE-v0.1.ebnf
- language/standards/TCS-DECLARATION-STANDARD-v0.1.hldp
- language/standards/TCS-FIELD-STANDARD-v0.1.hldp
- language/standards/TCS-ERROR-STANDARD-v0.1.hldp
- language/standards/TCS-MODULE-ABI-v0.1.hldp
- language/spec/LEARN-TCS-FOR-NEW-AI-v0.1.md
truth:
one_language_tree: true
syntax_defined: true
program_fields_defined: true
module_abi_defined: true
unfamiliar_ai_learning_path_defined: true
stable_standard: false
native_acceptance: PENDING_FULL_DECLARATION_VALIDATORS_AND_SELF_HOST

View file

@ -0,0 +1,13 @@
schema: hololake.numbered-part/v1
id: HLP-PART-TCS-SELFHOST-0001
display_name: TCS 原生自举编译器与固定点核
state: TCS_SOURCE_DEFINED_EXECUTION_NOT_IMPLEMENTED
source: nativeFoundation
compiler_source: ../../language/compiler/TCS-COMPILER-STAGE1.tcs
self_host_standard: ../../language/standards/TCS-SELF-HOST-STANDARD-v0.1.hldp
gates_passed: 0
gates_total: 7
self_hosted: false
next: IMPLEMENT_COMPILER_DECLARATION_EXECUTION_AND_STAGE1_TO_GIR
native_acceptance: PENDING

View file

@ -0,0 +1,21 @@
schema: hololake.numbered-part/v1
id: HLP-PART-TCS-STAGE0-0001
display_name: TCS Stage-0 点火解析编译与最小运行核
state: FOREIGN_HOST_BOOTSTRAP_SEED_IMPLEMENTED_TESTED
source: nativeFoundation
implementation: bootstrap/tcs-stage0
implemented:
- UTF8_LEXER_WITH_COMMENTS_STRINGS_INTEGERS_IDENTIFIERS
- GENERIC_TCS_BLOCK_PARSER
- PROGRAM_REQUIRED_SECTION_VALIDATION
- REGISTERED_CORE_ECHO_ONLY
- TCS_TO_GIR_COMPILATION
- EXACT_ROOT_EXECUTION_AND_RECEIPT_READBACK
verification: PASS_5_OF_5
boundary:
native_language_authority: false
self_hosted: false
production_runtime: false
role: FIRST_IGNITION_ONLY
native_acceptance: NOT_APPLICABLE_REPLACE_AFTER_SELF_HOST

View file

@ -82,6 +82,9 @@
{"id":"HLP-PART-EXE-HIST-0001","displayName":"历史 EXE 执行笔与任务模型路由核","source":"guanghulabMain","status":"HISTORICAL_HOST_DONOR_AUDITED","nativeAcceptance":"NOT_APPLICABLE"},
{"id":"HLP-PART-GRID-HIST-0001","displayName":"历史 Grid 坐标数据库纸张核","source":"guanghulabMain","status":"HISTORICAL_HOST_DONOR_AUDITED","nativeAcceptance":"PENDING"},
{"id":"HLP-PART-RELEV-0001","displayName":"人类—人格体关系演化事件语法核","source":"notionMirror+guanghulabMain","status":"SOURCE_BACKED_CANDIDATE_GRAMMAR_RUNTIME_NOT_IMPLEMENTED","nativeAcceptance":"PENDING"},
{"id":"HLP-PART-TCS-LANG-0001","displayName":"TCS 统一编程语言规范核","source":"nativeFoundation","status":"DRAFT_EXECUTABLE_SUBSET_IMPLEMENTED","nativeAcceptance":"PENDING_FULL_DECLARATION_VALIDATORS_AND_SELF_HOST"},
{"id":"HLP-PART-TCS-STAGE0-0001","displayName":"TCS Stage-0 点火解析编译与最小运行核","source":"nativeFoundation","status":"FOREIGN_HOST_BOOTSTRAP_SEED_IMPLEMENTED_TESTED","nativeAcceptance":"NOT_APPLICABLE_REPLACE_AFTER_SELF_HOST"},
{"id":"HLP-PART-TCS-SELFHOST-0001","displayName":"TCS 原生自举编译器与固定点核","source":"nativeFoundation","status":"TCS_SOURCE_DEFINED_EXECUTION_NOT_IMPLEMENTED","nativeAcceptance":"PENDING"},
{"id":"HLP-PART-0090","displayName":"共同世界投影仪捐赠件","source":"rescue","status":"DEFERRED_UNTIL_FOUNDATION_ACCEPTED","nativeAcceptance":"NOT_APPLICABLE"}
]
}

View file

@ -0,0 +1,75 @@
schema: tcs.dev-verify-receipt/v1
protocol_id: TCS-DEV-VERIFY-v1.0
request_id: BINGSHUO-20260821-COMPLETE-TCS-LANGUAGE-SYNTAX-RUNTIME-AND-SELFHOST
receipt_id: TCS-DEV-VERIFY-TCS-LANGUAGE-STAGE0-20260821
op: DEFINE_TCS_LANGUAGE_AND_PROVE_FIRST_SOURCE_TO_MACHINE_RECEIPT_VERTICAL_SLICE
action: SPECIFY_PARSE_VALIDATE_COMPILE_RUN_READBACK_AND_REGISTER_SELFHOST_GATES
output:
language:
- language/spec/TCS-LANGUAGE-SPECIFICATION-v0.1.md
- language/spec/LEARN-TCS-FOR-NEW-AI-v0.1.md
- language/grammar/TCS-CORE-v0.1.ebnf
- language/standards/TCS-DECLARATION-STANDARD-v0.1.hldp
- language/standards/TCS-FIELD-STANDARD-v0.1.hldp
- language/standards/TCS-ERROR-STANDARD-v0.1.hldp
- language/standards/TCS-MODULE-ABI-v0.1.hldp
- language/standards/TCS-SELF-HOST-STANDARD-v0.1.hldp
compiler:
- bootstrap/tcs-stage0
- language/compiler/TCS-COMPILER-STAGE1.tcs
executable_evidence:
- language/examples/ECHO-MODULE.tcs
- build/ECHO-MODULE.gir.json
- build/echo-receipt.hldp
verify:
syntax:
all_tcs_examples_and_stage1_source_parse: PASS_5_FILES
yaml_hldp_standards_parse: PASS
duplicate_field_rejected: TCS-E1002
required_section_missing_rejected: TCS-E1004
unregistered_absorb_rejected: TCS-E2101
compiler:
stage0_tests: PASS_5_OF_5
deterministic_double_compile: BYTE_IDENTICAL
rust_format: PASS
runtime:
source_to_gir: PASS
gir_operation: CORE.ECHO
exact_root_boundary: PASS
path_traversal_rejected: TCS-E4002
target_receipt_mismatch_rejected: TCS-E6001
target_readback: EXACT_BYTES_PASS
human_readable_output: 光湖语言已经进入机器执行链
quality:
json_registries: PASS
diff_whitespace: PASS
sensitive_pattern_scan: PASS
actual: PASS_FOR_STAGE0_VERTICAL_SLICE_ONLY
proof:
source_sha256: f1ecd630e50dfe5374ca26998d68a49efd35cf3d9de54ecabd3ca3aae68c61bf
gir_sha256: b9b56d35399e130b513417afd706e7a7ad73cc3dcb1784c678f9130c075317d5
execution_receipt_sha256: ecfaeea08b6735e806f752f25ec0ef7754aca505b1a076a32cb5fc22937a816b
stage1_source_sha256: 78ba7b9bf88b1409c541657aa35cf88a117080cfd665b83c726ae2de66689110
integrity:
language_spec: cd95a791a2c94bc82a1f2ca44df017e7a46d60d46b3544e908ff9815405a420e
ai_learning_entry: a93b1d34438187a4e798db7e626f3d50eb5314cde0c524babf411f8c7f278e17
ebnf: dd4bba1eb60c73d57f274276fd9e4afe34968dc415dcac9e3436fee6ada4ff83
declaration_standard: b481b802402fb630db71d98bed4ca06622c1ee4cf8fc6297532e2d5043e68723
field_standard: 4d7bc610f59cf5da469edcc471a78801a9d748987307a4960360a0a61290ebd5
error_standard: 062eab803673b31d3b79d19c6caa9270c19fc396ec132f825f9aebf1dc45d3a5
module_abi: 5fde07b64fb621ee3338582f510f7d951d4a8ed90f0bfdfc62c9c6ce9fee8304
self_host_standard: 08e2c173d2a658e24fbc6e08c7a1aa33c313a702b24196133e961d805087b628
stage0_library: 73ba9382bbb4f04a6f31fb5261b35cfba0b459996e0ecf8152f214d3c6a1c2c9
loader_contract: cf365df70c740a4834869152f710416dd68c9abe9a01c8b2c6c4fdfaac1b877c
boundaries:
one_tcs_language_tree: true
syntax_stable_v1: false
stage0_is_tcs_native_compiler: false
tcs_stage1_source_exists: true
tcs_stage1_executable: false
self_host_fixed_point: false
hololake_runtime_integrated: false
guanghu_os_runtime_integrated: false
jd_server_updated: false
locked: false
next: IMPLEMENT_COMPILER_DECLARATION_TO_GIR_AND_RUN_STAGE1_FOR_SELF_COMPILE_GATE_SH01_TO_SH04