diff --git a/404.html b/404.html index a8d9d72..3697d77 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,5 @@ -Page not found | Autonomous Resource Management +Page not found | Autonomous Resource Management
Autonomous Resource
ManagementKnowledge · Context · Evidence
404 / Page not found

Let’s find the right page.

This address is not part of the current reference.

diff --git a/404/index.html b/404/index.html index a8d9d72..3697d77 100644 --- a/404/index.html +++ b/404/index.html @@ -1,5 +1,5 @@ -Page not found | Autonomous Resource Management +Page not found | Autonomous Resource Management
Autonomous Resource
ManagementKnowledge · Context · Evidence
404 / Page not found

Let’s find the right page.

This address is not part of the current reference.

diff --git a/about/index.html b/about/index.html index 742fa07..b8446d6 100644 --- a/about/index.html +++ b/about/index.html @@ -1,7 +1,7 @@ -About this reference | Autonomous Resource Management +About this reference | Autonomous Resource Management
Autonomous Resource
ManagementKnowledge · Context · Evidence
-
About this resource

About this reference

Purpose, authorship, editorial boundaries, and how this resource is maintained.

Updated

A reference for resource decisions

This site helps readers understand how automated systems allocate resources and how people can inspect and govern those decisions. Its initial focus is compute infrastructure, workload coordination, technology costs, and human oversight.

+
About this resource

About this reference

Purpose, authorship, editorial boundaries, and how this resource is maintained.

Updated

A reference for resource decisions

This site helps readers understand how automated systems allocate resources and how people can inspect and govern those decisions. Its initial focus is compute infrastructure, workload coordination, technology costs, and human oversight.

The project aims to earn trust through useful explanations, primary citations, clear limitations, and visible corrections. It does not claim to be the definitive authority or a standards body.

Maintainer and authorship

Mason Nguyen maintains the site and its public source repository. “ARM Editorial” identifies this site's editorial voice; it is not a claim that an independent editorial board exists. The initial reference articles were prepared with AI assistance, as disclosed on each article.

The proposed ARM working framework is attributed separately. Its existence does not establish consensus around that framework or the site's terminology.

