Skip to content

site: trace reviewed field evidence to exact ARSAS releases - #369

Merged
masarray merged 13 commits into
mainfrom
site/r6-5-evidence-release-traceability
Sep 23, 2026
Merged

masarray merged 13 commits into
mainfrom
site/r6-5-evidence-release-traceability

Conversation

@masarray

Copy link
Copy Markdown
Owner

R6.5 — Evidence-to-Release Traceability

Builds on production-verified R6.4 (#368), exact baseline b505e95f1ddb14b7460d343a64d4ccd211716e1f. Rollback checkpoint: checkpoint/site-r6.4-merged-b505e95f.

Public evidence boundary

  • Add a versioned releaseTraceability ledger to landing/device-evidence.json with zero accepted release-specific field-test records today; no inferred historical-version backfill or invented retest.
  • Existing July 2026 profiles remain historical with unknown capture version; latest.json alone supplies current stable version, release tag, source commit, release URL and package identity.
  • Existing EN/ID Compatibility pages show the two separate evidence lanes and the empty accepted-test count; Technical Review links directly to the release trace.
  • Extend intake to request the actually tested release tag and optional source commit (unknown is allowed at submission, never at release-specific promotion).
  • Document the 16-field reviewed record and separate Issue → reviewed registry PR promotion boundary.

Regression protection

  • Adoption/field-proof validator checks record schema, declared profile/service/status, actual date, exact tag/commit/release URL, safe public test and review links, current stable identity, retest/coverage state and EN/ID record-row parity.
  • Source/rendered validators lock the exact stable identity and publicly displayed record count; long commit text wraps on small screens.
  • A release package, green CI, engineering PR, or newly opened Issue is not a physical field test.

Scope

10 website, documentation, issue-form and validator files only. No ARSAS runtime or ARIEC61850 engine changes. No new vendor, conformance, field-test, or current-stable interoperability claim.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 623c7f396e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +328 to +329
elif profile["services"][record["service"]] != record["result"]:
errors.append(f"{rid}: reviewed result differs from the profile service status")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve each release record's own outcome

When the same profile/service produces different outcomes on two releases—for example, conditional on v1.6.40 and verified on v1.6.41—this comparison forces both immutable ledger records to equal the profile's single mutable status, so one valid historical result must be rejected or rewritten. That defeats release-specific traceability and can erase regressions or improvements; validate each record's result vocabulary independently and keep any aggregate profile status separately derived.

AGENTS.md reference: AGENTS.md:L11-L17

Useful? React with 👍 / 👎.

Comment on lines +368 to +371
for profile in profiles:
if isinstance(profile, dict) and isinstance(profile.get("lastRetest"), dict):
last = profile["lastRetest"]
if not any(record.get("profileId") == profile["id"] and record.get("testDate") == last.get("date") and record.get("arsasVersion") == last.get("arsasVersion") and record.get("publicEvidenceUrl") in last.get("evidenceLinks", []) for record in reviewed if isinstance(record, dict)):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Require current records to update the profile retest

When the first accepted record targets the current stable release but its profile still has lastRetest: null, this one-way check skips the profile and the global state becomes documented-with-reviewed-records. The compatibility-page checks still require that profile to say data-current-stable-retest="not-documented", allowing contradictory public claims; require every matching current-release record to establish a corresponding lastRetest and updated page state, not only the reverse association.

AGENTS.md reference: AGENTS.md:L178-L178

Useful? React with 👍 / 👎.

@masarray
masarray merged commit 78481da into main Sep 23, 2026
19 checks passed
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