Skip to content

Commit c05985b

Browse files
committed
Reorder footer actions and add CI parity gate guidance
1 parent 4a98d17 commit c05985b

5 files changed

Lines changed: 34 additions & 17 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ This document defines execution constraints for AI agents. For general contribut
1515
## Agent-Specific Verification Rules
1616

1717
- Always run Dev Container smoke + `make ready` for changes.
18+
- For frontend changes or API contract/spec changes, run `make ci-ready` to mirror CI parity checks.
1819
- For frontend changes, also verify in `chrome-devtools` MCP at `http://127.0.0.1:4001/` while the Dev Container is running.
1920
- Capture a quick state check for all affected UI states (e.g., guest/member/result) to enforce state parity and avoid duplicate actions.
2021

Makefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# frozen_string_literal: true
22

3-
.PHONY: help test lint lint-js lint-ruby lintfix lintfix-js lintfix-ruby setup dev clean frontend-setup check-frontend quick-check ready yard-verify-public-docs openapi openapi-verify openapi-client openapi-client-verify openapi-lint openapi-lint-redocly openapi-lint-spectral openai-lint-spectral test-frontend-e2e
3+
.PHONY: help test lint lint-js lint-ruby lintfix lintfix-js lintfix-ruby setup dev clean frontend-setup check-frontend quick-check ready ci-ready yard-verify-public-docs openapi openapi-verify openapi-client openapi-client-verify openapi-lint openapi-lint-redocly openapi-lint-spectral openai-lint-spectral test-frontend-e2e
44

55
RUBOCOP_FLAGS ?= --cache false
66

@@ -107,6 +107,13 @@ ready: ## Pre-commit gate (quick checks + RSpec)
107107
bundle exec rspec
108108
@echo "Pre-commit checks complete!"
109109

110+
ci-ready: ## CI parity gate (ready + OpenAPI verify + frontend e2e smoke)
111+
@echo "Running CI parity checks..."
112+
$(MAKE) ready
113+
$(MAKE) openapi-verify
114+
$(MAKE) test-frontend-e2e
115+
@echo "CI parity checks complete!"
116+
110117
yard-verify-public-docs: ## Verify essential YARD docs for all public methods in app/
111118
bundle exec rake yard:verify_public_docs
112119

docs/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Running the app directly on the host is not supported.
4242
| `make setup` | Install Ruby and Node dependencies. |
4343
| `make dev` | Run Ruby (port 4000) and frontend (port 4001) dev servers. |
4444
| `make ready` | Pre-commit gate: `make quick-check` + `bundle exec rspec`. |
45+
| `make ci-ready` | CI parity gate: `make ready` + `make openapi-verify` + frontend e2e smoke. |
4546
| `make test` | Run Ruby and frontend test suites. |
4647
| `make lint` | Run all linters. |
4748
| `make yard-verify-public-docs` | Enforce typed YARD docs for public methods in `app/`. |
@@ -90,6 +91,12 @@ Always run this before pushing or committing:
9091
make ready
9192
```
9293

94+
For frontend changes and API contract/OpenAPI changes, run the CI-parity gate:
95+
96+
```bash
97+
make ci-ready
98+
```
99+
93100
### Testing Layers
94101

95102
| Layer | Tooling | Focus |

frontend/src/__tests__/App.test.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ describe('App', () => {
184184
feed_token: 'generated-token',
185185
public_url: '/api/v1/feeds/generated-token',
186186
json_public_url: '/api/v1/feeds/generated-token.json',
187+
created_at: '2026-04-05T08:59:00.000Z',
188+
updated_at: '2026-04-05T09:00:00.000Z',
187189
},
188190
preview: {
189191
items: [],
@@ -412,10 +414,10 @@ describe('App', () => {
412414
expect(utilityItems).toEqual([
413415
'Try included feeds',
414416
'Bookmarklet',
417+
'Clear saved token',
418+
'Install from Docker Hub',
415419
'OpenAPI spec',
416420
'Source code',
417-
'Install from Docker Hub',
418-
'Clear saved token',
419421
]);
420422
});
421423

@@ -671,9 +673,9 @@ describe('App', () => {
671673
expect(utilityLinks).toEqual([
672674
'Try included feeds',
673675
'Bookmarklet',
676+
'Install from Docker Hub',
674677
'OpenAPI spec',
675678
'Source code',
676-
'Install from Docker Hub',
677679
]);
678680

679681
expect(screen.getByRole('link', { name: 'OpenAPI spec' })).toHaveAttribute(

frontend/src/components/AppPanels.tsx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,19 @@ export function UtilityStrip({
275275
Try included feeds
276276
</a>
277277
<Bookmarklet />
278+
{hasAccessToken && (
279+
<button type="button" class="utility-button" onClick={onClearToken}>
280+
Clear saved token
281+
</button>
282+
)}
283+
<a
284+
href="https://hub.docker.com/r/html2rss/web"
285+
target="_blank"
286+
rel="noopener noreferrer"
287+
class="utility-link"
288+
>
289+
Install from Docker Hub
290+
</a>
278291
{openapiUrl && (
279292
<a
280293
href={normalizedOpenapiUrl ?? openapiUrl}
@@ -293,19 +306,6 @@ export function UtilityStrip({
293306
>
294307
Source code
295308
</a>
296-
<a
297-
href="https://hub.docker.com/r/html2rss/web"
298-
target="_blank"
299-
rel="noopener noreferrer"
300-
class="utility-link"
301-
>
302-
Install from Docker Hub
303-
</a>
304-
{hasAccessToken && (
305-
<button type="button" class="utility-button" onClick={onClearToken}>
306-
Clear saved token
307-
</button>
308-
)}
309309
</div>
310310
</section>
311311
);

0 commit comments

Comments
 (0)