Summary
Daily SPDD spec work plan reviewing 5 ADR specifications (indices 50–54 of 719). All five are Draft status and span memory architecture (ADR-27479), refactoring hygiene (ADR-27523), schema migration (ADR-27626), security domain alignment (ADR-27639), and access-mode unification (ADR-27707). Several have weak or missing REASONS Canvas sections — particularly around Safeguards and Norms — and lack explicit Sync Follow-up tasks linking spec changes to implementation files.
Priority Work Queue
P0 — Spec gaps requiring immediate attention:
- ADR-27479 (Comment Memory): Safeguards and Norms are in narrative only; Part 2 lacks standalone normative sections with MUST constraints mapped to source files.
- ADR-27626 (sandbox.agent.version): Norms section missing entirely; numeric-type normalization risk is noted in Consequences but not covered by normative MUST/MUST NOT.
P1 — Structural improvements:
- ADR-27523 (actionpins helpers): Part 2 lacks an Operations sequencing constraint for
initWarnings call ordering.
- ADR-27639 (allowed-domains parity): No Sync Follow-up tasks; reference docs not updated to reflect the new dual scope of
safe-outputs.allowed-domains.
- ADR-27707 (tools.github.mode): Ambiguous edge case when
tools.github.mode: local and tools.github.type: remote coexist — no MUST tie-break rule.
P2 — Maintenance:
- All five ADRs remain in Draft status; formal acceptance decisions are overdue.
SPDD Checklist
Per-Spec Findings
ADR-27479 — Comment Memory (Accepted)
REASONS Canvas assessment:
- Requirements: Well-covered. Size cap requirements are present in narrative.
- Entities: Implicit —
comment-memory XML block, memory_id, /tmp/gh-aw/comment-memory/ directory are named but not listed as formal entities with invariants.
- Approach: Decision rationale and three rejected alternatives are thorough.
- Structure: Memory file layout described in prose; a path-to-purpose table would sharpen it.
- Operations: Ordering (materialize before agent run, sync after each turn) is described but scattered across Narrative and Normative sections.
- Norms: Present in Narrative
### Norms subsection but not formally in Part 2 normative text.
- Safeguards: Size-cap safeguards appear in narrative but Part 2 has no matching
### Safeguards heading — risks being overlooked in implementation reviews.
Open questions:
- No constraint on how sync failures are surfaced (silent skip vs. warning vs. hard error).
- No limit on the number of memory slots per managed comment.
ADR-27523 — Extract Pure Helpers in actionpins (Draft)
REASONS Canvas assessment:
- Requirements: Implicitly covered (testability, nil-guard elimination).
- Entities: Three helper functions named; input/output signatures not specified.
- Approach: Concise and appropriate scope.
- Structure: No structural spec for test file naming convention.
- Operations: No sequencing constraint on when
initWarnings must be called.
- Norms: Logging side-effect noted in Consequences; not codified as a normative SHOULD.
- Safeguards: None — acceptable for an internal refactor.
Open questions:
- Should tests that call
countPinKeyMismatches suppress log output, or is test noise acceptable?
ADR-27626 — sandbox.agent.version Migration (Draft)
REASONS Canvas assessment:
- Requirements: Codemod coverage is well-specified for all 5 value forms.
- Entities: Fields named but not described as schema entities with types and value domains.
- Approach: Two alternatives considered with clear reasoning.
- Structure: No before/after schema mapping table.
- Operations: Codemod execution order not specified.
- Norms: Entirely absent.
- Safeguards: Numeric type risk is noted in Consequences but not given a formal constraint.
Open questions:
- If a workflow has both
network.firewall and an existing sandbox.agent block, the MUST NOT add rule applies — but what if only sandbox.agent.version is missing from the existing block?
ADR-27639 — Allowed-Domains Activation Parity (Draft)
REASONS Canvas assessment:
- Requirements: Input/output parity requirement is clearly stated.
- Entities:
sanitized step, GH_AW_ALLOWED_DOMAINS, helper functions named but not listed as formal entities.
- Approach: Two rejected alternatives with solid reasoning.
- Structure: No spec on the env-var assembly block structure in generated YAML.
- Operations: No ordering spec for env-var emission.
- Norms: Missing. No naming convention for sanitization helpers.
- Safeguards: Security motivation is in Context but no formal constraint on behavior with malformed domain values.
Open questions:
- What happens if
safe-outputs.allowed-domains contains an invalid value (wildcard, non-domain string)? Should the compiler error, warn, or pass it through?
ADR-27707 — tools.github.mode Unification (Draft)
REASONS Canvas assessment:
- Requirements: Three access modes identified; backward compatibility requirements present.
- Entities: Fields named but value domains not formally listed.
- Approach: Two alternatives rejected with clear rationale.
- Structure: No mode×type matrix table.
- Operations: Codemod idempotency stated; resolution order when both
mode and type exist is ambiguous.
- Norms: Missing. No norm on updating reference docs when new mode values are added.
- Safeguards: No constraint on compiler behavior for unknown
tools.github.mode values.
Open questions:
- When
tools.github.mode: local and tools.github.type: remote coexist, which wins for MCP transport? The spec does not resolve this.
- No MUST on warning message format for unrecognized mode values.
Sync Follow-ups
- After ADR-27479 Safeguards section update: verify
actions/setup/js/comment_memory_helpers.cjs exports constants importable by tests without running the full setup script.
- After ADR-27707 precedence clarification: update
docs/src/content/docs/reference/github-tools.md or tools.md to include a mode×type precedence table.
- After ADR-27639 scope note added to reference docs: scan
docs/src/content/docs/reference/environment-variables.md for GH_AW_ALLOWED_DOMAINS and confirm the input-sanitization scope is documented.
- After all Drafts are accepted: add a
### Sync Notes subsection to each ADR listing implementation files that must stay aligned with the normative spec.
Context
| Field |
Value |
| Files reviewed |
5 (indices 50–54 of 719 total) |
| Rotation index after run |
54 |
| Run URL |
§30165115988 |
Files: docs/adr/27479-comment-memory-file-based-agent-memory-with-github-persistence.md, docs/adr/27523-extract-pure-helpers-in-actionpins.md, docs/adr/27626-sandbox-agent-version-and-network-firewall-migration.md, docs/adr/27639-unify-activation-sanitize-allowed-domains.md, docs/adr/27707-unify-github-access-mode-under-tools-github-mode.md
References:
Generated by 📋 Daily SPDD Spec Planner · sonnet46 · 40.4 AIC · ⌖ 5.68 AIC · ⊞ 4.9K · ◷
Summary
Daily SPDD spec work plan reviewing 5 ADR specifications (indices 50–54 of 719). All five are Draft status and span memory architecture (ADR-27479), refactoring hygiene (ADR-27523), schema migration (ADR-27626), security domain alignment (ADR-27639), and access-mode unification (ADR-27707). Several have weak or missing REASONS Canvas sections — particularly around Safeguards and Norms — and lack explicit Sync Follow-up tasks linking spec changes to implementation files.
Priority Work Queue
P0 — Spec gaps requiring immediate attention:
P1 — Structural improvements:
initWarningscall ordering.safe-outputs.allowed-domains.tools.github.mode: localandtools.github.type: remotecoexist — no MUST tie-break rule.P2 — Maintenance:
SPDD Checklist
### Safeguardssection to Part 2 ofdocs/adr/27479-comment-memory-file-based-agent-memory-with-github-persistence.mdwith MUST constraints for the 16 KiB per-file and 48 KiB total limits, cross-referencingactions/setup/js/comment_memory_helpers.cjs. Done when Part 2 has a standalone Safeguards heading with at least 2 MUST items.### Normssection to Part 2 of the same file specifying that the size-cap constants incomment_memory_helpers.cjsMUST stay aligned with this spec and withsetup_comment_memory_files.test.cjs. Done when both file paths are referenced in the Norms section.### Normssection todocs/adr/27626-sandbox-agent-version-and-network-firewall-migration.mdwith MUST constraints covering numeric YAML type normalization for all int and float variants. Done when the section addresses at least 4 distinct YAML numeric types.versionkey when migratingnetwork.firewall: falseor"disable"forms. Done when the normative Codemod Migration section explicitly forbids aversionkey for the disable case.### Operationssection to Part 2 ofdocs/adr/27523-extract-pure-helpers-in-actionpins.mdstating thatinitWarningsMUST be called before any write toctx.Warningswithin any code path inResolveActionPin. Done when the Operations section has at least 1 MUST sequencing constraint.docs/src/content/docs/reference/safe-outputs.mdto add a note thatsafe-outputs.allowed-domainsaffects both input sanitization (thesanitizedactivation step) and output sanitization. Done when the reference doc contains a sentence describing the dual scope.docs/adr/27707-unify-github-access-mode-under-tools-github-mode.mdfor the case wheretools.github.modeislocalorremoteandtools.github.typeis also set. Done when one MUST rule in Part 2 resolves which field wins for MCP transport selection.### Entitiessection listingtools.github.mode,tools.github.type, andfeatures.cli-proxyas formal entities with their value domains and invariants. Done when all three entities are described.DrafttoAccepted(or open a blocking question) in each file. Done when no ADR in this batch retainsStatus: Draftwithout a linked blocker.TestComputeTextStepIncludesAllowedDomainsEnv(or equivalent) testsGH_AW_ALLOWED_DOMAINSin the compiledsanitizedactivation step, separate from output-side tests. Done when the test location is identified and verified in the test suite.Per-Spec Findings
ADR-27479 — Comment Memory (Accepted)
REASONS Canvas assessment:
comment-memoryXML block,memory_id,/tmp/gh-aw/comment-memory/directory are named but not listed as formal entities with invariants.### Normssubsection but not formally in Part 2 normative text.### Safeguardsheading — risks being overlooked in implementation reviews.Open questions:
ADR-27523 — Extract Pure Helpers in actionpins (Draft)
REASONS Canvas assessment:
initWarningsmust be called.Open questions:
countPinKeyMismatchessuppress log output, or is test noise acceptable?ADR-27626 — sandbox.agent.version Migration (Draft)
REASONS Canvas assessment:
Open questions:
network.firewalland an existingsandbox.agentblock, the MUST NOT add rule applies — but what if onlysandbox.agent.versionis missing from the existing block?ADR-27639 — Allowed-Domains Activation Parity (Draft)
REASONS Canvas assessment:
sanitizedstep,GH_AW_ALLOWED_DOMAINS, helper functions named but not listed as formal entities.Open questions:
safe-outputs.allowed-domainscontains an invalid value (wildcard, non-domain string)? Should the compiler error, warn, or pass it through?ADR-27707 — tools.github.mode Unification (Draft)
REASONS Canvas assessment:
modeandtypeexist is ambiguous.tools.github.modevalues.Open questions:
tools.github.mode: localandtools.github.type: remotecoexist, which wins for MCP transport? The spec does not resolve this.Sync Follow-ups
actions/setup/js/comment_memory_helpers.cjsexports constants importable by tests without running the full setup script.docs/src/content/docs/reference/github-tools.mdortools.mdto include a mode×type precedence table.docs/src/content/docs/reference/environment-variables.mdforGH_AW_ALLOWED_DOMAINSand confirm the input-sanitization scope is documented.### Sync Notessubsection to each ADR listing implementation files that must stay aligned with the normative spec.Context
Files:
docs/adr/27479-comment-memory-file-based-agent-memory-with-github-persistence.md,docs/adr/27523-extract-pure-helpers-in-actionpins.md,docs/adr/27626-sandbox-agent-version-and-network-firewall-migration.md,docs/adr/27639-unify-activation-sanitize-allowed-domains.md,docs/adr/27707-unify-github-access-mode-under-tools-github-mode.mdReferences: