Skip to content

Update Context Architecture for the 2026 agent landscape - #2

Merged
sergioazoc merged 14 commits into
mainfrom
chore/landscape-2026-update
Sep 16, 2026
Merged

sergioazoc merged 14 commits into
mainfrom
chore/landscape-2026-update

Conversation

@sergioazoc

Copy link
Copy Markdown
Owner

Brings Context Architecture up to date with the agent-development landscape as of September 2026, and closes the gaps the site's own skill flags when run against this repo. Research was done across seven dated lenses; the load-bearing facts were verified by hand (GitHub API, the live site, vendor docs, arXiv, Wikidata) because the adversarial-verification pass could not finish.

The core holds and is unchanged: the rule, the nine principles, the mechanism taxonomy, the autonomy-spectrum thesis, tool-neutrality, AGENTS.md per boundary, the skill layout, and the version-hash chain.

What changed, by commit

  • chore: upgrade deps and fix repo context-rot with route derivation. Commits the pending dependency bump and fixes the stale claims it left (routes /en and /es/comparison that never existed, the /llms_full.txt typo). Routes are derived once in app/site-routes.ts; the /raw/**.md mirror is documented and bound.
  • refactor: bind the canonical definition to one source. One string in app/site-definition.ts; the HTML no longer ships two wordings.
  • docs: disambiguate the term, resituate harness engineering, complete the glossary. Names the three rival public senses of "context architecture", rewrites harness engineering to match OpenAI and Thoughtworks, and adds the vocabulary readers now arrive with (hook, skill, progressive disclosure, agent memory, agentic engineering, mechanism, agent readiness).
  • docs: frame the manifesto for 2026. Where a mechanism fires, agent memory, agent review that must be able to fail, the concrete principle-09 authorization, path-scoped rules, dated spectrum examples. No principle's name, number, or mechanism changed.
  • docs: bring the guide up to date and bind the AGENTS.md size budget. New step 8 (bind the verification surface), size budgets, the nested-file map, import-boundary tool class.
  • docs: update the install matrix and bind the skill to the Agent Skills spec. /skill rebuilt around .agents/skills/; skill to v0.3.0 with spec conformance bound.
  • principle 09 in the repo: CODEOWNERS, REVIEW.md, a branch-ruleset note, and .claude/settings.json deny rules over the verification surface, all bound by verification-surface.test.ts.
  • codify principles 04 and 07: oxlint complexity/limit rules and the one-accent-color rule, plus English code comments.
  • Lighthouse and accessibility stated as manual quality targets, not unbound rules; the command list is generated.
  • GEO surface: robots content signals, /skill.md charset, sitemap redirect, one JSON-LD graph, Wikidata anchors, a filled-out author, a localized /es schema, og:image:alt, and a Wayback archive step.
  • EN/ES parity deepened beyond heading count.

Verified

pnpm lint, pnpm format:check, pnpm typecheck, pnpm generate, and pnpm test (82 tests) all pass, and claude plugin validate . --strict passes.

Follow-ups a person must do (outside the tree)

Create the main branch ruleset; confirm Cloudflare leaves AI bots in Allow and add the www CNAME; update the GitHub repo description; verify Bing and Google; PR the v0.3.0 skill to the davila7 mirror; and add the cross-links on sergioazocar.com. One in-repo item is intentionally left to the owner: per-page dateModified needs fetch-depth: 0 in the deploy workflow, which the principle-09 deny rules reserve for a person.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LqnKHkaKCREed1bq56vzh2

Commit the pending dependency bump (vitest 5, pnpm 12.4.1, Nuxt UI 4.11,
oxlint 1.82, etc.) and fix the stale claims it left, plus the context-rot the
audit found in the repo's own docs:

- content/AGENTS.md described routes /en and /es/comparison that the site never
  serves; the map now reflects the prefix_except_default strategy and the
  localized ES slugs.
- nuxt.config.ts promised /llms_full.txt; the module emits /llms-full.txt.
- deploy.yml no longer hard-codes the pnpm major (read from packageManager).
- pnpm-workspace.yaml minimumReleaseAgeExclude pruned (entries matched nothing).

Derive the site's routes once in app/site-routes.ts, consumed by i18n.pages and
the prerender list, so the router and the static output cannot drift from the
content tree (principle 05). Document the agent-facing /raw/**.md mirror in the
root and server AGENTS.md (it was emitted by @nuxt/content with nothing saying
so) and link the raw manifesto from llms.txt.

Broaden the mechanisms:
- tests/doc-references.test.ts now discovers every AGENTS.md, resolves bare
  source filenames and directories, checks the components and composables
  app/AGENTS.md names, asserts every test is documented and every nested
  AGENTS.md is mapped, that specs/ stays absent, and that each CLAUDE.md bridges
  to its AGENTS.md; it also self-tests that the check can fail.
- tests/routes.test.ts binds app/site-routes.ts to the content tree, the
  prerender list, the internal links, and the prerendered HTML.
- tests/prerendered-no-js.test.ts binds that /raw/en.md and /raw/es.md carry
  the rule.
The citable definition circulated in three English wordings (the frontmatter and
glossary said 'that claim', the site and llms descriptions said 'the claim', the
README a third variant) and the meta description dropped the mechanism clause
that distinguishes Context Architecture. The published HTML shipped two wordings.
A claim the repo makes about itself, unbound, which the rule calls the violation.

- Move CANONICAL_DEFINITION (and the derived SITE_DESCRIPTION) into the pure
  module app/site-definition.ts, imported by nuxt.config.ts and re-exported by
  useManifestoSchema for the schema composables.
- site.description, llms.description, and the llms canonical section now derive
  from that one string; the index.md meta description carries the mechanism
  clause; the README opens with the canonical definition.
- tests/canonical-definition.test.ts binds it: the frontmatter, glossary, feed
  descriptions, and README carry it verbatim, and the prerendered HTML never
  ships a divergent wording.
…ete the glossary

Terminology and positioning, so the site stays citable as the field's vocabulary
settled (all sources verified 2026-09-15):

- Context Architecture: the glossary and comparison now name the three rival
  public senses of the phrase (data-platform metadata, Modern Data 101; the
  runtime context window, Atlan; information architecture, NN/G) and scope the
  attribution to the repository sense, coined October 2025, published June 2026.
  The DefinedTerm gains disambiguatingDescription and the TechArticle gains
  dateCreated (the coinage date), which structured-data.test.ts now binds.
- Harness engineering: rewritten to match how OpenAI (Feb 2026) and Thoughtworks
  (Böckeler, Apr 2026) use the term, which reaches into the repository. The
  comparison redraws the boundary around what Context Architecture owns: the rule,
  prose claims bound, and principle 09. New sections cover OpenAI's usage,
  readiness scorecards, and dated related work.
- Context rot: kept, with the two senses named (Chroma and Anthropic for the
  context window; Treude and Baltes, and this spec, for repository drift); hyphen
  dropped.
- New glossary entries with the vocabulary readers now arrive with: mechanism
  (its fitness-function lineage), hook, skill, progressive disclosure, agent
  memory, agentic engineering, agent readiness. Each with a schema.org DefinedTerm.

Content parity holds (EN and ES both carry the new headings and terms).
Add framing to the manifesto and its llms.txt echo without touching any of the
nine principles' names, numbering, or mechanism lines:

- Where a mechanism fires (agent-loop hook, push rules, or CI) is the
  infrastructure's choice; firing early does not replace the integration gate,
  because a hook can be switched off locally.
- Review by an agent counts only when its verdict can stop the change, and the
  agent reviewer runs in a fresh context.
- Agent memory exists now but lives outside the repository, unverified and
  unshared, so the memoryless reader is still the one to design for.
- The rule notes that a test's ability to fail is itself a claim (mutation
  testing).
- The autonomy spectrum names the four levels as 2026 products and the merge
  queue as where parallel agents' changes are arbitrated.
- Principle 02 acknowledges path-scoped rule files as the same claim in a
  central-folder layout; 07 that a convention can be about configuration; 09
  that the authorization is the repo's integration rules and that an agent's
  approval never authorizes a change to the verification surface.
- The problem cites the 2026 AGENTS.md studies; content/AGENTS.md now permits
  cited third-party figures, never attributed to Context Architecture.

The guide callout gains the memory stance. EN and ES stay in parity.
The guide's most-differentiated step, principle 09, had no concrete mechanism,
several agents never discover nested AGENTS.md, and 'keep it short' had no number
while hard tool budgets exist. This adds the missing procedure and binds the
size claim:

- New Path B step 8 (and Path A step 7): bind the verification surface with four
  named mechanisms (a test over the checks, a check that can fail via mutation
  testing, CODEOWNERS plus a ruleset, an edit-time deny hook).
- Step 3: the root AGENTS.md is a map that lists every nested file (agents differ
  in what they discover), with dated size budgets (32 KiB chain, 12,000-char file,
  ~200 lines); the template gains ## Commands and ## Boundaries; path-scoped rule
  files are the same claim in a central layout; and what goes in a skill vs an
  AGENTS.md.
- Step 2: scan the path-scoped rule folders and SKILL.md files, and name the
  context-file linter class.
- Step 4: the import-boundary tool class, the same rule wired at edit/commit/CI,
  and the shrink-only baseline for brownfield.
- tests/agents-md-budget.test.ts binds the budget: no file over 12,000 chars, no
  root-to-leaf chain over 32 KiB.

'context-rot' loses its hyphen here too. EN and ES stay in parity (21 headings).
…s spec

Distribution, so the adoption page and the skill match the 2026 ecosystem:

- content/{en,es}/skill.md 'Install it' is rebuilt around the converged
  .agents/skills/<name>/SKILL.md path (read by 15 agents, dated), with the one
  command, Claude Code, GitHub Copilot (VS Code and JetBrains), tool-specific
  directories (Cline, Kiro, Qwen), and the Claude Code plugin install the page
  never documented. Drops the stale Cursor .mdc rule and the Windsurf/Cline/Zed
  rule instructions (all read SKILL.md now). 'Keep it updated' names
  �[38;5;145mChecking for skill updates…�[0m

�[38;5;102mNo global skills tracked in lock file.�[0m
�[38;5;102mInstall skills with�[0m �[38;5;145mnpx skills add <package> -g�[0m and .
- SKILL.md gains metadata.version, quoted term-introduced, first-published, and
  the SPDX license id; the description gains discovery triggers; the body echoes
  the manifesto framing (memory, where a mechanism fires, agent review, mutation
  testing) and rewrites Phase 4 to a mechanism, not a reminder. Trimmed to stay
  under the ~5000-token budget. context-rot loses its hyphen.
- marketplace.json bumps to 0.3.0 and declares its schemastore schema.
- tests/skill-spec.test.ts binds spec conformance (name, description length,
  string metadata, standard keys, size budget); skill-version.test.ts now also
  checks the frontmatter version and pins the 0.3.0 hash.

Parity holds (11 headings each); claude plugin validate . --strict passes.
The repo is its own first case study but did not declare the authorization
principle 09 names. This adds the in-repo half:

- .github/CODEOWNERS marks the verification surface (tests/, lint and format
  config, vitest.config.ts, .github/, .claude/, .claude-plugin/) as owned.
- REVIEW.md states the review rules AI reviewers and people apply on every change
  (docs that lie, loose claims, a weakened surface, broken parity).
- tests/verification-surface.test.ts now also checks CI runs on pull requests,
  CODEOWNERS covers the surface, and the runner still collects every test.
- AGENTS.md documents the three-layer authorization and the branch ruleset to
  create with gh api (the external half).

The committed agent deny-rule settings file and the ruleset land in follow-ups.
Turn conventions that held 'by discipline' into mechanisms, and remove two
standing warnings:

- .oxlintrc.json enables complexity, max-depth, max-params, and
  max-lines-per-function at error (principle 04), set as a ratchet at the levels
  the current code passes, and promotes tailwindcss/no-hardcoded-colors from warn
  to error (principle 07). verification-surface.test.ts pins all of them.
- prose-conventions.test.ts binds the one-accent-color rule: no hard-coded hex or
  rgb() in app/**/*.{vue,ts} outside the tokens and the OgImage renderer, and
  main.css defines --ca-accent once per color scheme. app/AGENTS.md documents the
  OgImage exemption.