diff --git a/assets/site.8cf93ced94e9.css b/assets/site.8cf93ced94e9.css new file mode 100644 index 0000000..0e18f8f --- /dev/null +++ b/assets/site.8cf93ced94e9.css @@ -0,0 +1,10 @@ +@charset "UTF-8"; +:root{--paper:#f7f4ec;--panel:#eeebe2;--ink:#121b34;--muted:#505967;--line:#cbd0d9;--accent:#2944b0;--decision-copper:#aa4428;--review-mint:#9de1d2;--sans:Arial,Helvetica,sans-serif;--serif:Georgia,'Times New Roman',serif} +*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:2rem}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.65}a{color:var(--accent);text-underline-offset:4px}a:hover{text-decoration-thickness:2px}button,input{font:inherit}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid var(--decision-copper);outline-offset:5px}.wrap{max-width:1200px;margin:auto;padding:0 36px}.skip{position:absolute;left:16px;top:-100px;background:white;padding:12px;z-index:5}.skip:focus{top:10px}.masthead{border-bottom:1px solid var(--line)}.masthead .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-top:24px;padding-bottom:24px}.brand{display:flex;align-items:center;gap:13px;text-decoration:none;color:var(--ink);font-size:14px;line-height:1.3;font-weight:bold}.brand-mark{display:grid;place-items:center;border:1px solid var(--ink);height:43px;width:43px;font-family:var(--serif);font-size:23px}.brand small{display:block;font-weight:normal;font-size:10px;text-transform:uppercase;letter-spacing:1.7px;margin-top:4px}nav{display:flex;flex-wrap:wrap;gap:24px}nav a{font-size:13px;text-decoration:none;color:var(--ink)}nav a[aria-current=page]{border-bottom:2px solid var(--accent)}.eyebrow,.label{font:11px/1.5 monospace;letter-spacing:1.8px;text-transform:uppercase;color:var(--muted)}.hero{padding:65px 0 50px;border-bottom:1px solid var(--line)}.hero-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:70px;align-items:end}h1,h2,h3{line-height:1.13;font-weight:normal}h1{font-family:var(--serif);font-size:clamp(38px,5.5vw,72px);letter-spacing:-2px;margin:18px 0 24px}h2{font-family:var(--serif);font-size:32px;margin:0 0 20px}h3{font-family:var(--serif);font-size:25px;margin:14px 0}p{margin:0 0 20px}.lead{font-size:18px;line-height:1.65;max-width:66ch;color:var(--muted)}.hero-note{border-top:2px solid var(--accent);padding-top:20px;font-size:16px}.actions{display:flex;flex-wrap:wrap;align-items:center;gap:24px;margin-top:28px}.button{display:inline-block;padding:12px 20px;background:var(--ink);color:white;text-decoration:none;font-size:14px}.section{padding:42px 0;border-bottom:1px solid var(--line)}.section-heading{display:flex;justify-content:space-between;align-items:baseline;gap:24px;margin-bottom:16px}.section-heading h2{margin:0}.section-heading a{font-size:13px}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.card{border-top:1px solid var(--line);padding:22px 0 16px;min-width:0}.card h3 a{color:var(--ink);text-decoration:none}.card h3 a:hover{text-decoration:underline}.card p{font-size:16px;color:var(--muted);margin-bottom:14px}.card .meta{font-size:11px}.topic-number{font:12px monospace;color:var(--accent);display:block;margin-bottom:14px}.callout{padding:26px;background:var(--panel);border-left:3px solid var(--accent);margin:26px 0}.callout p:last-child{margin:0}.two{display:grid;grid-template-columns:1fr 1fr;gap:48px}.article-head{padding:48px 0 28px;max-width:900px}.article-head h1{font-size:clamp(36px,4.5vw,57px)}.meta{color:var(--muted);font-size:12px}.article-layout{display:grid;grid-template-columns:210px minmax(0,760px);gap:60px;padding:24px 0 64px}.toc{font-size:12px;align-self:start;position:sticky;top:24px;border-top:1px solid var(--line);padding-top:18px}.toc a{display:block;margin:12px 0;color:var(--muted);text-decoration:none}.prose{font-size:16px;min-width:0}.prose h2{margin:42px 0 18px;font-size:29px}.prose h2:first-child{margin-top:0}.prose h3{font-size:22px;margin-top:30px}.prose li{margin-bottom:10px}.prose blockquote{margin:24px 0;padding:6px 24px;border-left:3px solid var(--accent);color:var(--muted)}.prose table{display:block;overflow-x:auto;border-collapse:collapse;max-width:100%;font-size:14px}.prose td,.prose th{padding:12px;border:1px solid var(--line);text-align:left;min-width:100px}.prose pre{padding:18px;background:var(--panel);overflow:auto}.prose code{font-size:.9em;overflow-wrap:anywhere}.prose a{overflow-wrap:anywhere}.source-list{padding-left:24px;font-size:14px}.source-list small{display:block;color:var(--muted)}.article-end{margin-top:40px;border-top:1px solid var(--line);padding-top:24px}.search-box{max-width:720px;margin:26px 0}.search-box label{display:block;font-size:13px;margin-bottom:8px}.search-box input{width:100%;padding:14px 16px;border:1px solid var(--muted);background:#fffefa;color:var(--ink);border-radius:0}.search-status{font-size:13px;margin-top:10px;color:var(--muted)}.search-results{padding:0;list-style:none}.search-results li{padding:18px 0;border-bottom:1px solid var(--line)}.search-results h2{font-size:24px;margin-bottom:8px}.search-results p{font-size:14px;margin:0}.footer{padding:32px 0 48px}.footer .wrap{display:flex;justify-content:space-between;gap:30px}.footer p{font-size:12px;color:var(--muted);max-width:470px}.footer nav{gap:14px}.footer nav a{font-size:12px}.breadcrumb{font-size:12px;color:var(--muted);margin-bottom:24px}.list-row{padding:24px 0;border-bottom:1px solid var(--line)}.list-row h2{font-size:29px;margin:10px 0}.list-row p{max-width:75ch;color:var(--muted)}[hidden]{display:none!important} +@media(max-width:800px){.wrap{padding:0 22px}.masthead .wrap{align-items:flex-start;flex-direction:column;gap:20px}.masthead nav{gap:20px}.hero{padding:38px 0}.hero-grid,.two{grid-template-columns:1fr;gap:28px}.cards{grid-template-columns:repeat(2,1fr)}.article-layout{grid-template-columns:1fr;gap:24px}.toc{position:static}.toc a{display:inline-block;margin:5px 12px 5px 0}.footer .wrap{flex-direction:column}.section-heading{align-items:flex-start}h1{letter-spacing:-1px}.article-head{padding-top:30px}} +@media(max-width:500px){.cards{grid-template-columns:1fr;gap:5px}.section{padding:30px 0}.section-heading{flex-direction:column;gap:12px}.hero-note{font-size:16px}.masthead nav{gap:15px}.prose{font-size:16px}.lead{font-size:17px}} +@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}} + +.resource-loop{display:block;width:100%;height:auto;margin:20px 0 5px} + +.topic-paths{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;list-style:none;padding:0;margin:20px 0}.topic-paths li{border-top:1px solid var(--line);padding-top:16px}.topic-paths a{font-family:var(--serif);font-size:23px}.topic-paths p{font-size:14px;color:var(--muted);margin-top:8px}.breadcrumb{display:flex;flex-wrap:wrap;gap:8px;line-height:1.7}.breadcrumb span[aria-current]{overflow-wrap:anywhere}.source-list p{font-size:13px;margin-top:8px}@media(max-width:500px){.topic-paths{grid-template-columns:1fr}} diff --git a/changelog/index.html b/changelog/index.html index faa3289..6cbe858 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -1,7 +1,7 @@ -Revision log | Autonomous Resource Management +Revision log | Autonomous Resource Management
-
About this resource

Revision log

Material changes to the reference, its scope, and editorial practices.

Updated

15 October 2026 — standalone reference revision

    +
    About this resource

    Revision log

    Material changes to the reference, its scope, and editorial practices.

    Updated

    15 October 2026 — standalone reference revision

    • Reframed the homepage around a source-backed knowledge library.
    • Removed commercial implementation referrals from the reference site's publishing model.
    • Moved the attributed ARM proposal to a dedicated framework page.
    • diff --git a/contribute/index.html b/contribute/index.html index 0272e0b..ec4ba8f 100644 --- a/contribute/index.html +++ b/contribute/index.html @@ -1,7 +1,7 @@ -Contribute or request a correction | Autonomous Resource Management +Contribute or request a correction | Autonomous Resource Management
      -
      About this resource

      Contribute or request a correction

      A practical route for improving definitions, citations, examples, and industry coverage.

      Updated

      Suggest a factual correction

      Open a correction request with the page URL, the exact passage, a proposed correction, and a supporting source. State whether the issue is a factual error, outdated information, unclear wording, or a missing perspective.

      +
      About this resource

      Contribute or request a correction

      A practical route for improving definitions, citations, examples, and industry coverage.

      Updated

      Suggest a factual correction

      Open a correction request with the page URL, the exact passage, a proposed correction, and a supporting source. State whether the issue is a factual error, outdated information, unclear wording, or a missing perspective.

      GitHub requires an account to submit an issue. Please omit private operational data, credentials, and personal information from public reports.

      Contribute an article

      Use the public repository to propose a Markdown article or an edit. Explain the topic's relevance, cite original sources, and distinguish sourced facts from your own examples and analysis.

      Disclose relevant affiliations. State whether AI assisted with drafting or verification. Do not invent review credentials or imply that a cited project endorses this site.

      diff --git a/docs/search-lab-baseline.json b/docs/search-lab-baseline.json new file mode 100644 index 0000000..9afacc0 --- /dev/null +++ b/docs/search-lab-baseline.json @@ -0,0 +1,27 @@ +{ + "url": "https://autonomousresourcemanagement.com/", + "fetchTime": "2026-10-16T14:45:09.239Z", + "lighthouseVersion": "13.5.0", + "formFactor": "mobile", + "scores": { + "performance": 1, + "accessibility": 1, + "best-practices": 1, + "seo": 1 + }, + "metrics": { + "largest-contentful-paint": { + "value": 830.3835, + "unit": "millisecond" + }, + "cumulative-layout-shift": { + "value": 0, + "unit": "unitless" + }, + "total-blocking-time": { + "value": 5.5, + "unit": "millisecond" + } + }, + "scope": "One live homepage lab run; screenshot inspected to confirm real content, not a browser challenge. Not field Core Web Vitals, a ranking prediction, or a site-wide certification." +} diff --git a/docs/technical-search-audit.md b/docs/technical-search-audit.md new file mode 100644 index 0000000..bdd8c17 --- /dev/null +++ b/docs/technical-search-audit.md @@ -0,0 +1,48 @@ +# Technical search and schema audit + +Property: autonomousresourcemanagement.com. Date: 16 October 2026. + +## Baseline observed on production + +- All 21 sitemap URLs returned HTML with HTTP 200, their exact apex HTTPS canonical, and no observed `noindex` header/tag or browser challenge in the public HTTP crawl. This is an ordinary client observation, not proof of what verified Googlebot receives. +- HTTP homepage redirects to HTTPS with 301. HTTPS www serves the same content with the apex canonical; it does not redirect. No DNS or hosting rules were changed. A host-level www redirect can be considered separately, but the canonical is already declared consistently. +- Homepage Lighthouse lab scores were 100 for performance, accessibility, best practices, and SEO. LCP was approximately 0.8 seconds, CLS 0, and total blocking time 10 milliseconds. The final screenshot showed the actual homepage. See `search-lab-baseline.json` for version/time and measured values. These are one-page lab results, not field Core Web Vitals, site-wide accessibility certification, or proof of ranking eligibility. +- Hostinger serves stylesheets with a seven-day browser cache lifetime. During PR #3 deployment, a verification request saw an older stylesheet. The new template uses a content-hashed CSS filename; the old path remains available for previously cached HTML. +- GSC Wizard refused access because its trial/subscription is inactive. No purchase was made. Native Google Search Console is free, but indexed status, Google-selected canonicals, actual query demand, and field performance have not been verified through it in this audit. + +## Schema implementation + +| Surface | Markup and relationship | +|---|---| +| Shared identity | One consistent WebSite, editorial Organization, and Person identity; ARM Editorial is an editorial identity, not an invented independent board. | +| Mason Nguyen | Person name and About anchor, with the LinkedIn `sameAs` supplied by the owner. LinkedIn blocked automated fetching; no credentials or employment details were inferred. | +| Every generated route | One self-identifying WebPage or appropriate subtype, linked to the WebSite. About uses AboutPage; search uses SearchResultsPage and remains noindex. | +| Wiki and framework | Article + TechArticle linked both ways to their WebPage. Existing authorship, revision date, and visible citations are retained. The framework remains an attributed proposal. | +| News | NewsArticle with visible publication/revision dates, actual attribution and source citations. Event dates are not substituted for publication dates. | +| Breadcrumbs | BreadcrumbList is generated from the same sequence used in the visible breadcrumb, including current page. | +| Wiki, news, sources | CollectionPage with ItemList, matching actual visible members and order. No ranking or rating semantics. | +| Historical practice | Existing CollectionPage retained; obsolete `#arm-term` reference replaced with the current definition URL, and website identity made explicit. | + +No invented publication dates, logos, article images, reviews, ratings, certifications, qualifications, FAQs, or HowTo markup were added. Optional fields are omitted when the page does not substantiate them. Generated index pages omit sitemap lastmod rather than inheriting an unrelated article's freshness. Source articles retain their real revision dates. + +`npm run check` validates 22 generated pages for unique titles/descriptions, canonicals, sitemap eligibility, graph identity/reference integrity, visible article metadata, breadcrumbs, and collection links. Historical practice receives an additional identity check. `npm test` includes negative fixtures for invented author references, invisible breadcrumb labels, and false update dates. `node scripts/audit-production-search.mjs` performs the repeatable public HTTP crawl. Local reports are written under `test-results/`. + +These checks establish the repository's explicit contract; they do not replace Google's Rich Results Test or Search Console URL Inspection. Google may choose not to show rich results even for valid markup. An attempted Google Rich Results code test returned “Log in and try again”; no independent Google validation result was obtained. Source-only implementation is not evidence of live publication; verify the release manifest after merge. + +## AI search eligibility and next priorities + +Google states that AI Overviews and AI Mode use ordinary SEO foundations and require indexed, snippet-eligible pages; no special AI schema or new text file is required. Existing `llms.txt` is an optional reader aid, not a Google requirement or a citation guarantee. + +The useful next work is substantive content: answer distinct reader questions, cite primary evidence close to the claim, distinguish observed results from interpretation, and keep dates and authorship accurate. The priority map is in `search-topic-strategy.md`. Do not manufacture numerous near-duplicate pages to cover variants. + +The unverified external checks are actual indexed status/selected canonicals, real query/page performance, Google Rich Results Test outcomes, and field Core Web Vitals. Obtain authorized native Search Console reporting or exports without purchasing another connector. No Search Console submissions, analytics activation, hosting changes, or social posts were performed. + +## Official guidance consulted + +- [Google Search technical requirements](https://developers.google.com/search/docs/essentials/technical) +- [AI features and your website](https://developers.google.com/search/docs/appearance/ai-features) +- [General structured-data policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) +- [Article markup](https://developers.google.com/search/docs/appearance/structured-data/article) +- [Breadcrumb markup](https://developers.google.com/search/docs/appearance/structured-data/breadcrumb) +- [Site names](https://developers.google.com/search/docs/appearance/site-names) +- [Schema.org TechArticle](https://schema.org/TechArticle) diff --git a/editorial-policy/index.html b/editorial-policy/index.html index c56018e..81b5b05 100644 --- a/editorial-policy/index.html +++ b/editorial-policy/index.html @@ -1,7 +1,7 @@ -Editorial policy | Autonomous Resource Management +Editorial policy | Autonomous Resource Management
      -
      About this resource

      Editorial policy

      How this reference handles neutrality, sources, uncertainty, AI assistance, and corrections.

      Updated

      Purpose and scope

      Autonomous Resource Management is an editorially maintained knowledge resource about automated allocation, orchestration, infrastructure, and oversight. Coverage is selected for its relevance and evidence, not for its ability to refer readers to a commercial provider.

      +
      About this resource

      Editorial policy

      How this reference handles neutrality, sources, uncertainty, AI assistance, and corrections.

      Updated

      Purpose and scope

      Autonomous Resource Management is an editorially maintained knowledge resource about automated allocation, orchestration, infrastructure, and oversight. Coverage is selected for its relevance and evidence, not for its ability to refer readers to a commercial provider.

      Neutral point of view

      Describe what a source demonstrates and what remains uncertain. Attribute disputed claims. Give approaches attention proportional to their relevance and supporting evidence; neutrality does not require giving unsupported claims equal weight.

      Separate established technical concepts, the site's proposed framework, and dated industry developments. Examples and recommendations must be labeled as editorial guidance unless directly supported by cited evidence.

      Source standards

      Prefer original specifications, project documentation, public research, and official announcements for factual descriptions. An official announcement establishes what its publisher says; it does not independently validate performance or market leadership.

      diff --git a/framework/index.html b/framework/index.html index 09865b0..44f0597 100644 --- a/framework/index.html +++ b/framework/index.html @@ -1,7 +1,7 @@ -The ARM working framework | Autonomous Resource Management +The ARM working framework | Autonomous Resource Management
      -
      Editorial proposal

      The ARM working framework

      An attributed proposal for organizing decision rights, signals, recovery, escalation, and audit evidence.

      By Mason Nguyen; revision assisted by AI · Updated

      AI-assisted source synthesis; no independent expert review claimed.

      Status and authorship

      This working framework was developed by Mason Nguyen and is maintained here as an editorial proposal. It is not an industry standard, certification scheme, or independently validated assurance model. The reference library covers established concepts separately from this synthesis.

      +
      Editorial proposal

      The ARM working framework

      An attributed proposal for organizing decision rights, signals, recovery, escalation, and audit evidence.

      By Mason Nguyen; revision assisted by AI · Updated

      AI-assisted source synthesis; no independent expert review claimed.

      Status and authorship

      This working framework was developed by Mason Nguyen and is maintained here as an editorial proposal. It is not an industry standard, certification scheme, or independently validated assurance model. The reference library covers established concepts separately from this synthesis.

      Earlier versions of the homepage placed this framework at the center of the ARM definition. This revision gives it a dedicated location so readers can distinguish the proposal from the broader subject.

      Five design concerns

      Decision rights

      Identify the principal who grants authority, the permitted actions, and the limits of delegation. The proposal recommends explicit approval for actions outside the delegated scope.

      Observable signals

      Record the measurements and assumptions used in a decision. OpenTelemetry's signal vocabulary is relevant background for instrumentation, not an endorsement of this framework.

      diff --git a/index.html b/index.html index 5894240..fdd346c 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,8 @@ -Autonomous resource management: wiki and industry context | Autonomous Resource Management +Autonomous resource management: wiki and industry context | Autonomous Resource Management
      -
      The autonomous resource management reference

      Autonomous resource
      management, explained.

      A knowledge resource for how automated systems allocate resources—and how people keep those decisions accountable.

      +
      The autonomous resource management reference

      Autonomous resource
      management, explained.

      A knowledge resource for how automated systems allocate resources—and how people keep those decisions accountable.

      Explore by question

      The reference library

      All 8 reference articles →
      03 / Wiki reference

      Autoscaling and feedback loops

      How capacity follows demand, and why signals, limits, and recovery matter.

      Definition, context & limitations
      04 / Wiki reference

      FinOps and cost controls

      Relating resource consumption, budgets, and business outcomes without assuming automatic savings.

      Definition, context & limitations

      Industry context

      Browse source briefs →

      Dated developments, their implications, and what the evidence does not establish.

      diff --git a/news/finops-framework-2026/index.html b/news/finops-framework-2026/index.html index 128808c..17742c5 100644 --- a/news/finops-framework-2026/index.html +++ b/news/finops-framework-2026/index.html @@ -1,7 +1,7 @@ -FinOps Framework 2026 adds strategy alignment and broader technology guidance | Autonomous Resource Management +FinOps Framework 2026 adds strategy alignment and broader technology guidance | Autonomous Resource Management
      -
      Source brief

      FinOps Framework 2026 adds strategy alignment and broader technology guidance

      A background brief on the March framework revision and its relevance to resource-management objectives.

      By ARM Editorial · Updated
      Source event: 2026-03-19 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      The FinOps Foundation’s 19 March 2026 framework update introduced Executive Strategy Alignment as a capability and expanded guidance around scopes and technology categories. The announcement includes AI among the technology categories addressed.

      +
      Source brief

      FinOps Framework 2026 adds strategy alignment and broader technology guidance

      A background brief on the March framework revision and its relevance to resource-management objectives.

      By ARM Editorial · Updated
      Source event: 2026-03-19 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      The FinOps Foundation’s 19 March 2026 framework update introduced Executive Strategy Alignment as a capability and expanded guidance around scopes and technology categories. The announcement includes AI among the technology categories addressed.

      This brief covers that published revision as background, rather than presenting the March announcement as new today.

      Why it matters

      Editorial interpretation: an automated allocation policy needs an explicit business objective. Minimizing immediate spending, reducing waiting, and preserving capacity for experimentation can lead to different decisions. A cost controller needs to know which tradeoff its owner has authorized.

      Read FinOps and cost controls for the distinction between forecasts, alerts, resource quotas, and enforced spending limits. Human oversight explains why a budget boundary also needs an accountable owner.

      diff --git a/news/index.html b/news/index.html index e07d7c9..aeb57e5 100644 --- a/news/index.html +++ b/news/index.html @@ -1,5 +1,5 @@ -Industry news and source briefs | Autonomous Resource Management +Industry news and source briefs | Autonomous Resource Management
      Industry context

      Developments, in context.

      Source briefs connect industry changes to the reference library. Event dates and publication dates are shown separately; background coverage is not breaking news.

      Subscribe via RSS · Our news policy

      Source brief · source event 2026-10-14

      Headlamp guide separates Kueue admission from Pod scheduling

      An October 2026 project guide illustrates why a queued workload may wait before Pod placement begins.

      Published 2026-10-15 · AI-assisted source check; no independent testing or human expert review claimed.

      Source brief · source event 2026-05-07

      Kubernetes 1.36 expands Dynamic Resource Allocation

      A background brief on the DRA team’s May 2026 update, with adoption questions for resource operators.

      Published 2026-10-15 · AI-assisted source check; no independent testing or human expert review claimed.

      diff --git a/news/kubernetes-136-resource-allocation/index.html b/news/kubernetes-136-resource-allocation/index.html index 2bf6ebb..d4c248a 100644 --- a/news/kubernetes-136-resource-allocation/index.html +++ b/news/kubernetes-136-resource-allocation/index.html @@ -1,7 +1,7 @@ -Kubernetes 1.36 expands Dynamic Resource Allocation | Autonomous Resource Management +Kubernetes 1.36 expands Dynamic Resource Allocation | Autonomous Resource Management
      -
      Source brief

      Kubernetes 1.36 expands Dynamic Resource Allocation

      A background brief on the DRA team’s May 2026 update, with adoption questions for resource operators.

      By ARM Editorial · Updated
      Source event: 2026-05-07 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      In its 7 May 2026 update, the Kubernetes DRA team described changes to Dynamic Resource Allocation in version 1.36, including feature graduations, additional capabilities, and a broader driver ecosystem. The announcement discusses specialized hardware as well as work involving CPU and memory resources.

      +
      Source brief

      Kubernetes 1.36 expands Dynamic Resource Allocation

      A background brief on the DRA team’s May 2026 update, with adoption questions for resource operators.

      By ARM Editorial · Updated
      Source event: 2026-05-07 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      In its 7 May 2026 update, the Kubernetes DRA team described changes to Dynamic Resource Allocation in version 1.36, including feature graduations, additional capabilities, and a broader driver ecosystem. The announcement discusses specialized hardware as well as work involving CPU and memory resources.

      This is background coverage of that announcement, not a claim that version 1.36 is the latest Kubernetes release.

      Why it matters

      Editorial interpretation: resource operators should evaluate the exact allocation capability their workloads need, rather than treating “DRA support” as a single feature. Hardware requirements, drivers, and the maturity of individual capabilities affect what a deployment can use.

      A useful evaluation question is whether an allocation request expresses the actual constraints of the workload. See resource scheduling for the distinction between eligible capacity and preferred capacity.

      diff --git a/news/kueue-admission-headlamp/index.html b/news/kueue-admission-headlamp/index.html index 29c07a2..7dd436a 100644 --- a/news/kueue-admission-headlamp/index.html +++ b/news/kueue-admission-headlamp/index.html @@ -1,7 +1,7 @@ -Headlamp guide separates Kueue admission from Pod scheduling | Autonomous Resource Management +Headlamp guide separates Kueue admission from Pod scheduling | Autonomous Resource Management
      -
      Source brief

      Headlamp guide separates Kueue admission from Pod scheduling

      An October 2026 project guide illustrates why a queued workload may wait before Pod placement begins.

      By ARM Editorial · Updated
      Source event: 2026-10-14 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      A 14 October 2026 Kubernetes project guide describes investigating Kueue admission through Headlamp. It distinguishes the decision to admit a workload under queue policy and quota from the later placement of Pods on nodes.

      +
      Source brief

      Headlamp guide separates Kueue admission from Pod scheduling

      An October 2026 project guide illustrates why a queued workload may wait before Pod placement begins.

      By ARM Editorial · Updated
      Source event: 2026-10-14 · Brief published: 2026-10-15 · Source checked: 2026-10-15

      AI-assisted source check; no independent testing or human expert review claimed.

      What changed

      A 14 October 2026 Kubernetes project guide describes investigating Kueue admission through Headlamp. It distinguishes the decision to admit a workload under queue policy and quota from the later placement of Pods on nodes.

      The guide uses the Kueue plugin’s 0.1.0-alpha release. It describes read-only Kueue views, while noting that Headlamp’s standard resource actions remain subject to the user’s permissions.

      Why it matters

      Editorial interpretation: diagnosing a resource delay starts with locating the decision that is waiting. A workload that has not been admitted needs a different investigation from one whose Pods cannot find eligible nodes.

      This distinction can prevent an operator from treating every pending job as a shortage of physical capacity. See resource scheduling and observability for related concepts.

      diff --git a/package.json b/package.json index dcb55ab..6741f01 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,12 @@ "export": "npm run build && node scripts/export-static.mjs", "check:export": "node scripts/export-static.mjs --check", "test": "node --test tests/*.test.mjs && python3 -m unittest discover -s tests -p 'test_*.py'", - "check": "npm run build && node scripts/check.mjs && python3 scripts/audit-links.py", + "check": "npm run build && node scripts/check.mjs && python3 scripts/audit-links.py && python3 scripts/audit-search.py", "preview": "python3 -m http.server 4173 --bind 127.0.0.1 --directory dist", "news:collect": "python3 scripts/collect-news.py", "test:browser": "playwright test", - "check:links": "python3 scripts/audit-links.py" + "check:links": "python3 scripts/audit-links.py", + "check:search": "python3 scripts/audit-search.py" }, "dependencies": { "marked": "18.1.1" diff --git a/practice/index.html b/practice/index.html index b7ebeb3..6204a83 100644 --- a/practice/index.html +++ b/practice/index.html @@ -21,8 +21,8 @@ "url":"https://autonomousresourcemanagement.com/practice/", "name":"Virtualmase Public Practice", "description":"Source-linked records showing how Virtualmase applies Autonomous Resource Management to public work.", - "isPartOf":{"@id":"https://autonomousresourcemanagement.com/#website"}, - "about":{"@id":"https://autonomousresourcemanagement.com/#arm-term"}, + "isPartOf":{"@type":"WebSite","@id":"https://autonomousresourcemanagement.com/#website","name":"Autonomous Resource Management","url":"https://autonomousresourcemanagement.com/"}, + "about":{"@type":"Thing","name":"Autonomous resource management","url":"https://autonomousresourcemanagement.com/wiki/autonomous-resource-management/"}, "inLanguage":"en" } diff --git a/release.json b/release.json index de1c913..076b563 100644 --- a/release.json +++ b/release.json @@ -1,27 +1,28 @@ { "schemaVersion": 1, - "contentDigest": "67879587df5fbff6914678cd0624801cdd9cb91d654bf12d9fb83a782ea8839a", + "contentDigest": "4d25112ee8eb3ab7fb58dd10bd0007748ee03ccce2936965be2799959e9e4348", "contentRevision": "2026-10-15", "pages": 22, "files": { ".htaccess": "98ffdb0e30a0a6e638a18e154181e33bfb133ff38d4d977485cd988915a2d816", - "404.html": "4eefc29e83eb4e2814b5ea64743e115a467d9a9edbb3322f1dabeff8b5bd70bc", - "404/index.html": "4eefc29e83eb4e2814b5ea64743e115a467d9a9edbb3322f1dabeff8b5bd70bc", - "about/index.html": "7b1846fa4b4ac0821e08e4dffef4a4632f391174c73ccbc331234e9d55ec7205", - "changelog/index.html": "f8dcec5086a0d0602d95f47a4b200557ddb147cdab39ef983855860c425dd241", - "contribute/index.html": "1de04f9653297a6b697554136f4bb9d22da0af15886e23de512c51081a2831af", - "editorial-policy/index.html": "79cb2bc2fa9ea14628e6bd6f31578521ece7785ab181dca92d3b15e198c8f08b", + "404.html": "fb0c972bb5dd9d928ccd1d26b5f693813064c82fa9c10336e925032e860b0977", + "404/index.html": "fb0c972bb5dd9d928ccd1d26b5f693813064c82fa9c10336e925032e860b0977", + "about/index.html": "4d7dfefbd7ad85ef9bcdaff8e566b97b04838bbc8c538ec8954b10f4ad9b8268", + "assets/site.8cf93ced94e9.css": "8cf93ced94e9ff4f3c6b4396437b33ccb79b6cc46de643f358b38610c012a02f", + "changelog/index.html": "9f0e14bdd4dc36d295b146dbfa0c72ddc54ba312841174ee92e84082b9094bea", + "contribute/index.html": "adfd2fe2b3b3aba46cfc05c827d68d43c0901dcd8dc2955b346718ce6774751c", + "editorial-policy/index.html": "6b62dc1d58102c41e5a1d8616079c2f0b6c6bf269e555a8476d9df100f647e54", "favicon.svg": "3766c9e6c1326cb25b003f88369e29907a8660883228c13ab470e306ed4df91e", "feed.xml": "979325d4616849c8c5bd7d386e98414fdf7d07bfc8aca49e566d945503d14419", - "framework/index.html": "a8a6d7bc00877d3ba0ac6479e3d549ce89308eca9547c9c957cf22f1a9f4090f", + "framework/index.html": "a1dbba63bc906278256f162adcc1773564082f9f1bab62118ec5d9f5dc533cf3", "googlef40b1c9053cf9205.html": "a2afae8978371b939c5ac9e680468c14f119e38a6478ee92d867d510e39f54d4", - "index.html": "3296bf6df1796c3d04f2a8c3d7a251f32e9fef7bbbf65fff3e13b83ccbaec5cc", + "index.html": "9ec7c4514baa4cbc225f46e1bbc7bf898e1d892480d00210cbdf749d8bfe7663", "llms.txt": "3954c4e791dff83fbce9e7d596a7513f886547477605f3b28c66022e53975309", - "news/finops-framework-2026/index.html": "27e7548898359d33f17a4d5561c607281776115b2f691708d6132314abde03fa", - "news/index.html": "8fe3c9ac842cb6240f1984a42be140a2108f722418ee57974ce289ab1f5aa1da", - "news/kubernetes-136-resource-allocation/index.html": "6fccae9e419c35044ceb80d74c077a3af1e26a4ca611ef79608a3f3c54a14b5f", - "news/kueue-admission-headlamp/index.html": "9422e8d79fd2c8de78ed2353b735eb1f31a333f28c16baee82fb6e3b3e50f603", - "practice/index.html": "1c6bf5eb8c2b01f88616c5eab5dff566ed791a5f30f624a43832e65791379ff5", + "news/finops-framework-2026/index.html": "26e61fc2ca947541e1ca16b6d9d085422310774c1cd0316e492c3fdb33f198bc", + "news/index.html": "8d437474ad5f13af2234fa4847c9510926e9a76975dbf3c988a5fe242654ee0a", + "news/kubernetes-136-resource-allocation/index.html": "a3bc0ef3b71308ac139477856e601c4c2fde838e11c45998cdffa50842fcc0ad", + "news/kueue-admission-headlamp/index.html": "af46677dde939c1364c729c2b070b223e9a63c0029666ba55397b18f5a16925e", + "practice/index.html": "f0959768aea011b30f8bffa508d2e799a743ab4389676187961a6afb0239fc43", "practice/records/BLD-001-flagship-package.yml": "e4e032c1951df0542acfd69a0a0f20d39e6a7c8b04cfa5279bd5e1d01b6b8f66", "practice/records/CON-001-learning-pathway.yml": "527cbe273a0656d153e9587f13692375318f6bf7ec7ef405acae5014cd817e48", "practice/records/GRW-001-discovery-readiness.yml": "24ff609d9ed0b7498ff05b06ffe6d2fd098ea36df5885b3c08a3381aadd690e5", @@ -32,21 +33,21 @@ "practice/style.css": "a44dc63490166bbaecbea17d4a33044fde534f6f20c760932153be17f363b26f", "resource-loop.svg": "24516aee93835dda1a98fe0a3d1d44c7366ddbfa87f67141ceba71eb4a674d4f", "robots.txt": "93e1d051721cccb2203533406be637394f7dcbdadcafd3b9a09d5e4a23db9605", - "schema.json": "d16586e533eebfcb8c9bf76e88ea0924836055d6c616882c72df0a26d31fa107", + "schema.json": "7ffc3703de1fecdb02a58e7cd9ba262fbf874bac584d573787545d64c214c1a2", "search-index.json": "d26727da23abd8f0b6fdf97888e0046225a3947ccb518a91d3fb5076caf38495", "search.js": "78ae43ce810bd4b6c1b5dc0d052e61f2f6b8e003114c47770e2d4e4302d48d83", - "search/index.html": "29760aaaf3eb6d8ae311550de5b4d6496aeb200c9352feffaaf270476b669bf4", + "search/index.html": "b111217bb9cd90161c23b9dabf62b785de7d78b734f201e352d6a9454a9b9f63", "site.css": "8cf93ced94e9ff4f3c6b4396437b33ccb79b6cc46de643f358b38610c012a02f", - "sitemap.xml": "7f07faaee013bae886666a3c4bf29b984829ca22a7d75a23c15ed846173b3a1a", - "sources/index.html": "d496faf341e6ec0864420b066e9657b57388f13ea62d00eeb7b0fa0a9e40c892", - "wiki/agent-orchestration/index.html": "3622e83f94f583fc1f1246531e13151e7697b35aa820677a7987ace77b1541d7", - "wiki/audit-trails/index.html": "615d5f569b819d9492e431c76f84c19156e25853a94504b99f4a043fe2a93b8f", - "wiki/autonomous-resource-management/index.html": "becd25e97d3bd0d3dd267b940f75af9f70df1cdd971450c895598769f61e29f7", - "wiki/autoscaling/index.html": "210c9b4b07f0d5162f54bcc73e8e43cac9928fe4c77060876d3d331fa27c8b36", - "wiki/finops-and-cost-controls/index.html": "6931b5380c4566c87185c61f654aa7d3e7b8ec237470341e09ee379862ed6245", - "wiki/human-oversight/index.html": "40c836acdaac782397658603e3145bcca45be74fa49a1cb7bb5dc000c75c9f19", - "wiki/index.html": "795e79014eeee71c6910e4929afb671bfb70b4b146dcd8af44a7c44033c05e29", - "wiki/observability/index.html": "36a74c703b70949b51ac685e65c4a625ac3012469b2a15a7dc9c3ba48a5ad3b5", - "wiki/resource-scheduling/index.html": "8bf77ce751be6b7e1c5c3b0b5dbdadb737f1005983c790bb46d1c3e9e774155c" + "sitemap.xml": "d068756ce1dc6e190c845fd121c86b4fdf86c7e8a66abff84c429c200d9b78c9", + "sources/index.html": "1a07c2305e202320dcd71b1c96a353a6d8bef65291e2f3c5caf94ac6b22a7931", + "wiki/agent-orchestration/index.html": "5c3d2ca287e13e6d6ac9660e4c91d77e5d6830105019be5800db608454babdcd", + "wiki/audit-trails/index.html": "4ed21dc496a86971ec21bbba98123c26d1d5ea8eac1f81e9f9c788306613b3bb", + "wiki/autonomous-resource-management/index.html": "1be439d0e1a922478e7dc0a48e94d1bcd46a3148355f57fa6833a42eb4bd851e", + "wiki/autoscaling/index.html": "4e15729609469a916ef5c625da1265105e3a06083d8e8f7c271115b0f67aa98b", + "wiki/finops-and-cost-controls/index.html": "e6e8c57bd884b1d18f1ede53f08e756a88a89abaa5e0c66865b09a67e3cb2f45", + "wiki/human-oversight/index.html": "4dcb64c2142f39180d9a77dc9cae18b5710c536f99297522ea5fa4c53fd8fd7f", + "wiki/index.html": "0f975150940d42c523530cd9382d04b36707f340ea430003dcf937e4d9e3ab0b", + "wiki/observability/index.html": "d4a32b3057c1caebfd4036dcc1660f1f95ca1352331659ed6cdc3ae73d65c568", + "wiki/resource-scheduling/index.html": "af1931df7dda2b2d28309160e12e533d49e5c028ff2ea7a4ae83303a2a368241" } } diff --git a/schema.json b/schema.json index deafd68..91bd6a6 100644 --- a/schema.json +++ b/schema.json @@ -6,6 +6,7 @@ "@id": "https://autonomousresourcemanagement.com/#website", "url": "https://autonomousresourcemanagement.com/", "name": "Autonomous Resource Management", + "inLanguage": "en", "description": "A source-backed reference on automated resource allocation, orchestration, infrastructure, and human oversight.", "publisher": { "@id": "https://autonomousresourcemanagement.com/#publisher" @@ -15,14 +16,18 @@ "@type": "Organization", "@id": "https://autonomousresourcemanagement.com/#publisher", "name": "Autonomous Resource Management Editorial", + "alternateName": "ARM Editorial", "url": "https://autonomousresourcemanagement.com/about/", "description": "Editorial identity of this reference, maintained by Mason Nguyen." }, { "@type": "Person", - "@id": "https://autonomousresourcemanagement.com/about/#maintainer", + "@id": "https://autonomousresourcemanagement.com/about/#maintainer-and-authorship", "name": "Mason Nguyen", - "url": "https://autonomousresourcemanagement.com/about/" + "url": "https://autonomousresourcemanagement.com/about/#maintainer-and-authorship", + "sameAs": [ + "https://www.linkedin.com/in/mason-nguyen" + ] } ] } diff --git a/scripts/audit-production-search.mjs b/scripts/audit-production-search.mjs new file mode 100644 index 0000000..4992cd4 --- /dev/null +++ b/scripts/audit-production-search.mjs @@ -0,0 +1,36 @@ +import fs from 'node:fs'; +import {origin} from './content.mjs'; +const report={origin,checked:new Date().toISOString(),pages:[],errors:[]}; +const sitemapResponse=await fetch(origin+'/sitemap.xml',{signal:AbortSignal.timeout(20000)}); +if(!sitemapResponse.ok)throw Error(`Sitemap returned ${sitemapResponse.status}`); +const sitemap=await sitemapResponse.text(); +const urls=[...sitemap.matchAll(/(.*?)<\/loc>/g)].map(m=>m[1]); +if(!urls.length)throw Error('Empty sitemap'); +for(let start=0;start{ + try{ + if(new URL(url).origin!==origin)throw Error('Unexpected sitemap origin'); + const response=await fetch(url,{signal:AbortSignal.timeout(20000),cache:'no-store'}); + const html=await response.text(); + const canonicalTag=[...html.matchAll(/]*>/gi)].map(m=>m[0]).find(tag=>/\brel=["']canonical["']/i.test(tag)); + const canonical=canonicalTag?.match(/\bhref=["']([^"']+)["']/i)?.[1]; + const contentType=response.headers.get('content-type')||''; + const robots=response.headers.get('x-robots-tag')||''; + const errors=[]; + if(response.status!==200)errors.push(`HTTP ${response.status}`); + if(response.url!==url)errors.push('Sitemap URL redirects'); + if(!contentType.includes('text/html'))errors.push('Non-HTML content type'); + if(canonical!==url)errors.push('Missing/mismatched canonical'); + if(/noindex|none/i.test(robots)||/]*name="robots"[^>]*content="[^"]*noindex/.test(html))errors.push('Indexing restricted'); + if(/Checking your browser before accessing/.test(html))errors.push('Browser challenge instead of article'); + if(!/]/.test(html))errors.push('Missing visible heading'); + return {url,status:response.status,canonical,errors}; + }catch(error){return {url,errors:[error.message]};} + })); + report.pages.push(...batch); +} +report.errors=report.pages.flatMap(p=>p.errors.map(e=>`${p.url}: ${e}`)); +fs.mkdirSync('test-results',{recursive:true}); +fs.writeFileSync('test-results/production-search-audit.json',JSON.stringify(report,null,2)+'\n'); +if(report.errors.length){console.error(report.errors.join('\n'));process.exitCode=1;} +else console.log(`Public HTTP crawl: ${urls.length} sitemap pages return HTML 200 with matching canonicals and no observed index restrictions/challenges. This does not prove Google indexing.`); diff --git a/scripts/audit-search.py b/scripts/audit-search.py new file mode 100644 index 0000000..2616f10 --- /dev/null +++ b/scripts/audit-search.py @@ -0,0 +1,106 @@ +"""Rendered metadata/schema consistency checks, not a Google rich-result certification.""" +from pathlib import Path +from html import unescape +import json +import re +import xml.etree.ElementTree as ET + +ORIGIN='https://autonomousresourcemanagement.com' + +def text(value): + return ' '.join(unescape(re.sub(r'<[^>]+>', '', value)).split()) + +def links(html): + return [(unescape(url),text(label)) for url,label in re.findall(r']*href="([^"]+)"[^>]*>(.*?)',html,re.S)] + +def audit(root): + errors=[] + def require(condition,message): + if not condition: errors.append(message) + sitemap=ET.parse(root/'sitemap.xml') + locs=[n.text for n in sitemap.findall('.//{*}loc')] + require(len(locs)==len(set(locs)), 'Duplicate sitemap URLs') + titles,descriptions=set(),set() + count=0 + for file in sorted(root.rglob('index.html')): + if file.relative_to(root).parts[0]=='practice': continue # separately maintained historical record + count+=1 + route='/'+file.relative_to(root).as_posix().removesuffix('index.html') + html=file.read_text() + title=text(re.search(r'(.*?)',html,re.S)[1]) + description=unescape(re.search(r'' in html,f'{route}: missing language/viewport') + indexable='noindex,follow' not in html + require((canonical in locs)==indexable,f'{route}: sitemap/indexability mismatch') + require('nosnippet' not in html and 'data-nosnippet' not in html,f'{route}: unexpected snippet restriction') + graph=json.loads(re.search(r'',html,re.S)[1]) + require(graph.get('@context')=='https://schema.org',f'{route}: context') + nodes=graph['@graph']; ids=[n.get('@id') for n in nodes] + require(len(ids)==len(set(ids)),f'{route}: duplicate graph identity') + indexed={n['@id']:n for n in nodes} + page=indexed.get(canonical+'#webpage',{}) + require(page.get('url')==canonical and page.get('name')==title.removesuffix(' | Autonomous Resource Management'),f'{route}: WebPage identity/title mismatch') + require(page.get('description')==description,f'{route}: WebPage description mismatch') + def visit(value): + if isinstance(value,list): + for item in value: visit(item) + elif isinstance(value,dict): + if set(value)=={'@id'}: + require(value['@id'] in indexed,f'{route}: unresolved graph reference {value["@id"]}') + for item in value.values(): visit(item) + visit(nodes) + for node in nodes: + types=node['@type'] if isinstance(node['@type'],list) else [node['@type']] + require(not set(types)&{'Review','AggregateRating','Product','FAQPage','HowTo'},f'{route}: unsupported rich-result claim') + if set(types)&{'Article','TechArticle','NewsArticle'}: + heading=text(re.search(r']*>(.*?)',html,re.S)[1]) + require(node.get('headline')==heading,f'{route}: headline differs from visible heading') + require(node.get('mainEntityOfPage',{}).get('@id')==page.get('@id'),f'{route}: article/page mismatch') + require(page.get('mainEntity',{}).get('@id')==node['@id'],f'{route}: missing reverse article relationship') + require(f'datetime="{node.get("dateModified")}"' in html,f'{route}: modification date differs from visible date') + if 'datePublished' in node: + require('Brief published: '+node['datePublished'] in html,f'{route}: publication date differs from visible date') + require(node['datePublished']<=node['dateModified'],f'{route}: publication after modification') + source_block=re.search(r'
        (.*?)
      ',html,re.S) + visible_sources=links(source_block[1]) if source_block else [] + require([(s['url'],s['name']) for s in node.get('citation',[])]==visible_sources,f'{route}: citations differ from visible source links') + author=indexed.get(node.get('author',{}).get('@id'),{}) + require(author.get('@type') in ['Person','Organization'],f'{route}: invalid author') + byline=re.search(r'

      By ]*>(.*?)',html,re.S) + require(byline is not None and text(byline[1])==author.get('alternateName',author.get('name')),f'{route}: author differs from visible byline') + if 'BreadcrumbList' in types: + block=re.search(r'

      ',html,re.S) + require(block is not None,f'{route}: breadcrumb absent from page') + if block: + visible=[(unescape(m[0]),text(m[1])) if m[0] else (route,text(m[2])) for m in re.findall(r'(.*?)|(.*?)',block[1])] + actual=[(n['item'].removeprefix(ORIGIN),n['name']) for n in node['itemListElement']] + require(actual==visible,f'{route}: breadcrumb differs from visible trail') + require([n['position'] for n in node['itemListElement']]==list(range(1,len(visible)+1)),f'{route}: breadcrumb positions') + if 'ItemList' in types: + items=node['itemListElement'] + require(node.get('numberOfItems')==len(items),f'{route}: collection count') + require(len({n['url'] for n in items})==len(items),f'{route}: duplicate collection item') + body=html.split('',1)[0] + expected=[(item['url'].removeprefix(ORIGIN),item['name']) for item in items] + visible=list(dict.fromkeys(pair for pair in links(body) if pair in expected)) + require(visible==expected,f'{route}: collection URL/name pairs or order differ from visible links') + historical=root/'practice/index.html' + if historical.exists(): + raw=historical.read_text() + record=json.loads(re.search(r'',raw,re.S)[1]) + require(record.get('@type')=='CollectionPage' and record.get('url')==ORIGIN+'/practice/','Historical practice: page identity mismatch') + require(record.get('about',{}).get('url')==ORIGIN+'/wiki/autonomous-resource-management/','Historical practice: stale term relationship') + require(record.get('isPartOf',{}).get('url')==ORIGIN+'/','Historical practice: website relationship') + require('Sitemap: '+ORIGIN+'/sitemap.xml' in (root/'robots.txt').read_text(),'robots sitemap missing') + return {'generatedPages':count,'errors':errors} + +if __name__=='__main__': + result=audit(Path('dist')) + Path('test-results').mkdir(exist_ok=True) + Path('test-results/search-audit.json').write_text(json.dumps(result,indent=2)+'\n') + if result['errors']: raise SystemExit('\n'.join(result['errors'])) + print(f"Search/schema audit: {result['generatedPages']} generated pages; unique metadata, sitemap parity, connected identities, visible article dates/citations, breadcrumbs and collections verified.") diff --git a/scripts/build.mjs b/scripts/build.mjs index 4211996..b55ed9a 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -4,64 +4,65 @@ import crypto from 'node:crypto'; import { readContent, renderMarkdown, origin, repo, escape as e } from './content.mjs'; import { loadTopics } from './topics.mjs'; +import {schemaBase, maintainerProfile, articleSchema, breadcrumbSchema, collectionSchema, pageGraph} from './schema.mjs'; const all=readContent(), articles=all.filter(a=>a.status==='published'); const wiki=articles.filter(a=>a.kind==='wiki'); const news=articles.filter(a=>a.kind==='news').sort((a,b)=>b.published.localeCompare(a.published)||b.eventDate.localeCompare(a.eventDate)); -const maintainerProfile='https://www.linkedin.com/in/mason-nguyen'; const topics=loadTopics(articles); const topicFor=a=>topics.find(t=>t.entries.some(entry=>entry.path===a.path)); const topicLinks=()=>topics.map(t=>`
    • ${e(t.title)}

      ${e(t.question)}

    • `).join(''); const revision=articles.map(a=>a.updated).sort().at(-1); const routes=new Map(); -const schemaBase=[ - {'@type':'WebSite','@id':`${origin}/#website`,url:origin+'/',name:'Autonomous Resource Management',description:'A source-backed reference on automated resource allocation, orchestration, infrastructure, and human oversight.',publisher:{'@id':`${origin}/#publisher`}}, - {'@type':'Organization','@id':`${origin}/#publisher`,name:'Autonomous Resource Management Editorial',url:origin+'/about/',description:'Editorial identity of this reference, maintained by Mason Nguyen.'}, - {'@type':'Person','@id':`${origin}/about/#maintainer`,name:'Mason Nguyen',url:origin+'/about/'} -]; +const stylesheet=`assets/site.${crypto.createHash("sha256").update(fs.readFileSync("public/site.css")).digest("hex").slice(0,12)}.css`; const nav=[['/wiki/','Wiki'],['/news/','News'],['/framework/','Framework'],['/sources/','Sources'],['/search/','Search']]; -function shell(title,description,route,body,{schema=[],noindex=false,search=false}={}) { - const graph={'@context':'https://schema.org','@graph':[...schemaBase,...schema]}; +function shell(title,description,route,body,{schema=[],noindex=false,search=false,updated}={}) { + const graph=pageGraph({title,description,route,schema,updated}); return ` -${e(title)} | Autonomous Resource Management${search?'':''} +${e(title)} | Autonomous Resource Management${search?'':''}
      ${body}
      \n`; } function add(route,title,description,body,options={}) { if(routes.has(route))throw Error(`Duplicate route ${route}`); - routes.set(route,{html:shell(title,description,route,body,options),updated:options.updated||revision,noindex:options.noindex}); + routes.set(route,{html:shell(title,description,route,body,options),updated:options.updated,noindex:options.noindex}); } const label=a=>a.kind==='news'?'Source brief':a.kind==='framework'?'Editorial proposal':a.kind==='wiki'?'Wiki reference':'About this resource'; function card(a,i) {return `
      ${String(i+1).padStart(2,'0')} / ${e(label(a))}

      ${e(a.title)}

      ${e(a.description)}

      ${a.kind==='news'?`Source event: ${a.eventDate} · Brief: ${a.published}`:'Definition, context & limitations'}
      `;} add('/','Autonomous resource management: wiki and industry context','Explore source-backed explanations of autonomous resource management, resource allocation, orchestration, cost controls, and oversight.',` -
      The autonomous resource management reference

      Autonomous resource
      management, explained.

      A knowledge resource for how automated systems allocate resources—and how people keep those decisions accountable.

      +
      The autonomous resource management reference

      Autonomous resource
      management, explained.

      A knowledge resource for how automated systems allocate resources—and how people keep those decisions accountable.

      Explore by question

        ${topicLinks()}
      ${wiki.filter(a=>a.path!='/wiki/autonomous-resource-management/').slice(0,6).map(card).join('')}

      Industry context

      Browse source briefs →

      Dated developments, their implications, and what the evidence does not establish.

      ${news.map(card).join('')}
      From concepts to questions

      What can this system decide?

      Start with the action, its limits, the evidence behind it, and who can intervene. The ARM working framework offers one attributed proposal for organizing those questions.

      Read the working framework →
      An inspectable reference

      Follow the source.

      Articles identify their evidence, distinguish examples from findings, and link to revision history. Corrections and additional perspectives are welcome.

      Improve this resource →
      -

      Looking for a section from the earlier reference?

      Definition · Five design concerns · Related disciplines · Signal architecture · Framework scope · Practical concepts · References

      `,{schema:[{'@type':'WebPage','@id':origin+'/#webpage',url:origin+'/',name:'Autonomous Resource Management',isPartOf:{'@id':origin+'/#website'}}]}); +

      Looking for a section from the earlier reference?

      Definition · Five design concerns · Related disciplines · Signal architecture · Framework scope · Practical concepts · References

      `); for(const a of articles){ const {html,headings}=renderMarkdown(a.body); - const schema=[{'@type':a.kind==='news'?'NewsArticle':a.kind==='page'?'WebPage':'TechArticle','@id':origin+a.path+'#article',url:origin+a.path,headline:a.title,description:a.description,dateModified:a.updated,...(a.published?{datePublished:a.published}:{}),author:a.author.startsWith('Mason')?{'@id':origin+'/about/#maintainer'}:{'@id':origin+'/#publisher'},publisher:{'@id':origin+'/#publisher'},isPartOf:{'@id':origin+'/#website'},citation:(a.sources||[]).map(s=>({'@type':'CreativeWork',name:s.title,url:s.url}))}]; + const schema=articleSchema(a); const byline=a.author.startsWith('Mason')?`By Mason Nguyen${e(a.author.slice("Mason Nguyen".length))}`:`By ${e(a.author)}`; const topic=topicFor(a); const parent=a.kind==='wiki'?['/wiki/','Wiki']:a.kind==='news'?['/news/','News']:null; - const breadcrumb=``; + const crumbs=[['/','Home'],...(parent?[parent]:[]),...(topic?[[`/wiki/#${topic.id}`,topic.title]]:[]),[a.path,a.title]]; + schema.push(breadcrumbSchema(a.path,crumbs)); + const breadcrumb=``; const relatedNews=news.filter(n=>n.concepts.includes(a.path)).slice(0,3); const continuation=a.kind==='wiki'?`

      Continue reading

      Explore ${e(topic.title.toLowerCase())}: ${e(topic.question)}

      ${a.path!='/wiki/autonomous-resource-management/'?'

      For the wider context, read what autonomous resource management means.

      ':''}${relatedNews.length?`

      Related source briefs

      Dated project developments; these do not independently validate the concepts above.

        ${relatedNews.map(n=>`
      • ${e(n.title)}
        Source event: ${n.eventDate}
      • `).join('')}
      `:''}
      `:''; const sources=(a.sources||[]).length?`

      Sources and scope

        ${a.sources.map(s=>`
      1. ${e(s.title)}${e(s.scope)}
      2. `).join('')}
      `:''; - add(a.path,a.title,a.description,`
      ${breadcrumb}${label(a)}

      ${e(a.title)}

      ${e(a.description)}

      ${a.kind==='page'?'':byline+' · '}Updated ${a.kind==='news'?`
      Source event: ${a.eventDate} · Brief published: ${a.published} · Source checked: ${a.checked}`:''}

      ${a.kind!=='page'?`

      ${e(a.review)}

      `:''}
      `,{schema,updated:a.updated}); + add(a.path,a.title,a.description,`
      ${breadcrumb}${label(a)}

      ${e(a.title)}

      ${e(a.description)}

      ${a.kind==='page'?'':byline+' · '}Updated ${a.kind==='news'?`
      Source event: ${a.eventDate} · Brief published: ${a.published} · Source checked: ${a.checked}`:''}

      ${a.kind!=='page'?`

      ${e(a.review)}

      `:''}
      `,{schema,updated:a.updated}); } -add('/wiki/','Reference library','Browse foundational concepts in autonomous resource management.',`
      Wiki / ${wiki.length} articles

      The reference library

      Concepts, practical questions, and boundaries. Start with an overview, then follow the decisions that matter to your system.

      What is autonomous resource management? →
      ${topics.map(t=>`
      ${e(t.question)}

      ${e(t.title)}

      ${e(t.description)}

      ${t.entries.map(card).join('')}
      `).join('')}`); -add('/news/','Industry news and source briefs','Dated developments in resource management, with source attribution and evidence limits.',`
      Industry context

      Developments, in context.

      Source briefs connect industry changes to the reference library. Event dates and publication dates are shown separately; background coverage is not breaking news.

      Subscribe via RSS · Our news policy

      ${news.length?news.map(a=>`
      Source brief · source event ${a.eventDate}

      ${e(a.title)}

      ${e(a.description)}

      Published ${a.published} · ${e(a.review)}

      `).join(''):'

      The first source briefs are in preparation. Browse the wiki for established concepts.

      '}`); +add('/wiki/','Reference library','Browse foundational concepts in autonomous resource management.',`
      Wiki / ${wiki.length} articles

      The reference library

      Concepts, practical questions, and boundaries. Start with an overview, then follow the decisions that matter to your system.

      What is autonomous resource management? →
      ${topics.map(t=>`
      ${e(t.question)}

      ${e(t.title)}

      ${e(t.description)}

      ${t.entries.map(card).join('')}
      `).join('')}`,{schema:[collectionSchema('/wiki/',topics.flatMap(t=>t.entries))]}); +add('/news/','Industry news and source briefs','Dated developments in resource management, with source attribution and evidence limits.',`
      Industry context

      Developments, in context.

      Source briefs connect industry changes to the reference library. Event dates and publication dates are shown separately; background coverage is not breaking news.

      Subscribe via RSS · Our news policy

      ${news.length?news.map(a=>`
      Source brief · source event ${a.eventDate}

      ${e(a.title)}

      ${e(a.description)}

      Published ${a.published} · ${e(a.review)}

      `).join(''):'

      The first source briefs are in preparation. Browse the wiki for established concepts.

      '}`,{schema:[collectionSchema('/news/',news)]}); const sources=[...new Map(articles.flatMap(a=>a.sources||[]).map(s=>[s.url,s])).values()]; -add('/sources/','Sources and evidence','The primary documentation and announcements cited by this reference.',`
      Evidence directory

      Start with the source.

      Documentation supports descriptions of a system. Announcements establish what a publisher reports. Neither alone proves performance in your environment.

      Source selection

      These are cited sources, not endorsements or an exhaustive industry list. The initial library emphasizes infrastructure documentation. Broader research and independently evaluated case studies are an editorial priority.

        ${sources.map(s=>`
      1. ${e(s.title)}${e(s.scope)}

        Used in: ${articles.filter(a=>(a.sources||[]).some(source=>source.url===s.url)).map(a=>`${e(a.title)}`).join('; ')}.

      2. `).join('')}

      Suggest additional evidence

      We welcome relevant research, alternative approaches, and reproducible failure reports. Propose a source with the claim it supports or challenges.

      `); +add('/sources/','Sources and evidence','The primary documentation and announcements cited by this reference.',`
      Evidence directory

      Start with the source.

      Documentation supports descriptions of a system. Announcements establish what a publisher reports. Neither alone proves performance in your environment.

      Source selection

      These are cited sources, not endorsements or an exhaustive industry list. The initial library emphasizes infrastructure documentation. Broader research and independently evaluated case studies are an editorial priority.

        ${sources.map(s=>`
      1. ${e(s.title)}${e(s.scope)}

        Used in: ${articles.filter(a=>(a.sources||[]).some(source=>source.url===s.url)).map(a=>`${e(a.title)}`).join('; ')}.

      2. `).join('')}

      Suggest additional evidence

      We welcome relevant research, alternative approaches, and reproducible failure reports. Propose a source with the claim it supports or challenges.

      `,{schema:[collectionSchema('/sources/',sources)]}); add('/search/','Search the reference','Find concepts and source briefs in the ARM reference.',`
      Find a concept

      Search the reference

        `,{search:true,noindex:true}); add('/404/','Page not found','Find the reference page you need.',`
        404 / Page not found

        Let’s find the right page.

        This address is not part of the current reference.

        `,{noindex:true}); // Output is an explicit publishing boundary; archives and subdomain content never enter it. fs.rmSync('dist',{recursive:true,force:true});fs.mkdirSync('dist'); fs.cpSync('public','dist',{recursive:true}); +// Version the active stylesheet so a cached previous release cannot style new HTML. +fs.mkdirSync('dist/assets',{recursive:true}); +fs.copyFileSync('public/site.css',path.join('dist',stylesheet)); // Preserve existing historical work records without treating them as neutral industry evidence. fs.cpSync('practice','dist/practice',{recursive:true,filter:src=>!src.endsWith('.mjs')&&!src.endsWith('.md')}); for(const [route,page] of routes){const file=path.join('dist',route==='/'?'index.html':route.slice(1)+'index.html');fs.mkdirSync(path.dirname(file),{recursive:true});fs.writeFileSync(file,page.html);} @@ -69,7 +70,7 @@ fs.copyFileSync('dist/404/index.html','dist/404.html'); fs.copyFileSync('googlef40b1c9053cf9205.html','dist/googlef40b1c9053cf9205.html'); fs.writeFileSync('dist/.htaccess','ErrorDocument 404 /404.html\n'); fs.writeFileSync('dist/robots.txt',`User-agent: *\nAllow: /\nDisallow: /coreweaver-labs/\nDisallow: /aure/\n\nSitemap: ${origin}/sitemap.xml\n`); -fs.writeFileSync('dist/sitemap.xml',`\n${[...routes].filter(([,p])=>!p.noindex).map(([r,p])=>`${origin}${r}${p.updated}`).join('')}${origin}/practice/2026-08-27\n`); +fs.writeFileSync('dist/sitemap.xml',`\n${[...routes].filter(([,p])=>!p.noindex).map(([r,p])=>`${origin}${r}${p.updated?`${p.updated}`:''}`).join('')}${origin}/practice/2026-08-27\n`); fs.writeFileSync('dist/schema.json',JSON.stringify({'@context':'https://schema.org','@graph':schemaBase},null,2)+'\n'); fs.writeFileSync('dist/search-index.json',JSON.stringify(articles.map(a=>({title:a.title,description:a.description,path:a.path,text:a.body.replace(/https:\/\/[^\s)]+/g,'').replace(/[#*_`]/g,'')})))); fs.writeFileSync('dist/llms.txt',`# Autonomous Resource Management\n\n> A source-backed reference on automated resource allocation, orchestration, infrastructure, and oversight.\n\nMaintainer: Mason Nguyen. ARM Editorial is the site's editorial identity, not an independent board. Initial articles disclose AI assistance.\n\n## Reference\n${wiki.map(a=>`- [${a.title}](${origin}${a.path}): ${a.description}`).join('\n')}\n\n## Editorial context\n- [Working framework](${origin}/framework/): An attributed editorial proposal, not a formal standard.\n- [News](${origin}/news/): Source briefs with separate event and publication dates.\n- [Editorial policy](${origin}/editorial-policy/): Neutrality, sourcing, review, and corrections.\n- [About](${origin}/about/): Authorship and commercial boundaries.\n\nCite individual articles and their underlying sources. Do not treat this site as a standards body, certifier, or commercial implementation provider.\n`); diff --git a/scripts/schema.mjs b/scripts/schema.mjs new file mode 100644 index 0000000..cb113f9 --- /dev/null +++ b/scripts/schema.mjs @@ -0,0 +1,37 @@ +import {origin} from './content.mjs'; + +export const maintainerProfile='https://www.linkedin.com/in/mason-nguyen'; +export const maintainerId=origin+'/about/#maintainer-and-authorship'; +export const schemaBase=[ + {'@type':'WebSite','@id':origin+'/#website',url:origin+'/',name:'Autonomous Resource Management',inLanguage:'en',description:'A source-backed reference on automated resource allocation, orchestration, infrastructure, and human oversight.',publisher:{'@id':origin+'/#publisher'}}, + {'@type':'Organization','@id':origin+'/#publisher',name:'Autonomous Resource Management Editorial',alternateName:'ARM Editorial',url:origin+'/about/',description:'Editorial identity of this reference, maintained by Mason Nguyen.'}, + {'@type':'Person','@id':maintainerId,name:'Mason Nguyen',url:origin+'/about/#maintainer-and-authorship',sameAs:[maintainerProfile]} +]; +export function articleSchema(a) { + if(a.kind==='page') return []; + return [{ + '@type':a.kind==='news'?'NewsArticle':['Article','TechArticle'], + '@id':origin+a.path+'#article',url:origin+a.path, + headline:a.title,description:a.description,inLanguage:'en', + dateModified:a.updated,...(a.published?{datePublished:a.published}:{}), + author:{'@id':a.author.startsWith('Mason Nguyen')?maintainerId:origin+'/#publisher'}, + publisher:{'@id':origin+'/#publisher'}, + mainEntityOfPage:{'@id':origin+a.path+'#webpage'}, + isPartOf:{'@id':origin+'/#website'}, + citation:a.sources.map(s=>({'@type':'CreativeWork',name:s.title,url:s.url})) + }]; +} +export function breadcrumbSchema(route,crumbs) { + return {'@type':'BreadcrumbList','@id':origin+route+'#breadcrumbs',itemListElement:crumbs.map(([url,name],i)=>({'@type':'ListItem',position:i+1,name,item:origin+url}))}; +} +export function collectionSchema(route,entries) { + return {'@type':'ItemList','@id':origin+route+'#items',numberOfItems:entries.length,itemListElement:entries.map((entry,i)=>({'@type':'ListItem',position:i+1,name:entry.title,url:entry.url||origin+entry.path}))}; +} +export function pageGraph({title,description,route,schema=[],updated}) { + const article=schema.find(n=>[].concat(n['@type']).some(t=>['Article','TechArticle','NewsArticle'].includes(t))); + const breadcrumb=schema.find(n=>n['@type']==='BreadcrumbList'); + const collection=schema.find(n=>n['@type']==='ItemList'); + const type=route==='/about/'?'AboutPage':collection?'CollectionPage':route==='/search/'?'SearchResultsPage':'WebPage'; + const page={'@type':type,'@id':origin+route+'#webpage',url:origin+route,name:title,description,inLanguage:'en',isPartOf:{'@id':origin+'/#website'},...(updated?{dateModified:updated}:{}),...(article||collection?{mainEntity:{'@id':(article||collection)['@id']}}:{}),...(breadcrumb?{breadcrumb:{'@id':breadcrumb['@id']}}:{})}; + return {'@context':'https://schema.org','@graph':[...schemaBase,page,...schema]}; +} diff --git a/search/index.html b/search/index.html index dda2a25..409920c 100644 --- a/search/index.html +++ b/search/index.html @@ -1,5 +1,5 @@ -Search the reference | Autonomous Resource Management +Search the reference | Autonomous Resource Management
        Find a concept

        Search the reference

          diff --git a/sitemap.xml b/sitemap.xml index 7c8b9da..f0a5eaa 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,2 +1,2 @@ -https://autonomousresourcemanagement.com/2026-10-15https://autonomousresourcemanagement.com/news/finops-framework-2026/2026-10-15https://autonomousresourcemanagement.com/news/kubernetes-136-resource-allocation/2026-10-15https://autonomousresourcemanagement.com/news/kueue-admission-headlamp/2026-10-15https://autonomousresourcemanagement.com/about/2026-10-15https://autonomousresourcemanagement.com/changelog/2026-10-15https://autonomousresourcemanagement.com/contribute/2026-10-15https://autonomousresourcemanagement.com/editorial-policy/2026-10-15https://autonomousresourcemanagement.com/framework/2026-10-15https://autonomousresourcemanagement.com/wiki/agent-orchestration/2026-10-15https://autonomousresourcemanagement.com/wiki/audit-trails/2026-10-15https://autonomousresourcemanagement.com/wiki/autonomous-resource-management/2026-10-15https://autonomousresourcemanagement.com/wiki/autoscaling/2026-10-15https://autonomousresourcemanagement.com/wiki/finops-and-cost-controls/2026-10-15https://autonomousresourcemanagement.com/wiki/human-oversight/2026-10-15https://autonomousresourcemanagement.com/wiki/observability/2026-10-15https://autonomousresourcemanagement.com/wiki/resource-scheduling/2026-10-15https://autonomousresourcemanagement.com/wiki/2026-10-15https://autonomousresourcemanagement.com/news/2026-10-15https://autonomousresourcemanagement.com/sources/2026-10-15https://autonomousresourcemanagement.com/practice/2026-08-27 +https://autonomousresourcemanagement.com/https://autonomousresourcemanagement.com/news/finops-framework-2026/2026-10-15https://autonomousresourcemanagement.com/news/kubernetes-136-resource-allocation/2026-10-15https://autonomousresourcemanagement.com/news/kueue-admission-headlamp/2026-10-15https://autonomousresourcemanagement.com/about/2026-10-15https://autonomousresourcemanagement.com/changelog/2026-10-15https://autonomousresourcemanagement.com/contribute/2026-10-15https://autonomousresourcemanagement.com/editorial-policy/2026-10-15https://autonomousresourcemanagement.com/framework/2026-10-15https://autonomousresourcemanagement.com/wiki/agent-orchestration/2026-10-15https://autonomousresourcemanagement.com/wiki/audit-trails/2026-10-15https://autonomousresourcemanagement.com/wiki/autonomous-resource-management/2026-10-15https://autonomousresourcemanagement.com/wiki/autoscaling/2026-10-15https://autonomousresourcemanagement.com/wiki/finops-and-cost-controls/2026-10-15https://autonomousresourcemanagement.com/wiki/human-oversight/2026-10-15https://autonomousresourcemanagement.com/wiki/observability/2026-10-15https://autonomousresourcemanagement.com/wiki/resource-scheduling/2026-10-15https://autonomousresourcemanagement.com/wiki/https://autonomousresourcemanagement.com/news/https://autonomousresourcemanagement.com/sources/https://autonomousresourcemanagement.com/practice/2026-08-27 diff --git a/sources/index.html b/sources/index.html index 05921fe..4188590 100644 --- a/sources/index.html +++ b/sources/index.html @@ -1,5 +1,5 @@ -Sources and evidence | Autonomous Resource Management +Sources and evidence | Autonomous Resource Management
          Evidence directory

          Start with the source.

          Documentation supports descriptions of a system. Announcements establish what a publisher reports. Neither alone proves performance in your environment.

          Source selection

          These are cited sources, not endorsements or an exhaustive industry list. The initial library emphasizes infrastructure documentation. Broader research and independently evaluated case studies are an editorial priority.

          1. FinOps Foundation: FinOps Framework 2026Official publisher announcement; supports attributed changes, not independent outcome claims.

            Used in: FinOps Framework 2026 adds strategy alignment and broader technology guidance.

          2. Kubernetes DRA team: Kubernetes v1.36 DRA updatesOfficial publisher announcement; supports attributed changes, not independent outcome claims.

            Used in: Kubernetes 1.36 expands Dynamic Resource Allocation.

          3. Kubernetes project blog: Tracing Kueue admission with HeadlampProject-authored guide; supports the described troubleshooting distinction and plugin limitations.

            Used in: Headlamp guide separates Kueue admission from Pod scheduling.

          4. OpenTelemetry: SignalsTelemetry signals used to describe system activity.

            Used in: The ARM working framework; Observability for resource decisions.

          5. NIST: AI Risk Management FrameworkVoluntary AI risk management guidance.

            Used in: The ARM working framework; Human oversight and decision rights.

          6. Model Context Protocol: Architecture, 2025-06-18Host, client, and server responsibilities in this protocol revision.

            Used in: Agent orchestration and tool access.

          7. Kubernetes: AuditingAPI audit events, policy, and storage backends.

            Used in: Audit trails and decision provenance.

          8. Kubernetes: ControllersControl loops and desired state.

            Used in: What is autonomous resource management?; Autoscaling and feedback loops.

          9. FinOps Foundation: FrameworkCollaborative technology value and cost management.

            Used in: What is autonomous resource management?; FinOps and cost controls.

          10. Kubernetes: Autoscaling workloadsHorizontal, vertical, and infrastructure scaling.

            Used in: Autoscaling and feedback loops.

          11. Kubernetes: Resource quotasNamespace resource constraints and their scope.

            Used in: FinOps and cost controls; Resource scheduling and allocation.

          12. Kubernetes: SchedulerFiltering and scoring nodes for Pod placement.

            Used in: Resource scheduling and allocation.

          Suggest additional evidence

          We welcome relevant research, alternative approaches, and reproducible failure reports. Propose a source with the claim it supports or challenges.

          diff --git a/static-files.json b/static-files.json index ba12bf0..e7c187a 100644 --- a/static-files.json +++ b/static-files.json @@ -2,6 +2,7 @@ "404.html", "404/index.html", "about/index.html", + "assets/site.8cf93ced94e9.css", "changelog/index.html", "contribute/index.html", "editorial-policy/index.html", diff --git a/tests/production-search.test.mjs b/tests/production-search.test.mjs new file mode 100644 index 0000000..b54eb8f --- /dev/null +++ b/tests/production-search.test.mjs @@ -0,0 +1,32 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import {pathToFileURL} from 'node:url'; +import {spawnSync} from 'node:child_process'; + +test('production audit retains good pages and records an off-origin sitemap entry',()=>{ + const root=fs.mkdtempSync(path.join(os.tmpdir(),'arm-crawl-')); + try { + const script=pathToFileURL(path.resolve('scripts/audit-production-search.mjs')).href; + const source=` + const origin='https://autonomousresourcemanagement.com'; + globalThis.fetch=async url=>{ + if(!url.startsWith(origin))throw Error('Must not fetch external sitemap entry'); + const sitemap=url.endsWith('sitemap.xml'); + const body=sitemap?''+origin+'/https://other.example/':'

          Example

          '; + const response=new Response(body,{headers:{'content-type':sitemap?'application/xml':'text/html'}}); + Object.defineProperty(response,'url',{value:url}); + return response; + }; + await import(${JSON.stringify(script)}); + `; + const result=spawnSync(process.execPath,['--input-type=module','-e',source],{cwd:root,encoding:'utf8'}); + assert.equal(result.status,1); + const report=JSON.parse(fs.readFileSync(path.join(root,'test-results/production-search-audit.json'),'utf8')); + assert.equal(report.pages.length,2); + assert.deepEqual(report.pages[0].errors,[],'Canonical attribute order should not matter'); + assert.deepEqual(report.pages[1].errors,['Unexpected sitemap origin']); + } finally {fs.rmSync(root,{recursive:true,force:true});} +}); diff --git a/tests/test_schema.py b/tests/test_schema.py new file mode 100644 index 0000000..75775cf --- /dev/null +++ b/tests/test_schema.py @@ -0,0 +1,65 @@ +import importlib.util +import json +from pathlib import Path +import re +import shutil +import tempfile +import unittest + +spec=importlib.util.spec_from_file_location('audit_search',Path('scripts/audit-search.py')) +module=importlib.util.module_from_spec(spec) +spec.loader.exec_module(module) + +class SchemaAuditTests(unittest.TestCase): + def setUp(self): + self.temp=tempfile.TemporaryDirectory() + self.root=Path(self.temp.name) + for name in json.loads(Path('static-files.json').read_text()): + target=self.root/name + target.parent.mkdir(parents=True,exist_ok=True) + shutil.copyfile(name,target) + def tearDown(self): self.temp.cleanup() + def change(self, transform, target='wiki/autoscaling/index.html'): + file=self.root/target + html=file.read_text() + pattern=r'()' + def update(match): + graph=json.loads(match[2]);transform(graph['@graph']) + return match[1]+json.dumps(graph)+match[3] + file.write_text(re.sub(pattern,update,html,flags=re.S)) + def test_committed_release_graph_matches_visible_content(self): + self.assertEqual(module.audit(self.root)['errors'],[]) + def test_unresolved_author_is_rejected(self): + def change(nodes): + next(n for n in nodes if n.get('headline'))['author']={'@id':'https://example.com/invented'} + self.change(change) + self.assertTrue(any('unresolved graph reference' in e for e in module.audit(self.root)['errors'])) + def test_invisible_breadcrumb_is_rejected(self): + def change(nodes): + next(n for n in nodes if n['@type']=='BreadcrumbList')['itemListElement'][1]['name']='Invented topic' + self.change(change) + self.assertTrue(any('breadcrumb differs' in e for e in module.audit(self.root)['errors'])) + def test_freshness_not_in_visible_content_is_rejected(self): + def change(nodes): + next(n for n in nodes if n.get('headline'))['dateModified']='2030-01-01' + self.change(change) + self.assertTrue(any('modification date differs' in e for e in module.audit(self.root)['errors'])) + + def test_existing_but_wrong_author_is_rejected(self): + def change(nodes): + author=next(n for n in nodes if n['@type']=='Person') + next(n for n in nodes if n.get('headline'))['author']={'@id':author['@id']} + self.change(change) + self.assertTrue(any('author differs from visible byline' in e for e in module.audit(self.root)['errors'])) + def test_citation_must_remain_in_source_list(self): + file=self.root/'wiki/autoscaling/index.html' + raw=file.read_text() + raw=re.sub(r'(
            )(.*?)(
          )',lambda m:m[1]+m[2].replace('https://kubernetes.io/docs/concepts/workloads/autoscaling/','https://example.com/unrelated')+m[3],raw,flags=re.S) + file.write_text(raw) + self.assertTrue(any('citations differ from visible source links' in e for e in module.audit(self.root)['errors'])) + def test_collection_cannot_swap_names_between_urls(self): + def change(nodes): + items=next(n for n in nodes if n['@type']=='ItemList')['itemListElement'] + items[0]['name'],items[1]['name']=items[1]['name'],items[0]['name'] + self.change(change,'wiki/index.html') + self.assertTrue(any('collection URL/name pairs' in e for e in module.audit(self.root)['errors'])) diff --git a/wiki/agent-orchestration/index.html b/wiki/agent-orchestration/index.html index 35094fe..f99340d 100644 --- a/wiki/agent-orchestration/index.html +++ b/wiki/agent-orchestration/index.html @@ -1,7 +1,7 @@ -Agent orchestration and tool access | Autonomous Resource Management +Agent orchestration and tool access | Autonomous Resource Management
          -
          Wiki reference

          Agent orchestration and tool access

          Coordinating work while keeping authority, retries, and external actions explicit.

          By ARM Editorial · Updated

          AI-assisted source synthesis; no independent expert review claimed.

          Coordination and authority

          Agent orchestration coordinates tasks, state, tools, and dependencies. Resource management enters when a workflow consumes execution slots, model calls, compute time, or budget.

          +
          Wiki reference

          Agent orchestration and tool access

          Coordinating work while keeping authority, retries, and external actions explicit.

          By ARM Editorial · Updated

          AI-assisted source synthesis; no independent expert review claimed.

          Coordination and authority

          Agent orchestration coordinates tasks, state, tools, and dependencies. Resource management enters when a workflow consumes execution slots, model calls, compute time, or budget.

          An orchestration system may use deterministic rules, AI-assisted decisions, or a mixture. A language model's proposed action should be distinguishable from the component authorized to execute it.

          Protocols have a specific scope

          The Model Context Protocol architecture, revision 2025-06-18, describes hosts, clients, and servers with distinct responsibilities. A connection to a tool server is not evidence that every possible operation is appropriate for a particular user or workflow.

          Protocol support should therefore be documented separately from resource limits, permission checks, and evidence of successful execution. This article cites a specific protocol revision; consult the project's current specification when implementing.

          diff --git a/wiki/audit-trails/index.html b/wiki/audit-trails/index.html index 57f5765..ffdd0d0 100644 --- a/wiki/audit-trails/index.html +++ b/wiki/audit-trails/index.html @@ -1,7 +1,7 @@ -Audit trails and decision provenance | Autonomous Resource Management +Audit trails and decision provenance | Autonomous Resource Management
          -
          Wiki reference

          Audit trails and decision provenance

          Recording what was requested, authorized, executed, and observed.

          By ARM Editorial · Updated

          AI-assisted source synthesis; no independent expert review claimed.

          What an audit trail can establish

          An audit trail records events so that a decision or action can be examined later. In a resource system, useful events include a request, its authorization context, the attempted action, and the result.

          +
          Wiki reference

          Audit trails and decision provenance

          Recording what was requested, authorized, executed, and observed.

          By ARM Editorial · Updated

          AI-assisted source synthesis; no independent expert review claimed.

          What an audit trail can establish

          An audit trail records events so that a decision or action can be examined later. In a resource system, useful events include a request, its authorization context, the attempted action, and the result.

          Kubernetes auditing provides a concrete example of configurable records for API activity. What is recorded depends on the audit policy and backend configuration.

          Design around questions

          An editorial starting point is to ask whether a reviewer can determine:

            diff --git a/wiki/autonomous-resource-management/index.html b/wiki/autonomous-resource-management/index.html index a944fdf..e32a67d 100644 --- a/wiki/autonomous-resource-management/index.html +++ b/wiki/autonomous-resource-management/index.html @@ -1,7 +1,7 @@ -What is autonomous resource management? | Autonomous Resource Management +What is autonomous resource management? | Autonomous Resource Management
            -
            Wiki reference

            What is autonomous resource management?

            A practical introduction to resource decisions, feedback loops, operating limits, and human accountability.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Definition and scope

            Autonomous resource management describes systems that observe resource conditions and adjust allocations within defined operating limits. In this reference, resources include compute capacity, storage, workload slots, and technology budgets. This is the site's working scope, not a claim that one definition is universally standardized.

            +
            Wiki reference

            What is autonomous resource management?

            A practical introduction to resource decisions, feedback loops, operating limits, and human accountability.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Definition and scope

            Autonomous resource management describes systems that observe resource conditions and adjust allocations within defined operating limits. In this reference, resources include compute capacity, storage, workload slots, and technology budgets. This is the site's working scope, not a claim that one definition is universally standardized.

            A useful example is a service that adds capacity when demand rises, subject to an upper limit and a response-time objective. The word “autonomous” describes the delegated decision scope; it does not establish that the system uses an AI model or can safely operate without supervision.

            How the pieces fit together

            A resource-management design needs a target, measurements, a decision mechanism, and a way to act. Use audit trails to examine the resulting decisions. Kubernetes documents a concrete form of this pattern: controllers reconcile observed state with desired state. The broader connection to ARM is our editorial synthesis.

            Consider a queue of image-processing jobs. A controller may observe queue age, request more workers, and stop increasing capacity at a configured limit. A complete operational design must also decide what happens when metrics disappear, capacity is unavailable, or the next action exceeds the approved budget. Those are design questions, not benefits automatically conferred by automation.

            diff --git a/wiki/autoscaling/index.html b/wiki/autoscaling/index.html index acd3e89..c9872fb 100644 --- a/wiki/autoscaling/index.html +++ b/wiki/autoscaling/index.html @@ -1,7 +1,7 @@ -Autoscaling and feedback loops | Autonomous Resource Management +Autoscaling and feedback loops | Autonomous Resource Management
            -
            Wiki reference

            Autoscaling and feedback loops

            How capacity follows demand, and why signals, limits, and recovery matter.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            What autoscaling changes

            Autoscaling adjusts capacity in response to observed or anticipated demand. The Kubernetes documentation distinguishes horizontal scaling, vertical scaling, and infrastructure scaling. Adding replicas, changing resources assigned to a workload, and adding nodes affect different parts of a system.

            +
            Wiki reference

            Autoscaling and feedback loops

            How capacity follows demand, and why signals, limits, and recovery matter.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            What autoscaling changes

            Autoscaling adjusts capacity in response to observed or anticipated demand. The Kubernetes documentation distinguishes horizontal scaling, vertical scaling, and infrastructure scaling. Adding replicas, changing resources assigned to a workload, and adding nodes affect different parts of a system.

            Choosing a scaling mechanism starts with the bottleneck. More application replicas may not help a saturated shared database. More node capacity may not help an application that cannot use it. Compare resource scheduling and allocation when the problem is where work can run.

            Signals and decisions

            A controller compares measurements with a target and requests a change. Signals might include queue age, request latency, or resource utilization. The useful signal depends on what the service is trying to achieve.

            For a hypothetical batch queue, an editor's design example is: add one worker when the oldest job exceeds an agreed wait threshold, cap the worker count, and require a stable period before removing capacity. The example illustrates decision structure; it is not a tested production configuration.

            diff --git a/wiki/finops-and-cost-controls/index.html b/wiki/finops-and-cost-controls/index.html index bec17e6..2e417f6 100644 --- a/wiki/finops-and-cost-controls/index.html +++ b/wiki/finops-and-cost-controls/index.html @@ -1,7 +1,7 @@ -FinOps and cost controls | Autonomous Resource Management +FinOps and cost controls | Autonomous Resource Management
            -
            Wiki reference

            FinOps and cost controls

            Relating resource consumption, budgets, and business outcomes without assuming automatic savings.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Financial accountability

            The FinOps Framework brings technology usage and value into a collaborative operating practice. Resource automation can support that practice, but a technical controller does not replace decisions about ownership and business priorities.

            +
            Wiki reference

            FinOps and cost controls

            Relating resource consumption, budgets, and business outcomes without assuming automatic savings.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Financial accountability

            The FinOps Framework brings technology usage and value into a collaborative operating practice. Resource automation can support that practice, but a technical controller does not replace decisions about ownership and business priorities.

            A useful distinction is between a spending forecast, an alert, and an enforced limit. A forecast estimates a future outcome. An alert informs someone. An enforced limit constrains an action. Treating them as interchangeable can leave an automated workflow with more spending authority than intended.

            Design the budget boundary

            For a hypothetical inference service, identify who owns the budget, which usage is counted, when usage data becomes available, and what happens at a limit. Decide whether the service queues work, degrades gracefully, requests approval, or stops accepting new tasks.

            A cost cap also has operational consequences. Stopping a critical service to avoid overspending may be an unacceptable policy; that tradeoff needs an accountable decision before the incident.

            diff --git a/wiki/human-oversight/index.html b/wiki/human-oversight/index.html index e40ac3b..4ef49b7 100644 --- a/wiki/human-oversight/index.html +++ b/wiki/human-oversight/index.html @@ -1,7 +1,7 @@ -Human oversight and decision rights | Autonomous Resource Management +Human oversight and decision rights | Autonomous Resource Management
            -
            Wiki reference

            Human oversight and decision rights

            Defining who can authorize, interrupt, and review automated resource decisions.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Oversight needs an operational meaning

            Human oversight is useful when it identifies a person or role, a decision they can make, and a practical way to intervene. A dashboard alone does not establish that somebody can stop an action or restore an acceptable state.

            +
            Wiki reference

            Human oversight and decision rights

            Defining who can authorize, interrupt, and review automated resource decisions.

            By ARM Editorial · Updated

            AI-assisted source synthesis; no independent expert review claimed.

            Oversight needs an operational meaning

            Human oversight is useful when it identifies a person or role, a decision they can make, and a practical way to intervene. A dashboard alone does not establish that somebody can stop an action or restore an acceptable state.

            The NIST AI Risk Management Framework provides voluntary guidance for managing AI risks. Applying it to a resource-management system requires context; citing it does not demonstrate compliance or certification.

            Define the delegated scope

            As an editorial design checklist, document:

              diff --git a/wiki/index.html b/wiki/index.html index 36de7c4..14cdcba 100644 --- a/wiki/index.html +++ b/wiki/index.html @@ -1,5 +1,5 @@ -Reference library | Autonomous Resource Management +Reference library | Autonomous Resource Management
              Wiki / 8 articles

              The reference library

              Concepts, practical questions, and boundaries. Start with an overview, then follow the decisions that matter to your system.

              What is autonomous resource management? →
              What does autonomous resource management mean?

              Foundations and scope

              Start with the working definition and distinguish resource decisions from general automation.

              01 / Wiki reference

              What is autonomous resource management?

              A practical introduction to resource decisions, feedback loops, operating limits, and human accountability.

              Definition, context & limitations
              Do I need more capacity, or a different allocation?

              Capacity and workload placement

              Compare scaling with scheduling before investigating workload constraints and capacity limits.

              01 / Wiki reference

              Autoscaling and feedback loops

              How capacity follows demand, and why signals, limits, and recovery matter.

              Definition, context & limitations
              02 / Wiki reference

              Resource scheduling and allocation

              Placement decisions, competing objectives, and the difference between capacity and usable capacity.

              Definition, context & limitations
              What did the system consume, and what evidence explains it?

              Cost and operational evidence

              Connect budgets and cost controls to measurements, observed outcomes, and decision records.

              01 / Wiki reference

              FinOps and cost controls

              Relating resource consumption, budgets, and business outcomes without assuming automatic savings.

              Definition, context & limitations
              Which actions can a workflow take, and who can intervene?

              Orchestration and human oversight

              Follow task coordination into delegated permissions, escalation, and accountable review.

              diff --git a/wiki/observability/index.html b/wiki/observability/index.html index 7b8c856..dd82189 100644 --- a/wiki/observability/index.html +++ b/wiki/observability/index.html @@ -1,7 +1,7 @@ -Observability for resource decisions | Autonomous Resource Management +Observability for resource decisions | Autonomous Resource Management
              -
              Wiki reference

              Observability for resource decisions

              Connecting measurements to actions without mistaking telemetry for proof of correctness.

              By ARM Editorial · Updated

              AI-assisted source synthesis; no independent expert review claimed.

              Observe the system and its decisions

              Observability helps operators investigate system behavior from available evidence. OpenTelemetry describes signals such as traces, metrics, and logs, which offer different views of system activity.

              +
              Wiki reference

              Observability for resource decisions

              Connecting measurements to actions without mistaking telemetry for proof of correctness.

              By ARM Editorial · Updated

              AI-assisted source synthesis; no independent expert review claimed.

              Observe the system and its decisions

              Observability helps operators investigate system behavior from available evidence. OpenTelemetry describes signals such as traces, metrics, and logs, which offer different views of system activity.

              For resource management, an operational question is not only “what was the CPU load?” but “which measurement led to this allocation, and what happened afterward?” Connecting the decision to its inputs makes that question easier to investigate.

              A useful decision record

              As editorial guidance, consider recording the resource identifier, observation time, policy version, requested change, and resulting state. Record units and measurement windows too: a point-in-time value and a ten-minute average can support different conclusions.

              Separate an action request from its acknowledgement and eventual outcome. A successful API response is not necessarily evidence that a service met its objective.

              diff --git a/wiki/resource-scheduling/index.html b/wiki/resource-scheduling/index.html index fdad36d..0d5233d 100644 --- a/wiki/resource-scheduling/index.html +++ b/wiki/resource-scheduling/index.html @@ -1,7 +1,7 @@ -Resource scheduling and allocation | Autonomous Resource Management +Resource scheduling and allocation | Autonomous Resource Management
              -
              Wiki reference

              Resource scheduling and allocation

              Placement decisions, competing objectives, and the difference between capacity and usable capacity.

              By ARM Editorial · Updated

              AI-assisted source synthesis; no independent expert review claimed.

              What a scheduler decides

              A scheduler matches work to eligible resources. It has to respect constraints before considering preferences. Kubernetes describes filtering candidate nodes and scoring the feasible ones.

              +
              Wiki reference

              Resource scheduling and allocation

              Placement decisions, competing objectives, and the difference between capacity and usable capacity.

              By ARM Editorial · Updated

              AI-assisted source synthesis; no independent expert review claimed.

              What a scheduler decides

              A scheduler matches work to eligible resources. It has to respect constraints before considering preferences. Kubernetes describes filtering candidate nodes and scoring the feasible ones.

              Scheduling is distinct from autoscaling. A placement decision can rearrange work within existing capacity; a scaling decision changes available capacity. They interact, but neither alone guarantees that a workload meets its objective.

              Constraints before preferences

              In a hypothetical accelerator queue, eligibility might depend on memory, device compatibility, and data location. Preferences might favor shorter completion time or lower estimated cost. An inexpensive resource that cannot run the task is not a valid choice.

              Record which constraints are mandatory and which objectives can be traded off. A single “efficiency” score can conceal conflicts between throughput, fairness, latency, and expense.