Work on an RSS Dashboard Change
Follow this workflow from request intake through verified handoff. Keep the
workflow proportional to risk while preserving the repository's audit gates.
1. Establish the Change Contract
- Accept a feature or bug description and an optional canonical GitHub issue URL.
- Treat a sufficient user-supplied description as the change source of truth.
Preserve an accompanying issue URL without retrieving it.
- Retrieve the issue only when the description is missing or materially
ambiguous, linked discussion or attachments are needed, or the user requests
verification. Use an available GitHub connector, CLI, or public browser tool.
If an attempted retrieval fails, use the supplied text and disclose the
failure.
- Read
AGENTS.md and every file it requires. Read
.agents/project-context.md before scoping the implementation.
- Run
git status --short and preserve unrelated changes.
- On Windows, set the command's working directory to the repository and use
repository-relative paths for Git and file commands. Avoid embedding an
absolute repository path in
git -C or composing paths inside a command.
When an absolute PowerShell path is unavoidable, pass one quoted,
consistently backslash-separated path to a named parameter such as
-LiteralPath.
- Treat warnings about inaccessible Git user configuration (for example a
global ignore file) as an environment limitation: report them, but do not
change user or global Git configuration to silence them.
- When the request is driven by a file under
docs/plans/, read Plan
Lifecycle and Archive in docs/development/README.md, record the matching
plan path, and keep it current as the implementation changes.
- Do not begin implementation from a dated draft. For accepted work, require a
canonical GitHub issue, rename the plan to
<issue-number>-<slug>.md, store
the exact issue URL, and replace draft dependency filenames with issue URLs.
The issue may remain unassigned, but milestone work must name its milestone
and whether it is Required or Stretch.
- Before changing implementation code or tests, create the issue branch from
the current
dev branch. Name it from the canonical plan filename:
fix/<issue-number>-<slug> for bugs and feat/<issue-number>-<slug> for
features or enhancements. The <slug> is the plan filename after the
issue-number prefix and before .md. Confirm the new branch starts at the
current dev tip; if unrelated working-tree changes prevent a safe branch
switch, preserve them and ask the user how to proceed.
- Inspect the relevant production code, tests, types, documentation, and nearby
patterns before asking questions that the repository can answer.
- State observable acceptance criteria. Classify the work as a feature or fix,
identify affected surfaces, and assign low, medium, or high risk.
Ask the user only when a missing product decision would materially change the
result. Do not invent issue details, acceptance criteria, or hidden audit
findings.
2. Select Obsidian Review Gates
Read references/obsidian-change-gates.md
and apply only the rows matching the affected surfaces. Use its risk rules to
select automated and manual validation.
Inspect the live Obsidian community listing only for release, compliance,
security, platform, storage, or audit-remediation work. For ordinary changes,
use the local policies and scorecard to avoid unnecessary network work.
3. Plan and Implement with TDD
- Map each acceptance criterion to an automated test or an explicit manual check.
- Put new tests under the matching
test_files/unit/ area and follow the
testing guide's jsdom, Obsidian stub, cleanup, and observable-behavior rules.
- Follow Red -> Green -> Refactor. Confirm the regression test fails for the
expected reason before implementing the smallest compliant change.
- Follow
eslint.config.mjs; do not add suppressions or weaken rules.
- Keep unrelated refactors and formatting out of the patch.
If the current collaboration mode is Plan Mode, stop after a decision-complete
<proposed_plan>. Otherwise, continue through implementation unless a material
decision requires user input.
4. Record the User-Visible Change
- After the behavior is complete, add one concise bullet under
CHANGELOG.md -> Unreleased -> Features or Fixes.
- Append
[GH Issue #N](exact-url) when a canonical GitHub issue URL is
supplied. Preserve the exact URL so GitHub can create the repository
cross-reference.
- Update an existing matching bullet rather than creating a duplicate.
- When no issue URL exists, write the same user-facing bullet without a link.
- Do not add a changelog entry for internal-only refactors, tests, or tooling.
- Do not update
docs/releases/ for an individual issue. At release cut, use
the versioned changelog entries to consolidate related changes into an
audience-focused docs/releases/<version>.md summary.
5. Validate Efficiently
Use a staged validation ladder:
- During implementation, run ESLint against changed TypeScript files with
npm exec -- eslint <changed-files> --max-warnings=0 and run focused tests
with npm run test:unit -- <matching-test-file>.
- Run
npm run check:platform early when main.ts or src/**/*.ts changes.
For CSS changes, run npm run check:css-scope and
npm run check:important early.
- Run the full
npm run test:unit suite for high-risk or broad changes,
including storage migrations, synchronization, shared state or types,
parser infrastructure, lifecycle orchestration, or multiple subsystems.
- Run
npm run build once before handoff as the complete compliance, full
lint, type-check, and production-bundle gate.
- Run
git status --short and confirm no unexpected generated files appear.
If a check cannot run or fails, report the exact command and reason. Where
possible, distinguish a reproducible pre-existing failure from a regression.
Never claim compliance for an unrun or failing check, and do not modify
unrelated files merely to make a broad check green.
For documentation-only changes, run only relevant document or skill validation
and explain why application checks were not applicable.
6. Close the Matching Plan
Run this step only after behavior is complete and every required validation
gate passes. Leave incomplete or failing work in docs/plans/.
When the change has a matching active plan:
- Reconcile the plan with the implementation, tests, limitations, and manual
checks actually delivered.
- Follow the metadata and destination rules in
docs/development/README.md.
- Move an implemented plan to
docs/archive/plans/unreleased/ unless a release
version is already assigned; use docs/archive/plans/v<version>/ when it is.
- Update every repository link to the moved plan and its entry in
docs/archive/README.md.
- Preserve issue and implementation links without inventing missing values.
Do not create a plan merely to satisfy this step when the work had no matching
plan.
7. Hand Off
Lead with the completed outcome. Include:
- The implemented behavior and acceptance criteria satisfied.
- Tests and validation commands with results.
- The changelog entry and issue link, when present.
- The updated and archived plan path, when the work started from a plan.
- Risk-selected manual test steps with expected outcomes.
- Any remaining limitation, unverified external state, or failing check.
1---2name: work-on-rss-dashboard-change3description: Plan and implement user-visible features, bug fixes, and GitHub issues for the RSS Dashboard Obsidian plugin, including TDD, risk-based Obsidian audit checks, validation, CHANGELOG updates, and manual testing. Use for requests to add, change, or fix plugin behavior or address a GitHub issue. Do not use for read-only explanations, status checks, general repository questions, or release-only work that does not modify plugin behavior.4---56# Work on an RSS Dashboard Change78Follow this workflow from request intake through verified handoff. Keep the9workflow proportional to risk while preserving the repository's audit gates.1011## 1. Establish the Change Contract1213- Accept a feature or bug description and an optional canonical GitHub issue URL.14- Treat a sufficient user-supplied description as the change source of truth.15 Preserve an accompanying issue URL without retrieving it.16- Retrieve the issue only when the description is missing or materially17 ambiguous, linked discussion or attachments are needed, or the user requests18 verification. Use an available GitHub connector, CLI, or public browser tool.19 If an attempted retrieval fails, use the supplied text and disclose the20 failure.21- Read `AGENTS.md` and every file it requires. Read22 `.agents/project-context.md` before scoping the implementation.23- Run `git status --short` and preserve unrelated changes.24- On Windows, set the command's working directory to the repository and use25 repository-relative paths for Git and file commands. Avoid embedding an26 absolute repository path in `git -C` or composing paths inside a command.27 When an absolute PowerShell path is unavoidable, pass one quoted,28 consistently backslash-separated path to a named parameter such as29 `-LiteralPath`.30- Treat warnings about inaccessible Git user configuration (for example a31 global ignore file) as an environment limitation: report them, but do not32 change user or global Git configuration to silence them.33- When the request is driven by a file under `docs/plans/`, read **Plan34 Lifecycle and Archive** in `docs/development/README.md`, record the matching35 plan path, and keep it current as the implementation changes.36- Do not begin implementation from a dated draft. For accepted work, require a37 canonical GitHub issue, rename the plan to `<issue-number>-<slug>.md`, store38 the exact issue URL, and replace draft dependency filenames with issue URLs.39 The issue may remain unassigned, but milestone work must name its milestone40 and whether it is Required or Stretch.41- Before changing implementation code or tests, create the issue branch from42 the current `dev` branch. Name it from the canonical plan filename:43 `fix/<issue-number>-<slug>` for bugs and `feat/<issue-number>-<slug>` for44 features or enhancements. The `<slug>` is the plan filename after the45 issue-number prefix and before `.md`. Confirm the new branch starts at the46 current `dev` tip; if unrelated working-tree changes prevent a safe branch47 switch, preserve them and ask the user how to proceed.48- Inspect the relevant production code, tests, types, documentation, and nearby49 patterns before asking questions that the repository can answer.50- State observable acceptance criteria. Classify the work as a feature or fix,51 identify affected surfaces, and assign low, medium, or high risk.5253Ask the user only when a missing product decision would materially change the54result. Do not invent issue details, acceptance criteria, or hidden audit55findings.5657## 2. Select Obsidian Review Gates5859Read [references/obsidian-change-gates.md](references/obsidian-change-gates.md)60and apply only the rows matching the affected surfaces. Use its risk rules to61select automated and manual validation.6263Inspect the live Obsidian community listing only for release, compliance,64security, platform, storage, or audit-remediation work. For ordinary changes,65use the local policies and scorecard to avoid unnecessary network work.6667## 3. Plan and Implement with TDD6869- Map each acceptance criterion to an automated test or an explicit manual check.70- Put new tests under the matching `test_files/unit/` area and follow the71 testing guide's jsdom, Obsidian stub, cleanup, and observable-behavior rules.72- Follow Red -> Green -> Refactor. Confirm the regression test fails for the73 expected reason before implementing the smallest compliant change.74- Follow `eslint.config.mjs`; do not add suppressions or weaken rules.75- Keep unrelated refactors and formatting out of the patch.7677If the current collaboration mode is Plan Mode, stop after a decision-complete78`<proposed_plan>`. Otherwise, continue through implementation unless a material79decision requires user input.8081## 4. Record the User-Visible Change8283- After the behavior is complete, add one concise bullet under84 `CHANGELOG.md` -> `Unreleased` -> `Features` or `Fixes`.85- Append `[GH Issue #N](exact-url)` when a canonical GitHub issue URL is86 supplied. Preserve the exact URL so GitHub can create the repository87 cross-reference.88- Update an existing matching bullet rather than creating a duplicate.89- When no issue URL exists, write the same user-facing bullet without a link.90- Do not add a changelog entry for internal-only refactors, tests, or tooling.91- Do not update `docs/releases/` for an individual issue. At release cut, use92 the versioned changelog entries to consolidate related changes into an93 audience-focused `docs/releases/<version>.md` summary.9495## 5. Validate Efficiently9697Use a staged validation ladder:98991. During implementation, run ESLint against changed TypeScript files with100 `npm exec -- eslint <changed-files> --max-warnings=0` and run focused tests101 with `npm run test:unit -- <matching-test-file>`.1022. Run `npm run check:platform` early when `main.ts` or `src/**/*.ts` changes.103 For CSS changes, run `npm run check:css-scope` and104 `npm run check:important` early.1053. Run the full `npm run test:unit` suite for high-risk or broad changes,106 including storage migrations, synchronization, shared state or types,107 parser infrastructure, lifecycle orchestration, or multiple subsystems.1084. Run `npm run build` once before handoff as the complete compliance, full109 lint, type-check, and production-bundle gate.1105. Run `git status --short` and confirm no unexpected generated files appear.111112If a check cannot run or fails, report the exact command and reason. Where113possible, distinguish a reproducible pre-existing failure from a regression.114Never claim compliance for an unrun or failing check, and do not modify115unrelated files merely to make a broad check green.116117For documentation-only changes, run only relevant document or skill validation118and explain why application checks were not applicable.119120## 6. Close the Matching Plan121122Run this step only after behavior is complete and every required validation123gate passes. Leave incomplete or failing work in `docs/plans/`.124125When the change has a matching active plan:126127- Reconcile the plan with the implementation, tests, limitations, and manual128 checks actually delivered.129- Follow the metadata and destination rules in `docs/development/README.md`.130- Move an implemented plan to `docs/archive/plans/unreleased/` unless a release131 version is already assigned; use `docs/archive/plans/v<version>/` when it is.132- Update every repository link to the moved plan and its entry in133 `docs/archive/README.md`.134- Preserve issue and implementation links without inventing missing values.135136Do not create a plan merely to satisfy this step when the work had no matching137plan.138139## 7. Hand Off140141Lead with the completed outcome. Include:142143- The implemented behavior and acceptance criteria satisfied.144- Tests and validation commands with results.145- The changelog entry and issue link, when present.146- The updated and archived plan path, when the work started from a plan.147- Risk-selected manual test steps with expected outcomes.148- Any remaining limitation, unverified external state, or failing check.