- Code comments are now all English (the convention is stated in AGENTS.md); the
  Spanish comments in nuxt.config.ts and wrangler.jsonc are translated.
- seo.validateAppHead is off, with the per-locale html lang now bound in
  prerendered-no-js.test.ts, so typecheck no longer prints a standing warning.

AGENTS.md updates which principles are bound vs held by discipline.
…enerate the command list

- AGENTS.md and app/AGENTS.md stop calling Lighthouse 100 and accessibility a
  'floor' or 'hard rule'. They are quality targets checked by hand with tooling
  (Lighthouse, axe) before a visual change, not rules bound in CI. By the repo's
  own rule, an unbound check stated as a rule is the violation, so this states it
  as what it is.
- tests/capabilities.test.ts now also checks the other direction of principle 05:
  every package.json script except lifecycle hooks is documented. build, preview,
  and cf:preview, previously undocumented, are added to the AGENTS.md command
  list.
- robots.txt declares the AI content signals search=yes, ai-input=yes,
  ai-train=yes (the site wants to be indexed, cited, and in the training corpora).
  The directive is a per-group property, verified against the built output.
- public/_headers serves /skill.md as text/markdown; charset=utf-8 (Workers Assets
  drops the handler header, and the skill contains non-ASCII); its stray em dash
  is fixed. public/_redirects sends /sitemap.xml to the sitemap index.
