Initial#149
Open
NeverTheSame wants to merge 69 commits into
Open
Conversation
Author
|
Ok |
…folder and exclude from Git
- Add comprehensive AGENTS.md for AI agent guidance - Enhance README.md with project structure, Python tools setup, and detailed documentation - Add blog posts about AGENTS.md and Nvidia Blackwell - Update .gitignore to reflect posts-generator directory structure
Co-authored-by: kirillkuklin <kirillkuklin@gmail.com>
Co-authored-by: kirillkuklin <kirillkuklin@gmail.com>
Live-site audit found 24 broken internal links on the homepage. Root causes:
1. index.md hard-coded absolute paths like /devops/ and {{ post.url }},
missing the /BeOps baseurl. Replaced with the relative_url filter so
GH Pages serves them correctly.
2. Category index pages /devops/, /k8s/, /sre/, /ai/ did not exist,
causing every post's category breadcrumb to 404. Added _pages/*.md
for each category with permalink set and auto-listed posts.
Verified with a local Jekyll build + Playwright audit: 0 broken links,
0 missing-baseurl links, 0 category integrity issues.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds an OSS site audit using Playwright (+ optional lychee) under tests/site-audit/. Detects: - broken internal links - links missing the /BeOps baseurl - posts unreachable from the homepage in >2 clicks - orphan posts - category index pages that fail to list their own posts Runs in GitHub Actions on every push to gh-pages/main and nightly (.github/workflows/site-audit.yml), failing the build on regressions and uploading the report as a workflow artifact. AUTHORING.md + POST_TEMPLATE.md document the link-discipline rules (always use the relative_url filter, never hard-code /devops/) and the post checklist. AGENTS.md updated with the same rules. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…job-interviews category Changes requested: 1. Sidebar (_includes/toc-date.html) now groups posts by category. Each category from _data/categories.yml is rendered as a top-level entry with its posts nested below in date-reverse order. Posts whose category doesn't match a known slug fall into an 'Other' bucket so nothing is silently dropped. Category index pages are no longer double-listed in the utility-pages section (skipped via the new is_category: true front matter). 2. Homepage (index.md) is now structured as 'Browse by Category': each category shows its description and its posts grouped beneath it, instead of a flat 'latest 5 posts' list. 3. 'Back to home' link added at the top of every post and category page via _layouts/post.html and _layouts/home.html (suppressed on the root homepage itself). 4. New category 'job-interviews' added — _data/categories.yml updated, _pages/job-interviews.md created, AGENTS.md + AUTHORING.md + POST_TEMPLATE.md + .github/workflows/site-audit.yml all updated to include the new slug. Future categories only need to be appended to _data/categories.yml (single source of truth for sidebar + homepage) plus a matching _pages/<slug>.md. Verified locally with the site-audit framework: 0 broken links, 0 missing-baseurl, 0 unreachable/orphan/category issues. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Lets an external agent ask 'what have I already written about X?' without ever seeing NEON_DATABASE_URL. The secret stays inside Actions; the prompt block returns as a workflow artifact + step summary. Usage: gh workflow run rag-query.yml -f seed='AI Engineering Coach repo' # wait, then: gh run download <run-id> -n rag-context Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
RAG-grounded draft (consulted rag-query workflow before drafting). Cites prior posts: agentsmd-ate-my-readme, staff-ai-engineer-interview, forward-deployed-engineering-ate-customer-success. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Index the @beops_it channel posts into a separate Neon pgvector corpus (style_posts/style_chunks) and, on a new blog post, draft a Telegram post in the author's voice grounded in their own most-similar posts, then DM it for manual review. No auto-publishing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
An undefined CI variable expands to an empty string; pass that through as 'No models provided' to OpenRouter. Fall back to the built-in default when the model is empty/whitespace. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
deepseek/deepseek-chat-v3:free was retired on OpenRouter. Switch the default to a currently-available multilingual free model. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Free models are individually rate-limited or occasionally retired. Try a list of current free models in order, honor the Retry-After header on 429, and fall through to the next model on 404/exhausted retries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… category) Add standalone post on the llm-batcher OpenAI->Anthropic proxy, introduce the ai-developments subcategory (categories.yml + _pages page + site-audit env), and add the beops-publish-post project skill plus an AGENTS.md pointer. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add a hard no-em-dash prose rule to AGENTS.md and the beops-publish-post skill to preserve a natural human voice, and rewrite the llm-batcher post to remove all 23 em-dashes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…xy post Show the concrete payoff: switching an app to Claude requires rewriting every API call site against the Anthropic SDK without the proxy, versus a single base_url change (or one env var) with llm-batcher. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
build_posts_ts.py silently drops posts whose category is not in CATEGORY_MAP, which hid the llm-batcher post from beops.site. Map ai-developments -> ai and document this 4th category step in AGENTS.md and the publish skill. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Map a 'data' Jekyll category to a 'data' writing filter, emit it in the Post union, and re-tag the DataOps post category devops -> data. Changes the post permalink to /data/2025-08-21-dataops.html. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up to the OpenAI-compatible proxy post: add a standalone piece on the microbatching layer (admission windows, concurrency semaphore, backpressure, Little's Law, async lifecycle), with a before/after thundering-herd example and a link to the batching.html visualization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…omepage - Move both llm-batcher posts from ai-developments to the ai category and fix the microbatching post's internal link to the proxy post. - Remove the ai-developments category (data file, index page, audit env, CATEGORY_MAP, AGENTS.md, publish skill). - Stop rendering each post's section headings in the left sidebar; it now goes category then post only. - Replace the category-grouped homepage with a single reverse-chronological list of every post. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…sian + chain prior posts - Point the microbatching post's visualization link at the rendered GitHub Pages URL (neverthesame.github.io/llm-batcher/batching.html) instead of the GitHub blob view, which shows raw source. - telegram_drafter: always draft @beops_it posts in Russian, and pull related prior blog posts from the blog RAG corpus so the draft can chain to (link) one relevant earlier post. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…tyle RAG Replace the blog-post chaining with Telegram channel interconnection: pull the most related prior channel posts from the style corpus and surface their t.me/<channel>/<tg_id> links so the model can weave in at most one natural reference. The channel now reads as a connected story. Main blog article link is kept; the extra blog-post link is dropped. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add propose-substack-post.yml + substack_drafter.py: on push to gh-pages touching _posts/**, rewrite the post SHORTER in English (keeping all technical detail), append a backlink to the canonical BeOps post, and create a Substack DRAFT via the unofficial python-substack client. Never auto-publishes. - Auth by secret: SUBSTACK_COOKIES_STRING (preferred) or SUBSTACK_EMAIL + SUBSTACK_PASSWORD, plus SUBSTACK_PUBLICATION_URL variable. - Full body sent to the model (warns, never silently truncates); forbids em-dashes and Markdown tables (Substack drops tables); warns if the model emits tables/Liquid; idempotent by title to avoid duplicate drafts. - Allowlist the two new files in .gitignore; unit tests (no network); docs in AGENTS.md + publish skill. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Substack's Cloudflare bot-protection returns a 403 JS challenge to GitHub Actions datacenter IPs regardless of cookie validity, so the draft must be generated locally. Remove propose-substack-post.yml and document the local substack_drafter.py command in AGENTS.md and the publish skill. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitHub secrets are write-only and can't be read back, so local runs need the same values supplied locally. substack_drafter.py now auto-loads a gitignored posts-generator/.env (real env vars still win). Add .env.example template, allowlist it, and make python-dotenv an explicit dep. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…unts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…stale The substack client splits cookies on '=' and silently drops nameless pairs, so a bare sid value sends zero cookies and yields 401. Normalize a bare value by prefixing 'substack.sid='. Add tests and a troubleshooting note (401 = expired cookie, re-copy a fresh one). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…mit<=40) The library's get_drafts omits offset (endpoint 400s) and the /drafts limit is capped below 50. Query /drafts directly with offset=0&limit=25 and read the posts[] array (draft title is in draft_title). Re-runs now correctly detect and skip an existing draft instead of warning and risking duplicates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… source Store local tooling secrets in Doppler so they sync across machines and never live in plaintext. Add committed doppler.yaml pinning beops/dev, and document running tools via 'doppler run --' in AGENTS.md and the publish skill. Local .env remains an auto-loaded fallback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add Golden Rule 6 and Step 4a requiring any associated .html visualization to be hosted on GitHub Pages and linked via its rendered URL (never the blob/ view). Update the RAG step to inject NEON_DATABASE_URL via 'doppler run'. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…on rule Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…y post Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
All automation/tooling now lives in the private NeverTheSame/beops-ops superproject, which includes this repo as the site/ submodule. Untrack posts-generator/, .github/, .copilot/, tests/, docs/, AGENTS.md, doppler.yaml, and .cursorrules from gh-pages. Removing the workflows also stops public Actions from firing. Add defensive _config.yml excludes and .gitignore rules so tooling is never re-published here. The live site still builds from gh-pages (verified locally: no leaks, all pages render). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… others) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.