Skip to content

canon: envelope-time-fields principle (tier-2 draft)#129

Merged
klappy merged 1 commit into
mainfrom
canon/envelope-time-fields-principle
Apr 20, 2026
Merged

canon: envelope-time-fields principle (tier-2 draft)#129
klappy merged 1 commit into
mainfrom
canon/envelope-time-fields-principle

Conversation

@klappy
Copy link
Copy Markdown
Owner

@klappy klappy commented Apr 20, 2026

What

Adds a new tier-2 canon principle: canon/principles/envelope-time-fields.md.

Names the rule that every oddkit response carries two distinct clocks:

  • server_time at envelope root = request time (always current per response)
  • debug.generated_at in debug = content-addressed BaselineIndex provenance (tied to canon SHA)

Why this ships now

The 2026-04-20 regression-test sweep of oddkit v0.21.0 found debug.generated_at in catalog forty-eight minutes behind server_time. Initial diagnosis: stale cache. Reading canon reversed the diagnosis: catalog was the only tool doing it right — propagating the content-addressed index provenance per odd/constraint/anti-cache-lying. Every other canon-reading tool echoed request time under the same field name, hiding the content-freshness signal content-addressed caching exists to expose.

The bug was ambiguity, not staleness. This canon names the rule so future tools do not silently reintroduce the collision.

Tier and stability

Ships tier: 2 status: draft with one application in hand (upcoming oddkit 0.22.0). Graduates to status: active on third deciding-argument recurrence per the cache-fetches-and-parses template (graduation through deciding-argument count, not appearance count).

Challenge

Drafted, challenged in canon-tier-2 mode via oddkit, revised to address:

  • Confidence signal (working belief, derivable from tier-1 anti-cache-lying)
  • Prior art (HTTP Date vs Last-Modified / ETag)
  • Three alternatives considered and rejected with reasons
  • Costs and risks (breaking change for consumers, retraction condition named)

Scope

Single file add. No cross-reference backfill in this PR — the new doc declares its own derives_from and complements; reciprocal links into existing canon can land in a later housekeeping sweep.

First application

Immediately followed by a klappy/oddkit PR aligning every canon-reading tool's debug.generated_at to index.generated_at, removing the field-name ambiguity this canon describes. That PR will cite this canon as its load-bearing reason.


Note

Low Risk
Documentation-only change adding a new canon principle; low implementation risk, though it may influence future envelope semantics and downstream expectations.

Overview
Adds a new tier-2 draft canon principle, canon/principles/envelope-time-fields.md, standardizing envelope timestamp semantics across oddkit-pattern responses.

It explicitly separates request-time (server_time, always current per response) from content provenance (debug.generated_at, pinned to the content-addressed index build time) and forbids emitting debug.generated_at for tools that don’t read canon to avoid ambiguous freshness signals.

Reviewed by Cursor Bugbot for commit 5e0e7de. Bugbot is set up for automated code reviews on this repo. Configure here.

Names the two-clocks rule for oddkit envelopes:
- server_time is request time, always current per response
- debug.generated_at is content-addressed BaselineIndex provenance

First application will be oddkit 0.22.0 aligning every canon-reading
tool's debug.generated_at upward to index.generated_at, removing the
field-name ambiguity surfaced by the 2026-04-20 regression test.

Challenged in canon-tier-2 mode before submission; draft addresses
confidence, prior art (HTTP Date vs Last-Modified), three considered
alternatives, costs/risks, and retraction condition. Ships as
status: draft; graduates to active on third deciding-argument
recurrence per cache-fetches-and-parses template.
@klappy klappy merged commit 6d5a665 into main Apr 20, 2026
1 check passed
@klappy klappy deleted the canon/envelope-time-fields-principle branch April 20, 2026 13:19
klappy pushed a commit that referenced this pull request Apr 20, 2026
…elease-validation-gate

Closeout ledger for the oddkit 0.22.0 ship cycle (PRs #124, #125, #127, #128, #129).
First post-canon application of release-validation-gate (tier 1, landed earlier today
in P1.3.3). Documents the retroactive-closure pattern used to heal PR #127's
validation gap without reverting, and names the four criteria that make retroactive
closure legitimate.

Key contents:
- Summary of what shipped (two envelope-conformance fixes into 0.22.0)
- D3 names the retroactive-closure pattern and its four legitimacy criteria
- Timeline of all agent/validator sessions with evidence trail
- L2 distinguishes feature-branch validators from promotion-PR validators under
  canon's strict reading
- L3 captures the Managed-Agent-bypass workaround for orchestrator-IP rate limits
- H2 carries forward P11 (oddkit_gate mechanical enforcement of release-validation-gate)

Writing canon gate satisfied: blockquote with compressed argument, Summary section,
descriptive headers.

Encoded via oddkit_encode (governance_source: knowledge_base) — 18 DOLCHE artifacts
folded into D/O/L/C/H sections.
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