- The author Person gains jobTitle, worksFor, and knowsAbout; the TechArticle
  gains image, mainEntityOfPage, isPartOf, and Wikidata mentions (software
  architecture, AI agent, context engineering) so a knowledge graph can resolve
  and place the entity.
- The deploy workflow asks the Wayback Machine to snapshot the published URLs, so
  the definition and its dates carry a neutral third-party timestamp
  (attribution).
- tests/geo-surface.test.ts binds the charset headers, the sitemap redirect, and
  the robots content signals; structured-data.test.ts binds the Wikidata anchors
  and the filled-out author.

Deferred (noted for follow-up): merging the two JSON-LD blocks into one graph,
per-page git dateModified with a visible date, localizing the /es WebSite
description, and the llms.txt link-list restructure.
Heading count alone let a paragraph, a mechanism line, a table row, a code span,
or a link vanish in translation. content-parity.test.ts now also checks, per page
and per locale, the count of mechanism markers, table rows, fenced blocks,
internal links, and code spans, plus the frontmatter keys. content/AGENTS.md
records the dimensions the parity mechanism binds.
… (principle 09)

Complete the principle-09 authorization: .claude/settings.json (committed) denies
the agent editing the verification surface (.oxlintrc.json, .oxfmtrc.json,
vitest.config.ts, .github/, .claude/settings.json, .claude-plugin/), so a person
edits those by hand. tests/ stays writable so tests can be added, and the
test-collection and test-documentation checks catch a deletion. This is the
edit-time layer under CODEOWNERS and the branch ruleset. verification-surface.test.ts
asserts the deny rules, and AGENTS.md now cites the file by path.
…ontext engineering to Wikidata

Three deferred GEO items that live in the tree:
- The sitewide WebSite description is localized, so the /es schema is no longer in
  English (SITE_DESCRIPTION_ES, overridden by @id in app.vue).
- og:image:alt gives the generated OG image a localized text alternative.
- The context engineering DefinedTerm carries sameAs to its Wikidata entity, so an
  engine can resolve the adjacent term.
The DefinedTermSet, DefinedTerm, and TechArticle nodes were emitted as a separate
useHead JSON-LD block, so a consumer that reads blocks one at a time saw a
TechArticle whose author @id resolved only in the other block. Emit them through
useSchemaOrg instead, so they join @nuxtjs/seo's WebSite/WebPage/Person in a
single @graph: every cross-@id reference (the WebPage subject, the article author,
the term set) now resolves inside one block. structured-data.test.ts asserts each
page emits exactly one ld+json block.
@sergioazoc
sergioazoc merged commit 774b53e into main Sep 16, 2026
1 check passed
@sergioazoc
sergioazoc deleted the chore/landscape-2026-update branch September 16, 2026 01:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant