spec 1.0 · normativo
Changelog de contexto do Leji
Tradução assistida por agentes de IA. Em caso de divergência, prevalece a página em inglês. Se você encontrar algum problema no texto, abra uma issue ou envie um pull request.
Registro legível por máquina, somente acréscimo, das mudanças da camada de contexto.
Campos
- #
schemaVersionstringobrigatório A linha da especificação Leji para a qual este artefato foi escrito, por exemplo "1.0".
Padrão
^\d+\.\d+$- #
entriesarray de objetosobrigatório As mudanças da camada de contexto. A ordem canônica vem da ordenação crescente por (date, id); a posição no array não significa nada. Entradas novas podem aparecer em qualquer lugar; as mais antigas podem ser compactadas com uma entrada de compactação. Pelo menos uma entrada: um changelog que nasce vazio é inválido, e a compactação sempre deixa para trás a própria entrada de compactação.
idstringobrigatórioIdentificador estável desta entrada de mudança, único dentro do changelog.
datestringobrigatórioISO 8601 em UTC: uma data de calendário YYYY-MM-DD (ordenada como o início do dia) ou um timestamp completo terminado em Z, por exemplo 2026-06-13T15:04:05Z. Deslocamentos de fuso e horários sem fuso não são permitidos, de modo que a ordem lexical é também a cronológica.
type"added" · "changed" · "deprecated" · "removed" · "fixed" · "decision" · "governance" · "compaction"obrigatórioO tipo da mudança.
summarystringobrigatórioDescrição em uma linha do que mudou.
pathsarray de stringsobrigatórioOs caminhos afetados pela mudança, relativos à raiz do repositório. Pelo menos um; uma entrada de compactação registra a união dos caminhos que ela absorveu, ou o próprio caminho do changelog quando essa união é vazia.
categoriesarray de "domain" · "system" · "practice" · "governance" · "decisions"As categorias de conteúdo que a mudança tocou.
decisionRefsarray de stringsOs ids dos registros de decisão relacionados a esta mudança.
proposedBystringA pessoa ou o agente que propôs a mudança.
approvedBystringA pessoa que aprovou a mudança.
breakingbooleanSe a mudança quebra quem consome a camada de contexto.
compactedobjectObrigatório nas entradas de compactação: o que a compactação tirou da ponta mais antiga.
entriesintegerobrigatórioQuantas entradas esta compactação tirou da ponta mais antiga.
firstIdstringobrigatórioO id da entrada mais antiga que esta compactação tirou.
lastIdstringobrigatórioO id da entrada mais recente que esta compactação tirou.
Schema e exemplo
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://leji.org/schemas/v1.0/context-changelog.schema.json",
"title": "Leji context changelog",
"description": "Append-only machine-readable record of context layer changes.",
"type": "object",
"required": [
"schemaVersion",
"entries"
],
"additionalProperties": false,
"properties": {
"$schema": {
"description": "Optional pointer to this schema, for editor validation and tooling.",
"type": "string"
},
"schemaVersion": {
"description": "The Leji spec line this artifact was written against, e.g. \"1.0\".",
"type": "string",
"pattern": "^\\d+\\.\\d+$"
},
"entries": {
"description": "Context layer changes. Canonical order is derived by sorting on (date, id) ascending; array position is not significant. New entries may appear anywhere; the oldest may be compacted with a compaction entry. At least one entry: a born-empty changelog is invalid, and compaction always leaves its compaction entry behind.",
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"id",
"date",
"type",
"summary",
"paths"
],
"additionalProperties": false,
"properties": {
"id": {
"description": "Stable identifier for this change entry, unique within the changelog.",
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
},
"date": {
"description": "ISO 8601 in UTC: a calendar date YYYY-MM-DD (ordered as start of day) or a full timestamp ending in Z, e.g. 2026-06-13T15:04:05Z. Offsets and zoneless times are not allowed, so lexical order is chronological.",
"type": "string",
"pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])(T([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\dZ)?$"
},
"type": {
"description": "The kind of change.",
"enum": [
"added",
"changed",
"deprecated",
"removed",
"fixed",
"decision",
"governance",
"compaction"
]
},
"summary": {
"description": "One-line description of what changed.",
"type": "string",
"minLength": 1
},
"paths": {
"description": "Repository-root-relative paths the change affected. At least one; a compaction entry records the union of the paths it folded, or the changelog's own path when that union is empty.",
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"pattern": "^(?!/)(?!\\./)(?!.*(^|/)\\.\\.(/|$))(?!.*\\\\).+$"
}
},
"categories": {
"description": "Content categories the change touched.",
"type": "array",
"items": {
"enum": [
"domain",
"system",
"practice",
"governance",
"decisions"
]
}
},
"decisionRefs": {
"description": "Ids of decision records related to this change.",
"type": "array",
"items": {
"type": "string"
}
},
"proposedBy": {
"type": "string",
"description": "Human or agent that proposed the change."
},
"approvedBy": {
"type": "string",
"description": "Human who approved the change."
},
"breaking": {
"description": "Whether the change breaks consumers of the context layer.",
"type": "boolean"
},
"compacted": {
"type": "object",
"description": "Required on compaction entries: what the compaction removed from the oldest end.",
"required": [
"entries",
"firstId",
"lastId"
],
"additionalProperties": false,
"properties": {
"entries": {
"description": "How many entries this compaction removed from the oldest end.",
"type": "integer",
"minimum": 1
},
"firstId": {
"description": "Id of the oldest entry removed by this compaction.",
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
},
"lastId": {
"description": "Id of the newest entry removed by this compaction.",
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
}
}
}
},
"if": {
"properties": {
"type": {
"const": "compaction"
}
},
"required": [
"type"
]
},
"then": {
"required": [
"compacted"
]
}
}
}
}
}Um changelog legível por máquina das mudanças da camada de contexto.
{
"$schema": "https://leji.org/schemas/v1.0/context-changelog.schema.json",
"schemaVersion": "1.0",
"entries": [
{
"id": "seed-layer",
"date": "2026-06-10",
"type": "added",
"summary": "Semeou a camada de contexto: perfil de boot, glossário, invariantes do sistema, primeiro registro de decisão.",
"paths": [
"docs/boot-profile.md",
"docs/domain/glossary.md",
"docs/system/invariants.md",
"docs/decisions/0001-adopt-leji.md"
],
"categories": [
"domain",
"system",
"decisions"
],
"proposedBy": "agent:claude",
"approvedBy": "Jo Lee"
},
{
"id": "thought-partner-profile",
"date": "2026-06-12",
"type": "added",
"summary": "Acrescentou o perfil de agente thought-partner e o associou ao papel no mapa agents do manifesto.",
"paths": [
"docs/agents/thought-partner.md",
"leji.json"
],
"proposedBy": "agent:claude",
"approvedBy": "Jo Lee"
},
{
"id": "ownership-to-platform-team",
"date": "2026-09-11",
"type": "governance",
"summary": "Passou a propriedade da camada de contexto de Jo Lee para o Acme Platform Team.",
"paths": [
"leji.json"
],
"approvedBy": "Acme Platform Team"
}
]
}