mirror of
https://github.com/jimeh/commonflow.org.git
synced 2026-02-19 05:46:40 +00:00
wip: getting closer
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="canonical" href="https://commonflow.org/404/"><title>Page Not Found | Git Common Flow</title><meta name="description" content="An attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification."><meta name="author" content="Jim Myhrberg"><!-- Fonts --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"><!-- Prevent flash of wrong theme --><script>
|
||||
<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="canonical" href="https://commonflow.org/404/"><title>Page Not Found | Git Common-Flow</title><meta name="description" content="An attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification."><meta name="author" content="Jim Myhrberg"><!-- Fonts --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"><!-- Prevent flash of wrong theme --><script>
|
||||
(function () {
|
||||
const theme = localStorage.getItem("theme");
|
||||
if (
|
||||
@@ -9,7 +9,7 @@
|
||||
document.documentElement.classList.add("dark");
|
||||
}
|
||||
})();
|
||||
</script><link rel="stylesheet" href="/_astro/index.BQPwFnAt.css"></head> <body class="min-h-screen flex flex-col items-center justify-center p-8"> <div class="text-center"> <h1 class="text-[8rem] sm:text-[12rem] font-display font-bold leading-none
|
||||
</script><link rel="stylesheet" href="/_astro/index._zunHdNh.css"></head> <body class="min-h-screen flex flex-col items-center justify-center p-8"> <div class="text-center"> <h1 class="text-[8rem] sm:text-[12rem] font-display font-bold leading-none
|
||||
text-gray-300 dark:text-slate-700">
|
||||
404
|
||||
</h1> <p class="text-xl mb-2 text-gray-600 dark:text-slate-400">
|
||||
|
||||
File diff suppressed because one or more lines are too long
1
docs/_astro/index._zunHdNh.css
Normal file
1
docs/_astro/index._zunHdNh.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -8,9 +8,7 @@
|
||||
document.documentElement.classList.add("dark");
|
||||
}
|
||||
})();
|
||||
</script><link rel="stylesheet" href="/_astro/index.BQPwFnAt.css">
|
||||
<style>.spec-content[data-astro-cid-x2lc2h5w] p:last-child{margin-bottom:0}.spec-content[data-astro-cid-x2lc2h5w] a{color:var(--color-accent)}.spec-content[data-astro-cid-x2lc2h5w] a:hover{color:var(--color-accent-light)}.sidebar-link[data-astro-cid-lfaoh65k].active{color:#0284c7;background-color:#0ea5e926}.dark .sidebar-link[data-astro-cid-lfaoh65k].active{color:#38bdf8;background-color:#0ea5e933}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar{width:4px}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-track{background:transparent}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-thumb{background-color:#e5e5e5;border-radius:2px}.dark #spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-thumb{background-color:#1e293b}.spec-content[data-astro-cid-6lwcykzv]{max-width:var(--content-max-width)}.spec-content[data-astro-cid-6lwcykzv] h2{font-family:var(--font-display);font-size:1.75rem;font-weight:700;margin-top:3rem;margin-bottom:1.5rem;padding-bottom:.75rem;scroll-margin-top:calc(var(--header-height) + 2rem);border-bottom:1px solid #e5e5e5;color:#0a0a0a}.dark .spec-content[data-astro-cid-6lwcykzv] h2{border-bottom-color:#1e293b;color:#f8fafc}.spec-content[data-astro-cid-6lwcykzv] h2:first-child{margin-top:0}.spec-content[data-astro-cid-6lwcykzv] h3{font-family:var(--font-display);font-size:1.25rem;font-weight:600;margin-top:2rem;margin-bottom:1rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] h3{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] p{margin-bottom:1.25rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] p{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] strong{font-weight:600;color:#0a0a0a}.dark .spec-content[data-astro-cid-6lwcykzv] strong{color:#f8fafc}.spec-content[data-astro-cid-6lwcykzv] ul{margin-bottom:1.25rem;padding-left:1.5rem}.spec-content[data-astro-cid-6lwcykzv] ol{margin-bottom:1.25rem;padding-left:2.5rem;counter-reset:item;list-style:none}.spec-content[data-astro-cid-6lwcykzv] ol>li{counter-increment:item;position:relative}.spec-content[data-astro-cid-6lwcykzv] ol>li:before{content:counters(item,".") ".";position:absolute;left:-2.5rem;width:2rem;text-align:right;font-weight:500;color:#737373}.spec-content[data-astro-cid-6lwcykzv] ol>li[id]{scroll-margin-top:calc(var(--header-height) + 2rem)}.spec-content[data-astro-cid-6lwcykzv] li{margin-bottom:.5rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] li{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] a{color:var(--color-accent);text-decoration:none;transition:color .15s ease}.spec-content[data-astro-cid-6lwcykzv] a:hover{color:var(--color-accent-light)}.spec-content[data-astro-cid-6lwcykzv] blockquote{border-left:3px solid var(--color-accent);padding-left:1.5rem;margin:1.5rem 0;font-style:italic;color:#737373}.spec-content[data-astro-cid-6lwcykzv] img{max-width:100%;height:auto;border-radius:8px;margin:2rem 0}
|
||||
</style></head> <body class="min-h-screen"> <header id="site-header" class="fixed top-0 inset-x-0 z-50 border-b border-transparent
|
||||
</script><link rel="stylesheet" href="/_astro/index._zunHdNh.css"></head> <body class="min-h-screen"> <header id="site-header" class="fixed top-0 inset-x-0 z-50 border-b border-transparent
|
||||
translate-y-[-100%] transition-transform duration-300
|
||||
backdrop-blur-xl bg-gray-50/85 dark:bg-slate-950/85"> <div class="max-w-6xl mx-auto px-4 sm:px-6 h-16 flex items-center justify-between"> <!-- Logo / Title + Version --> <div class="flex items-center gap-3"> <a href="#hero" class="flex items-center gap-3 no-underline
|
||||
text-gray-950 dark:text-slate-50
|
||||
@@ -30,23 +28,23 @@ v1.0.0-rc.5 </a><a href="/spec/1.0.0-rc.4" role="option" aria-selected="false" c
|
||||
v1.0.0-rc.4 </a><a href="/spec/1.0.0-rc.3" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.3 </a><a href="/spec/1.0.0-rc.2" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.2 </a><a href="/spec/1.0.0-rc.1" role="option" aria-selected="true" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50 bg-sky-500/15 dark:bg-sky-500/20 text-sky-600 dark:text-sky-400">
|
||||
v1.0.0-rc.1 </a> </div> </div> <script type="module">function c(){document.querySelectorAll("[data-version-selector]").forEach(e=>{if(e.dataset.initialized)return;e.dataset.initialized="true";const t=e.querySelector("[data-version-trigger]"),a=e.querySelector("[data-version-dropdown]"),n=e.querySelector("[data-arrow-icon]");if(!t||!a)return;const u=()=>{a.dataset.open="true",t.setAttribute("aria-expanded","true"),n&&(n.style.transform="rotate(180deg)")},o=()=>{delete a.dataset.open,t.setAttribute("aria-expanded","false"),n&&(n.style.transform="")};t.addEventListener("click",r=>{r.stopPropagation();const l=a.dataset.open==="true";document.querySelectorAll("[data-version-dropdown][data-open]").forEach(s=>{delete s.dataset.open;const i=s.previousElementSibling;i?.setAttribute("aria-expanded","false");const d=i?.querySelector("[data-arrow-icon]");d&&(d.style.transform="")}),l?o():u()}),document.addEventListener("click",r=>{e.contains(r.target)||o()}),document.addEventListener("keydown",r=>{r.key==="Escape"&&a.dataset.open==="true"&&(o(),t.focus())})})}c();document.addEventListener("astro:after-swap",c);</script> </div> </div> <!-- Desktop Navigation --> <nav class="hidden md:flex items-center gap-1"> <a href="#about" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
v1.0.0-rc.1 </a> </div> </div> <script type="module">function c(){document.querySelectorAll("[data-version-selector]").forEach(e=>{if(e.dataset.initialized)return;e.dataset.initialized="true";const t=e.querySelector("[data-version-trigger]"),a=e.querySelector("[data-version-dropdown]"),n=e.querySelector("[data-arrow-icon]");if(!t||!a)return;const u=()=>{a.dataset.open="true",t.setAttribute("aria-expanded","true"),n&&(n.style.transform="rotate(180deg)")},o=()=>{delete a.dataset.open,t.setAttribute("aria-expanded","false"),n&&(n.style.transform="")};t.addEventListener("click",r=>{r.stopPropagation();const l=a.dataset.open==="true";document.querySelectorAll("[data-version-dropdown][data-open]").forEach(s=>{delete s.dataset.open;const i=s.previousElementSibling;i?.setAttribute("aria-expanded","false");const d=i?.querySelector("[data-arrow-icon]");d&&(d.style.transform="")}),l?o():u()}),document.addEventListener("click",r=>{e.contains(r.target)||o()}),document.addEventListener("keydown",r=>{r.key==="Escape"&&a.dataset.open==="true"&&(o(),t.focus())})})}c();document.addEventListener("astro:after-swap",c);</script> </div> </div> <!-- Desktop Navigation --> <nav class="hidden md:flex items-center gap-1"> <a href="#about" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="about">
|
||||
About
|
||||
</a> <a href="#spec" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
</a> <a href="#spec" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="spec">
|
||||
Spec
|
||||
</a> <a href="#faq" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
</a> <a href="#faq" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="faq">
|
||||
FAQ
|
||||
</a> </nav> <!-- Right side: Theme, GitHub --> <div class="flex items-center gap-3"> <button data-theme-toggle type="button" class="p-2 rounded-lg transition-colors duration-200
|
||||
text-gray-500 dark:text-slate-500
|
||||
@@ -73,13 +71,16 @@ v1.0.0-rc.5 </a><a href="/spec/1.0.0-rc.4" role="option" aria-selected="false" c
|
||||
v1.0.0-rc.4 </a><a href="/spec/1.0.0-rc.3" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.3 </a><a href="/spec/1.0.0-rc.2" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.2 </a><a href="/spec/1.0.0-rc.1" role="option" aria-selected="true" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50 bg-sky-500/15 dark:bg-sky-500/20 text-sky-600 dark:text-sky-400">
|
||||
v1.0.0-rc.1 </a> </div> </div> </div> <a href="#about" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
v1.0.0-rc.1 </a> </div> </div> </div> <a href="#about" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="about">
|
||||
About
|
||||
</a> <a href="#spec" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
</a> <a href="#spec" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="spec">
|
||||
Spec
|
||||
</a> <a href="#faq" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
</a> <a href="#faq" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="faq">
|
||||
FAQ
|
||||
</a> </div> </nav> </header> <script type="module">function o(){const e=document.getElementById("site-header"),n=document.getElementById("hero"),s=document.getElementById("mobile-menu-btn"),t=document.getElementById("mobile-nav");if(!e||!n)return;const d=Math.floor(window.innerHeight/2);new IntersectionObserver(([r])=>{r.isIntersecting?(e.classList.add("translate-y-[-100%]"),e.classList.remove("border-gray-200","dark:border-slate-800")):(e.classList.remove("translate-y-[-100%]"),e.classList.add("border-gray-200","dark:border-slate-800"))},{threshold:0,rootMargin:`-${d}px 0px 0px 0px`}).observe(n),s&&t&&(s.addEventListener("click",()=>{t.classList.toggle("hidden")}),t.querySelectorAll("a").forEach(r=>{r.addEventListener("click",()=>{t.classList.add("hidden")})}))}o();document.addEventListener("astro:after-swap",o);</script> <main> <section id="hero" class="relative min-h-[75vh] flex flex-col items-center justify-center
|
||||
</a> </div> </nav> </header> <script type="module">function f(){const n=document.getElementById("site-header"),g=document.getElementById("hero"),o=document.getElementById("mobile-menu-btn"),s=document.getElementById("mobile-nav");if(!n||!g)return;const v=64;function c(){window.scrollY>=v?(n.classList.remove("translate-y-[-100%]"),n.classList.add("border-gray-200","dark:border-slate-800")):(n.classList.add("translate-y-[-100%]"),n.classList.remove("border-gray-200","dark:border-slate-800"))}window.addEventListener("scroll",c,{passive:!0}),c(),o&&s&&(o.addEventListener("click",()=>{s.classList.toggle("hidden")}),s.querySelectorAll("a").forEach(i=>{i.addEventListener("click",()=>{s.classList.add("hidden")})}));const r=document.querySelectorAll("[data-nav-link]"),l=[],u=new Set;r.forEach(i=>{const e=i.getAttribute("data-section-id");if(e&&!u.has(e)){u.add(e);const t=document.getElementById(e);t&&l.push({id:e,element:t})}});function m(){let e=null;for(const{id:t,element:d}of l)d.getBoundingClientRect().top<=100&&(e=t);r.forEach(t=>{const d=t.getAttribute("data-section-id");t.classList.toggle("active",d===e)})}let a=!1;window.addEventListener("scroll",()=>{a||(requestAnimationFrame(()=>{m(),a=!1}),a=!0)}),m()}f();document.addEventListener("astro:after-swap",f);</script> <main> <section id="hero" class="relative min-h-[75vh] flex flex-col items-center justify-center
|
||||
px-6 py-16 overflow-hidden"> <!-- Background gradient/texture --> <div class="absolute inset-0 bg-gradient-to-b
|
||||
from-gray-100 to-gray-50
|
||||
dark:from-slate-900 dark:to-slate-950"></div> <!-- Subtle grid pattern --> <div class="absolute inset-0 opacity-[0.03] dark:opacity-[0.05]
|
||||
@@ -146,45 +147,45 @@ FAQ
|
||||
</a> </nav> </div> <!-- Scroll indicator --> <a href="#about" class="absolute bottom-8 left-1/2 -translate-x-1/2
|
||||
animate-fade-in delay-700
|
||||
text-gray-500 dark:text-slate-500
|
||||
hover:text-sky-600 transition-colors" aria-label="Scroll to content"> <svg class="w-6 h-6 animate-bounce-subtle" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path> </svg> </a> </section> <section id="about" class="py-20 sm:py-28" data-astro-cid-x2lc2h5w> <div class="section-container" data-astro-cid-x2lc2h5w> <div class="max-w-3xl mx-auto" data-astro-cid-x2lc2h5w> <!-- Section header --> <div class="mb-12 text-center" data-astro-cid-x2lc2h5w> <h2 class="text-3xl sm:text-4xl mb-4" data-astro-cid-x2lc2h5w>About Common-Flow</h2> <p class="text-lg text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w>
|
||||
hover:text-sky-600 transition-colors" aria-label="Scroll to content"> <svg class="w-6 h-6 animate-bounce-subtle" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path> </svg> </a> </section> <section id="about" class="py-20 sm:py-28"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">About Common-Flow</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
A practical git workflow that combines the best of GitHub Flow with
|
||||
versioned releases
|
||||
</p> </div> <!-- Introduction --> <div class="prose-spec mb-12" data-astro-cid-x2lc2h5w> <div class="spec-content" data-astro-cid-x2lc2h5w></div> </div> <!-- Summary as feature cards --> <div class="mb-16" data-astro-cid-x2lc2h5w> <h3 class="text-xl font-display font-semibold mb-6
|
||||
text-gray-950 dark:text-slate-50" data-astro-cid-x2lc2h5w>
|
||||
</p> </div> <!-- Introduction --> <div class="prose-spec mb-12"></div> <!-- Summary as feature cards --> <div class="mb-16"> <h3 class="text-xl font-display font-semibold mb-6
|
||||
text-gray-950 dark:text-slate-50">
|
||||
Key Principles
|
||||
</h3> <div class="spec-content prose-spec" data-astro-cid-x2lc2h5w><p>Common-Flow is an attempt to gather a sensible selection of the most common
|
||||
</h3> <div class="prose-spec"><p>Common-Flow is an attempt to gather a sensible selection of the most common
|
||||
usage patterns of git into a single and concise specification. It is based on
|
||||
the <a href="http://scottchacon.com/2011/08/31/github-flow.html">original variant</a>
|
||||
of <a href="https://guides.github.com/introduction/flow/">GitHub Flow</a>, while taking
|
||||
into account how a lot of open source projects use git.</p>
|
||||
<p>TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned
|
||||
releases, maintenance releases for old versions, and without the requirement to
|
||||
deploy to production all the time.</p></div> </div> <!-- Feedback & License --> <div class="pt-8 border-t border-gray-200 dark:border-slate-800" data-astro-cid-x2lc2h5w> <div class="grid sm:grid-cols-2 gap-8" data-astro-cid-x2lc2h5w> <div data-astro-cid-x2lc2h5w> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-x2lc2h5w>
|
||||
deploy to production all the time.</p></div> </div> <!-- Feedback & License --> <div class="pt-8 border-t border-gray-200 dark:border-slate-800"> <div class="grid sm:grid-cols-2 gap-8"> <div> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Feedback
|
||||
</h4> <p class="text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w>
|
||||
Please <a href="https://github.com/jimeh/common-flow/issues" class="text-sky-600 hover:text-sky-400" target="_blank" rel="noopener noreferrer" data-astro-cid-x2lc2h5w>open an issue on GitHub</a>.
|
||||
</p> </div> <div data-astro-cid-x2lc2h5w> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-x2lc2h5w>
|
||||
</h4> <p class="text-gray-600 dark:text-slate-400">
|
||||
Please <a href="https://github.com/jimeh/common-flow/issues" class="text-sky-600 hover:text-sky-400" target="_blank" rel="noopener noreferrer">open an issue on GitHub</a>.
|
||||
</p> </div> <div> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500">
|
||||
License
|
||||
</h4> <div class="spec-content text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w><p><a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons - CC BY 3.0</a></p></div> </div> </div> </div> </div> </div> </section> <section id="spec" class="py-20 sm:py-28" data-astro-cid-6lwcykzv> <div class="section-container" data-astro-cid-6lwcykzv> <!-- Section header --> <div class="max-w-3xl mx-auto mb-12 text-center" data-astro-cid-6lwcykzv> <h2 class="text-3xl sm:text-4xl mb-4" data-astro-cid-6lwcykzv>The Specification</h2> <p class="text-lg text-gray-600 dark:text-slate-400" data-astro-cid-6lwcykzv>
|
||||
</h4> <div class="text-gray-600 dark:text-slate-400"><p><a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons - CC BY 3.0</a></p></div> </div> </div> </div> </div> </div> </section> <section id="spec" class="py-20 sm:py-28"> <div class="section-container"> <!-- Section header --> <div class="max-w-3xl mx-auto mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">The Specification</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
The complete Git Common-Flow specification
|
||||
</p> </div> <!-- Content with sidebar --> <div class="lg:flex lg:gap-8" data-astro-cid-6lwcykzv> <!-- Sidebar --> <div class="lg:w-64 lg:flex-shrink-0" data-astro-cid-6lwcykzv> <aside id="spec-sidebar" class="hidden lg:block lg:sticky lg:top-24 lg:self-start
|
||||
</p> </div> <!-- Content with sidebar --> <div class="lg:flex lg:gap-8"> <!-- Sidebar --> <div class="lg:w-64 lg:flex-shrink-0"> <aside id="spec-sidebar" class="hidden lg:block lg:sticky lg:top-24 lg:self-start
|
||||
lg:max-h-[calc(100vh-8rem)] lg:overflow-y-auto
|
||||
lg:pr-8 lg:mr-8 lg:border-r border-gray-200 dark:border-slate-800" data-astro-cid-lfaoh65k> <nav class="space-y-1 py-2" data-astro-cid-lfaoh65k> <div class="text-xs font-semibold uppercase tracking-wider mb-4
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-lfaoh65k>
|
||||
lg:pr-8 lg:mr-8 lg:border-r border-gray-200 dark:border-slate-800"> <nav class="space-y-1 py-2"> <div class="text-xs font-semibold uppercase tracking-wider mb-4
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Table of Contents
|
||||
</div> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="terminology" data-astro-cid-lfaoh65k> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="specification" data-astro-cid-lfaoh65k> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-the-master-branch" data-astro-cid-lfaoh65k> The Master Branch </a><a href="#spec-changes" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-changes" data-astro-cid-lfaoh65k> Changes </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-git-best-practices" data-astro-cid-lfaoh65k> Git Best Practices </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-versioning" data-astro-cid-lfaoh65k> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-releases" data-astro-cid-lfaoh65k> Releases </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-bug-fixes-rollback" data-astro-cid-lfaoh65k> Bug Fixes & Rollback </a><a href="#spec-maintenance-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-maintenance-releases" data-astro-cid-lfaoh65k> Maintenance Releases </a> </nav> </aside> <!-- Mobile floating button --> <button id="spec-toc-toggle" class="lg:hidden fixed bottom-6 right-6 z-40
|
||||
</div> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="terminology"> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="specification"> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-the-master-branch"> The Master Branch </a><a href="#spec-changes" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-changes"> Changes </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-git-best-practices"> Git Best Practices </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-versioning"> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-releases"> Releases </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-bug-fixes-rollback"> Bug Fixes & Rollback </a><a href="#spec-maintenance-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-maintenance-releases"> Maintenance Releases </a> </nav> </aside> <!-- Mobile floating button --> <button id="spec-toc-toggle" class="lg:hidden fixed bottom-6 right-6 z-40
|
||||
w-12 h-12 rounded-full shadow-lg
|
||||
bg-sky-600 text-white
|
||||
flex items-center justify-center
|
||||
hover:bg-sky-500
|
||||
transition-all duration-200" aria-label="Jump to section" data-astro-cid-lfaoh65k> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-lfaoh65k> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7" data-astro-cid-lfaoh65k></path> </svg> </button> <!-- Mobile TOC drawer --> <div id="spec-toc-drawer" class="lg:hidden fixed inset-0 z-50 hidden" data-toc-drawer data-astro-cid-lfaoh65k> <!-- Backdrop --> <div class="absolute inset-0 bg-black/50" data-toc-backdrop data-astro-cid-lfaoh65k></div> <!-- Drawer --> <div class="absolute bottom-0 inset-x-0 max-h-[70vh] overflow-y-auto
|
||||
transition-all duration-200" aria-label="Jump to section"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"></path> </svg> </button> <!-- Mobile TOC drawer --> <div id="spec-toc-drawer" class="lg:hidden fixed inset-0 z-50 hidden" data-toc-drawer> <!-- Backdrop --> <div class="absolute inset-0 bg-black/50" data-toc-backdrop></div> <!-- Drawer --> <div class="absolute bottom-0 inset-x-0 max-h-[70vh] overflow-y-auto
|
||||
bg-gray-50 dark:bg-slate-950
|
||||
rounded-t-2xl shadow-xl p-6" data-astro-cid-lfaoh65k> <div class="flex items-center justify-between mb-4" data-astro-cid-lfaoh65k> <span class="text-sm font-semibold uppercase tracking-wider
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-lfaoh65k>
|
||||
rounded-t-2xl shadow-xl p-6"> <div class="flex items-center justify-between mb-4"> <span class="text-sm font-semibold uppercase tracking-wider
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Jump to Section
|
||||
</span> <button class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-800" data-toc-close aria-label="Close" data-astro-cid-lfaoh65k> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-lfaoh65k> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-astro-cid-lfaoh65k></path> </svg> </button> </div> <nav class="space-y-1" data-astro-cid-lfaoh65k> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link data-astro-cid-lfaoh65k> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link data-astro-cid-lfaoh65k> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> The Master Branch </a><a href="#spec-changes" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Changes </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Git Best Practices </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Releases </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Bug Fixes & Rollback </a><a href="#spec-maintenance-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Maintenance Releases </a> </nav> </div> </div> <script type="module">function u(){const a=document.querySelectorAll("[data-sidebar-link]"),o=[];a.forEach(n=>{const e=n.getAttribute("data-section-id");if(e){const t=document.getElementById(e);t&&o.push({id:e,element:t})}});function l(){let e=o[0]?.id;for(const{id:t,element:r}of o)r.getBoundingClientRect().top<=100&&(e=t);a.forEach(t=>{const r=t.getAttribute("data-section-id");t.classList.toggle("active",r===e)})}let s=!1;window.addEventListener("scroll",()=>{s||(requestAnimationFrame(()=>{l(),s=!1}),s=!0)}),l();const d=document.getElementById("spec-toc-toggle"),c=document.getElementById("spec-toc-drawer"),g=c?.querySelector("[data-toc-backdrop]"),m=c?.querySelector("[data-toc-close]"),v=c?.querySelectorAll("[data-toc-link]");function p(){c?.classList.remove("hidden"),document.body.style.overflow="hidden"}function i(){c?.classList.add("hidden"),document.body.style.overflow=""}d?.addEventListener("click",p),g?.addEventListener("click",i),m?.addEventListener("click",i),v?.forEach(n=>{n.addEventListener("click",i)});const f=document.getElementById("spec");f&&d&&new IntersectionObserver(([e])=>{d.classList.toggle("hidden",!e.isIntersecting)},{threshold:0}).observe(f)}u();document.addEventListener("astro:after-swap",u);</script> </div> <!-- Main content --> <div class="flex-1 min-w-0" data-astro-cid-6lwcykzv> <article class="prose-spec spec-content" data-astro-cid-6lwcykzv> <!-- Terminology --> <section id="terminology" data-astro-cid-6lwcykzv> <h2 data-astro-cid-6lwcykzv>Terminology</h2> <ul>
|
||||
</span> <button class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-800" data-toc-close aria-label="Close"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path> </svg> </button> </div> <nav class="space-y-1"> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> The Master Branch </a><a href="#spec-changes" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Changes </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Git Best Practices </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Releases </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Bug Fixes & Rollback </a><a href="#spec-maintenance-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Maintenance Releases </a> </nav> </div> </div> <script type="module">function u(){const a=document.querySelectorAll("[data-sidebar-link]"),o=[];a.forEach(n=>{const e=n.getAttribute("data-section-id");if(e){const t=document.getElementById(e);t&&o.push({id:e,element:t})}});function l(){let e=o[0]?.id;for(const{id:t,element:r}of o)r.getBoundingClientRect().top<=100&&(e=t);a.forEach(t=>{const r=t.getAttribute("data-section-id");t.classList.toggle("active",r===e)})}let s=!1;window.addEventListener("scroll",()=>{s||(requestAnimationFrame(()=>{l(),s=!1}),s=!0)}),l();const d=document.getElementById("spec-toc-toggle"),c=document.getElementById("spec-toc-drawer"),g=c?.querySelector("[data-toc-backdrop]"),m=c?.querySelector("[data-toc-close]"),v=c?.querySelectorAll("[data-toc-link]");function p(){c?.classList.remove("hidden"),document.body.style.overflow="hidden"}function i(){c?.classList.add("hidden"),document.body.style.overflow=""}d?.addEventListener("click",p),g?.addEventListener("click",i),m?.addEventListener("click",i),v?.forEach(n=>{n.addEventListener("click",i)});const f=document.getElementById("spec");f&&d&&new IntersectionObserver(([e])=>{d.classList.toggle("hidden",!e.isIntersecting)},{threshold:0}).observe(f)}u();document.addEventListener("astro:after-swap",u);</script> </div> <!-- Main content --> <div class="flex-1 min-w-0"> <article class="prose-spec"> <!-- Terminology --> <section id="terminology"> <h2>Terminology</h2> <ul>
|
||||
<li><strong>Master Branch</strong> - Must always have passing tests, is considered bleeding
|
||||
edge, and must be named <code>master</code>.</li>
|
||||
<li><strong>Change Branches</strong> - Any branch that introduces changes like a new feature, a
|
||||
@@ -206,7 +207,7 @@ and a git tag named according to the new version string placed on said commit.</
|
||||
<li><strong>Maintenance Release</strong> - Just like a regular release, except the version bump
|
||||
commit and release tag are on a maintenance branch instead of the master
|
||||
branch.</li>
|
||||
</ul> </section> <!-- Main specification --> <section id="specification" data-astro-cid-6lwcykzv> <h2 data-astro-cid-6lwcykzv>Specification</h2> <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
||||
</ul> </section> <!-- Main specification --> <section id="specification"> <h2>Specification</h2> <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
||||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
||||
interpreted as described in <a href="https://tools.ietf.org/html/rfc2119">RFC 2119</a>.</p>
|
||||
<ol>
|
||||
@@ -346,14 +347,9 @@ into the master branch, that work should have happened against the master
|
||||
branch in the first place.</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol> </section> </article> </div> </div> </div> </section> <section id="faq" class="py-20 sm:py-28 bg-gray-100 dark:bg-slate-900/30"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">FAQ</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
</ol> </section> </article> </div> </div> </div> </section> <section id="faq" class="py-20 sm:py-28"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">FAQ</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
Common questions about Git Common-Flow
|
||||
</p> </div> <!-- FAQ Items --> <div class="space-y-0"> </div> </div> </div> </section> <script type="module">function n(){document.querySelectorAll("[data-faq-item]").forEach(r=>{const t=r.querySelector("[data-faq-trigger]"),a=r.querySelector("[data-faq-content]"),s=r.querySelector("[data-faq-icon]");!t||!a||!s||t.addEventListener("click",()=>{const e=t.getAttribute("aria-expanded")==="true";t.setAttribute("aria-expanded",e?"false":"true"),a.classList.toggle("grid-rows-[1fr]",!e),a.classList.toggle("grid-rows-[0fr]",e),s.classList.toggle("rotate-180",!e)})})}n();document.addEventListener("astro:after-swap",n);</script> </main> <footer class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"> <div class="section-container"> <p>
|
||||
Git Common-Flow is authored by
|
||||
<a href="https://jimeh.me/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer">
|
||||
Jim Myhrberg
|
||||
</a> </p> <p class="mt-2"> <a href="https://creativecommons.org/licenses/by/4.0/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer">
|
||||
CC BY 4.0
|
||||
</a> </p> </div> </footer> <!-- Re-init theme on Astro page transitions --> <script type="module">document.addEventListener("astro:after-swap",()=>{const e=localStorage.getItem("theme");e==="dark"||!e&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")});</script> </body> </html>
|
||||
</p> </div> <!-- FAQ Items --> <div class="space-y-0"> </div> </div> </div> </section> <script type="module">function n(){document.querySelectorAll("[data-faq-item]").forEach(r=>{const t=r.querySelector("[data-faq-trigger]"),a=r.querySelector("[data-faq-content]"),s=r.querySelector("[data-faq-icon]");!t||!a||!s||t.addEventListener("click",()=>{const e=t.getAttribute("aria-expanded")==="true";t.setAttribute("aria-expanded",e?"false":"true"),a.classList.toggle("grid-rows-[1fr]",!e),a.classList.toggle("grid-rows-[0fr]",e),s.classList.toggle("rotate-180",!e)})})}n();document.addEventListener("astro:after-swap",n);</script> </main> <footer class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"> <div class="section-container"> <p> Git Common-Flow is authored by
|
||||
<a href="https://jimeh.me/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer"> Jim Myhrberg </a> </p> <p class="mt-2"> <a href="https://creativecommons.org/licenses/by/4.0/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer"> CC BY 4.0 </a> </p> </div> </footer> <!-- Re-init theme on Astro page transitions --> <script type="module">document.addEventListener("astro:after-swap",()=>{const e=localStorage.getItem("theme");e==="dark"||!e&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")});</script> </body> </html>
|
||||
@@ -8,9 +8,7 @@
|
||||
document.documentElement.classList.add("dark");
|
||||
}
|
||||
})();
|
||||
</script><link rel="stylesheet" href="/_astro/index.BQPwFnAt.css">
|
||||
<style>.spec-content[data-astro-cid-x2lc2h5w] p:last-child{margin-bottom:0}.spec-content[data-astro-cid-x2lc2h5w] a{color:var(--color-accent)}.spec-content[data-astro-cid-x2lc2h5w] a:hover{color:var(--color-accent-light)}.sidebar-link[data-astro-cid-lfaoh65k].active{color:#0284c7;background-color:#0ea5e926}.dark .sidebar-link[data-astro-cid-lfaoh65k].active{color:#38bdf8;background-color:#0ea5e933}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar{width:4px}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-track{background:transparent}#spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-thumb{background-color:#e5e5e5;border-radius:2px}.dark #spec-sidebar[data-astro-cid-lfaoh65k]::-webkit-scrollbar-thumb{background-color:#1e293b}.spec-content[data-astro-cid-6lwcykzv]{max-width:var(--content-max-width)}.spec-content[data-astro-cid-6lwcykzv] h2{font-family:var(--font-display);font-size:1.75rem;font-weight:700;margin-top:3rem;margin-bottom:1.5rem;padding-bottom:.75rem;scroll-margin-top:calc(var(--header-height) + 2rem);border-bottom:1px solid #e5e5e5;color:#0a0a0a}.dark .spec-content[data-astro-cid-6lwcykzv] h2{border-bottom-color:#1e293b;color:#f8fafc}.spec-content[data-astro-cid-6lwcykzv] h2:first-child{margin-top:0}.spec-content[data-astro-cid-6lwcykzv] h3{font-family:var(--font-display);font-size:1.25rem;font-weight:600;margin-top:2rem;margin-bottom:1rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] h3{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] p{margin-bottom:1.25rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] p{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] strong{font-weight:600;color:#0a0a0a}.dark .spec-content[data-astro-cid-6lwcykzv] strong{color:#f8fafc}.spec-content[data-astro-cid-6lwcykzv] ul{margin-bottom:1.25rem;padding-left:1.5rem}.spec-content[data-astro-cid-6lwcykzv] ol{margin-bottom:1.25rem;padding-left:2.5rem;counter-reset:item;list-style:none}.spec-content[data-astro-cid-6lwcykzv] ol>li{counter-increment:item;position:relative}.spec-content[data-astro-cid-6lwcykzv] ol>li:before{content:counters(item,".") ".";position:absolute;left:-2.5rem;width:2rem;text-align:right;font-weight:500;color:#737373}.spec-content[data-astro-cid-6lwcykzv] ol>li[id]{scroll-margin-top:calc(var(--header-height) + 2rem)}.spec-content[data-astro-cid-6lwcykzv] li{margin-bottom:.5rem;color:#525252}.dark .spec-content[data-astro-cid-6lwcykzv] li{color:#94a3b8}.spec-content[data-astro-cid-6lwcykzv] a{color:var(--color-accent);text-decoration:none;transition:color .15s ease}.spec-content[data-astro-cid-6lwcykzv] a:hover{color:var(--color-accent-light)}.spec-content[data-astro-cid-6lwcykzv] blockquote{border-left:3px solid var(--color-accent);padding-left:1.5rem;margin:1.5rem 0;font-style:italic;color:#737373}.spec-content[data-astro-cid-6lwcykzv] img{max-width:100%;height:auto;border-radius:8px;margin:2rem 0}
|
||||
</style></head> <body class="min-h-screen"> <header id="site-header" class="fixed top-0 inset-x-0 z-50 border-b border-transparent
|
||||
</script><link rel="stylesheet" href="/_astro/index._zunHdNh.css"></head> <body class="min-h-screen"> <header id="site-header" class="fixed top-0 inset-x-0 z-50 border-b border-transparent
|
||||
translate-y-[-100%] transition-transform duration-300
|
||||
backdrop-blur-xl bg-gray-50/85 dark:bg-slate-950/85"> <div class="max-w-6xl mx-auto px-4 sm:px-6 h-16 flex items-center justify-between"> <!-- Logo / Title + Version --> <div class="flex items-center gap-3"> <a href="#hero" class="flex items-center gap-3 no-underline
|
||||
text-gray-950 dark:text-slate-50
|
||||
@@ -30,23 +28,23 @@ v1.0.0-rc.5 </a><a href="/spec/1.0.0-rc.4" role="option" aria-selected="false" c
|
||||
v1.0.0-rc.4 </a><a href="/spec/1.0.0-rc.3" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.3 </a><a href="/spec/1.0.0-rc.2" role="option" aria-selected="true" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50 bg-sky-500/15 dark:bg-sky-500/20 text-sky-600 dark:text-sky-400">
|
||||
v1.0.0-rc.2 </a><a href="/spec/1.0.0-rc.1" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.1 </a> </div> </div> <script type="module">function c(){document.querySelectorAll("[data-version-selector]").forEach(e=>{if(e.dataset.initialized)return;e.dataset.initialized="true";const t=e.querySelector("[data-version-trigger]"),a=e.querySelector("[data-version-dropdown]"),n=e.querySelector("[data-arrow-icon]");if(!t||!a)return;const u=()=>{a.dataset.open="true",t.setAttribute("aria-expanded","true"),n&&(n.style.transform="rotate(180deg)")},o=()=>{delete a.dataset.open,t.setAttribute("aria-expanded","false"),n&&(n.style.transform="")};t.addEventListener("click",r=>{r.stopPropagation();const l=a.dataset.open==="true";document.querySelectorAll("[data-version-dropdown][data-open]").forEach(s=>{delete s.dataset.open;const i=s.previousElementSibling;i?.setAttribute("aria-expanded","false");const d=i?.querySelector("[data-arrow-icon]");d&&(d.style.transform="")}),l?o():u()}),document.addEventListener("click",r=>{e.contains(r.target)||o()}),document.addEventListener("keydown",r=>{r.key==="Escape"&&a.dataset.open==="true"&&(o(),t.focus())})})}c();document.addEventListener("astro:after-swap",c);</script> </div> </div> <!-- Desktop Navigation --> <nav class="hidden md:flex items-center gap-1"> <a href="#about" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
v1.0.0-rc.1 </a> </div> </div> <script type="module">function c(){document.querySelectorAll("[data-version-selector]").forEach(e=>{if(e.dataset.initialized)return;e.dataset.initialized="true";const t=e.querySelector("[data-version-trigger]"),a=e.querySelector("[data-version-dropdown]"),n=e.querySelector("[data-arrow-icon]");if(!t||!a)return;const u=()=>{a.dataset.open="true",t.setAttribute("aria-expanded","true"),n&&(n.style.transform="rotate(180deg)")},o=()=>{delete a.dataset.open,t.setAttribute("aria-expanded","false"),n&&(n.style.transform="")};t.addEventListener("click",r=>{r.stopPropagation();const l=a.dataset.open==="true";document.querySelectorAll("[data-version-dropdown][data-open]").forEach(s=>{delete s.dataset.open;const i=s.previousElementSibling;i?.setAttribute("aria-expanded","false");const d=i?.querySelector("[data-arrow-icon]");d&&(d.style.transform="")}),l?o():u()}),document.addEventListener("click",r=>{e.contains(r.target)||o()}),document.addEventListener("keydown",r=>{r.key==="Escape"&&a.dataset.open==="true"&&(o(),t.focus())})})}c();document.addEventListener("astro:after-swap",c);</script> </div> </div> <!-- Desktop Navigation --> <nav class="hidden md:flex items-center gap-1"> <a href="#about" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="about">
|
||||
About
|
||||
</a> <a href="#spec" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
</a> <a href="#spec" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="spec">
|
||||
Spec
|
||||
</a> <a href="#faq" class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
</a> <a href="#faq" class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50">
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50" data-nav-link data-section-id="faq">
|
||||
FAQ
|
||||
</a> </nav> <!-- Right side: Theme, GitHub --> <div class="flex items-center gap-3"> <button data-theme-toggle type="button" class="p-2 rounded-lg transition-colors duration-200
|
||||
text-gray-500 dark:text-slate-500
|
||||
@@ -73,13 +71,16 @@ v1.0.0-rc.5 </a><a href="/spec/1.0.0-rc.4" role="option" aria-selected="false" c
|
||||
v1.0.0-rc.4 </a><a href="/spec/1.0.0-rc.3" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.3 </a><a href="/spec/1.0.0-rc.2" role="option" aria-selected="true" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50 bg-sky-500/15 dark:bg-sky-500/20 text-sky-600 dark:text-sky-400">
|
||||
v1.0.0-rc.2 </a><a href="/spec/1.0.0-rc.1" role="option" aria-selected="false" class="block px-3 py-2 font-mono text-sm rounded transition-colors text-gray-600 dark:text-slate-400 hover:bg-gray-100 dark:hover:bg-slate-800 hover:text-gray-950 dark:hover:text-slate-50">
|
||||
v1.0.0-rc.1 </a> </div> </div> </div> <a href="#about" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
v1.0.0-rc.1 </a> </div> </div> </div> <a href="#about" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="about">
|
||||
About
|
||||
</a> <a href="#spec" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
</a> <a href="#spec" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="spec">
|
||||
Spec
|
||||
</a> <a href="#faq" class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600">
|
||||
</a> <a href="#faq" class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600" data-nav-link data-section-id="faq">
|
||||
FAQ
|
||||
</a> </div> </nav> </header> <script type="module">function o(){const e=document.getElementById("site-header"),n=document.getElementById("hero"),s=document.getElementById("mobile-menu-btn"),t=document.getElementById("mobile-nav");if(!e||!n)return;const d=Math.floor(window.innerHeight/2);new IntersectionObserver(([r])=>{r.isIntersecting?(e.classList.add("translate-y-[-100%]"),e.classList.remove("border-gray-200","dark:border-slate-800")):(e.classList.remove("translate-y-[-100%]"),e.classList.add("border-gray-200","dark:border-slate-800"))},{threshold:0,rootMargin:`-${d}px 0px 0px 0px`}).observe(n),s&&t&&(s.addEventListener("click",()=>{t.classList.toggle("hidden")}),t.querySelectorAll("a").forEach(r=>{r.addEventListener("click",()=>{t.classList.add("hidden")})}))}o();document.addEventListener("astro:after-swap",o);</script> <main> <section id="hero" class="relative min-h-[75vh] flex flex-col items-center justify-center
|
||||
</a> </div> </nav> </header> <script type="module">function f(){const n=document.getElementById("site-header"),g=document.getElementById("hero"),o=document.getElementById("mobile-menu-btn"),s=document.getElementById("mobile-nav");if(!n||!g)return;const v=64;function c(){window.scrollY>=v?(n.classList.remove("translate-y-[-100%]"),n.classList.add("border-gray-200","dark:border-slate-800")):(n.classList.add("translate-y-[-100%]"),n.classList.remove("border-gray-200","dark:border-slate-800"))}window.addEventListener("scroll",c,{passive:!0}),c(),o&&s&&(o.addEventListener("click",()=>{s.classList.toggle("hidden")}),s.querySelectorAll("a").forEach(i=>{i.addEventListener("click",()=>{s.classList.add("hidden")})}));const r=document.querySelectorAll("[data-nav-link]"),l=[],u=new Set;r.forEach(i=>{const e=i.getAttribute("data-section-id");if(e&&!u.has(e)){u.add(e);const t=document.getElementById(e);t&&l.push({id:e,element:t})}});function m(){let e=null;for(const{id:t,element:d}of l)d.getBoundingClientRect().top<=100&&(e=t);r.forEach(t=>{const d=t.getAttribute("data-section-id");t.classList.toggle("active",d===e)})}let a=!1;window.addEventListener("scroll",()=>{a||(requestAnimationFrame(()=>{m(),a=!1}),a=!0)}),m()}f();document.addEventListener("astro:after-swap",f);</script> <main> <section id="hero" class="relative min-h-[75vh] flex flex-col items-center justify-center
|
||||
px-6 py-16 overflow-hidden"> <!-- Background gradient/texture --> <div class="absolute inset-0 bg-gradient-to-b
|
||||
from-gray-100 to-gray-50
|
||||
dark:from-slate-900 dark:to-slate-950"></div> <!-- Subtle grid pattern --> <div class="absolute inset-0 opacity-[0.03] dark:opacity-[0.05]
|
||||
@@ -146,45 +147,45 @@ FAQ
|
||||
</a> </nav> </div> <!-- Scroll indicator --> <a href="#about" class="absolute bottom-8 left-1/2 -translate-x-1/2
|
||||
animate-fade-in delay-700
|
||||
text-gray-500 dark:text-slate-500
|
||||
hover:text-sky-600 transition-colors" aria-label="Scroll to content"> <svg class="w-6 h-6 animate-bounce-subtle" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path> </svg> </a> </section> <section id="about" class="py-20 sm:py-28" data-astro-cid-x2lc2h5w> <div class="section-container" data-astro-cid-x2lc2h5w> <div class="max-w-3xl mx-auto" data-astro-cid-x2lc2h5w> <!-- Section header --> <div class="mb-12 text-center" data-astro-cid-x2lc2h5w> <h2 class="text-3xl sm:text-4xl mb-4" data-astro-cid-x2lc2h5w>About Common-Flow</h2> <p class="text-lg text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w>
|
||||
hover:text-sky-600 transition-colors" aria-label="Scroll to content"> <svg class="w-6 h-6 animate-bounce-subtle" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path> </svg> </a> </section> <section id="about" class="py-20 sm:py-28"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">About Common-Flow</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
A practical git workflow that combines the best of GitHub Flow with
|
||||
versioned releases
|
||||
</p> </div> <!-- Introduction --> <div class="prose-spec mb-12" data-astro-cid-x2lc2h5w> <div class="spec-content" data-astro-cid-x2lc2h5w></div> </div> <!-- Summary as feature cards --> <div class="mb-16" data-astro-cid-x2lc2h5w> <h3 class="text-xl font-display font-semibold mb-6
|
||||
text-gray-950 dark:text-slate-50" data-astro-cid-x2lc2h5w>
|
||||
</p> </div> <!-- Introduction --> <div class="prose-spec mb-12"></div> <!-- Summary as feature cards --> <div class="mb-16"> <h3 class="text-xl font-display font-semibold mb-6
|
||||
text-gray-950 dark:text-slate-50">
|
||||
Key Principles
|
||||
</h3> <div class="spec-content prose-spec" data-astro-cid-x2lc2h5w><p>Common-Flow is an attempt to gather a sensible selection of the most common
|
||||
</h3> <div class="prose-spec"><p>Common-Flow is an attempt to gather a sensible selection of the most common
|
||||
usage patterns of git into a single and concise specification. It is based on
|
||||
the <a href="http://scottchacon.com/2011/08/31/github-flow.html">original variant</a>
|
||||
of <a href="https://guides.github.com/introduction/flow/">GitHub Flow</a>, while taking
|
||||
into account how a lot of open source projects use git.</p>
|
||||
<p>TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned
|
||||
releases, maintenance releases for old versions, and without the requirement to
|
||||
deploy to production all the time.</p></div> </div> <!-- Feedback & License --> <div class="pt-8 border-t border-gray-200 dark:border-slate-800" data-astro-cid-x2lc2h5w> <div class="grid sm:grid-cols-2 gap-8" data-astro-cid-x2lc2h5w> <div data-astro-cid-x2lc2h5w> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-x2lc2h5w>
|
||||
deploy to production all the time.</p></div> </div> <!-- Feedback & License --> <div class="pt-8 border-t border-gray-200 dark:border-slate-800"> <div class="grid sm:grid-cols-2 gap-8"> <div> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Feedback
|
||||
</h4> <p class="text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w>
|
||||
Please <a href="https://github.com/jimeh/common-flow/issues" class="text-sky-600 hover:text-sky-400" target="_blank" rel="noopener noreferrer" data-astro-cid-x2lc2h5w>open an issue on GitHub</a>.
|
||||
</p> </div> <div data-astro-cid-x2lc2h5w> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-x2lc2h5w>
|
||||
</h4> <p class="text-gray-600 dark:text-slate-400">
|
||||
Please <a href="https://github.com/jimeh/common-flow/issues" class="text-sky-600 hover:text-sky-400" target="_blank" rel="noopener noreferrer">open an issue on GitHub</a>.
|
||||
</p> </div> <div> <h4 class="text-sm font-semibold uppercase tracking-wider mb-3
|
||||
text-gray-500 dark:text-slate-500">
|
||||
License
|
||||
</h4> <div class="spec-content text-gray-600 dark:text-slate-400" data-astro-cid-x2lc2h5w><p><a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons - CC BY 3.0</a></p></div> </div> </div> </div> </div> </div> </section> <section id="spec" class="py-20 sm:py-28" data-astro-cid-6lwcykzv> <div class="section-container" data-astro-cid-6lwcykzv> <!-- Section header --> <div class="max-w-3xl mx-auto mb-12 text-center" data-astro-cid-6lwcykzv> <h2 class="text-3xl sm:text-4xl mb-4" data-astro-cid-6lwcykzv>The Specification</h2> <p class="text-lg text-gray-600 dark:text-slate-400" data-astro-cid-6lwcykzv>
|
||||
</h4> <div class="text-gray-600 dark:text-slate-400"><p><a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons - CC BY 3.0</a></p></div> </div> </div> </div> </div> </div> </section> <section id="spec" class="py-20 sm:py-28"> <div class="section-container"> <!-- Section header --> <div class="max-w-3xl mx-auto mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">The Specification</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
The complete Git Common-Flow specification
|
||||
</p> </div> <!-- Content with sidebar --> <div class="lg:flex lg:gap-8" data-astro-cid-6lwcykzv> <!-- Sidebar --> <div class="lg:w-64 lg:flex-shrink-0" data-astro-cid-6lwcykzv> <aside id="spec-sidebar" class="hidden lg:block lg:sticky lg:top-24 lg:self-start
|
||||
</p> </div> <!-- Content with sidebar --> <div class="lg:flex lg:gap-8"> <!-- Sidebar --> <div class="lg:w-64 lg:flex-shrink-0"> <aside id="spec-sidebar" class="hidden lg:block lg:sticky lg:top-24 lg:self-start
|
||||
lg:max-h-[calc(100vh-8rem)] lg:overflow-y-auto
|
||||
lg:pr-8 lg:mr-8 lg:border-r border-gray-200 dark:border-slate-800" data-astro-cid-lfaoh65k> <nav class="space-y-1 py-2" data-astro-cid-lfaoh65k> <div class="text-xs font-semibold uppercase tracking-wider mb-4
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-lfaoh65k>
|
||||
lg:pr-8 lg:mr-8 lg:border-r border-gray-200 dark:border-slate-800"> <nav class="space-y-1 py-2"> <div class="text-xs font-semibold uppercase tracking-wider mb-4
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Table of Contents
|
||||
</div> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="terminology" data-astro-cid-lfaoh65k> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="specification" data-astro-cid-lfaoh65k> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-the-master-branch" data-astro-cid-lfaoh65k> The Master Branch </a><a href="#spec-change-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-change-branches" data-astro-cid-lfaoh65k> Change Branches </a><a href="#spec-pull-requests" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-pull-requests" data-astro-cid-lfaoh65k> Pull Requests </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-versioning" data-astro-cid-lfaoh65k> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-releases" data-astro-cid-lfaoh65k> Releases </a><a href="#spec-release-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-release-branches" data-astro-cid-lfaoh65k> Release Branches </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-bug-fixes-rollback" data-astro-cid-lfaoh65k> Bug Fixes & Rollback </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-git-best-practices" data-astro-cid-lfaoh65k> Git Best Practices </a> </nav> </aside> <!-- Mobile floating button --> <button id="spec-toc-toggle" class="lg:hidden fixed bottom-6 right-6 z-40
|
||||
</div> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="terminology"> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-sidebar-link data-section-id="specification"> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-the-master-branch"> The Master Branch </a><a href="#spec-change-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-change-branches"> Change Branches </a><a href="#spec-pull-requests" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-pull-requests"> Pull Requests </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-versioning"> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-releases"> Releases </a><a href="#spec-release-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-release-branches"> Release Branches </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-bug-fixes-rollback"> Bug Fixes & Rollback </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-sidebar-link data-section-id="spec-git-best-practices"> Git Best Practices </a> </nav> </aside> <!-- Mobile floating button --> <button id="spec-toc-toggle" class="lg:hidden fixed bottom-6 right-6 z-40
|
||||
w-12 h-12 rounded-full shadow-lg
|
||||
bg-sky-600 text-white
|
||||
flex items-center justify-center
|
||||
hover:bg-sky-500
|
||||
transition-all duration-200" aria-label="Jump to section" data-astro-cid-lfaoh65k> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-lfaoh65k> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7" data-astro-cid-lfaoh65k></path> </svg> </button> <!-- Mobile TOC drawer --> <div id="spec-toc-drawer" class="lg:hidden fixed inset-0 z-50 hidden" data-toc-drawer data-astro-cid-lfaoh65k> <!-- Backdrop --> <div class="absolute inset-0 bg-black/50" data-toc-backdrop data-astro-cid-lfaoh65k></div> <!-- Drawer --> <div class="absolute bottom-0 inset-x-0 max-h-[70vh] overflow-y-auto
|
||||
transition-all duration-200" aria-label="Jump to section"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"></path> </svg> </button> <!-- Mobile TOC drawer --> <div id="spec-toc-drawer" class="lg:hidden fixed inset-0 z-50 hidden" data-toc-drawer> <!-- Backdrop --> <div class="absolute inset-0 bg-black/50" data-toc-backdrop></div> <!-- Drawer --> <div class="absolute bottom-0 inset-x-0 max-h-[70vh] overflow-y-auto
|
||||
bg-gray-50 dark:bg-slate-950
|
||||
rounded-t-2xl shadow-xl p-6" data-astro-cid-lfaoh65k> <div class="flex items-center justify-between mb-4" data-astro-cid-lfaoh65k> <span class="text-sm font-semibold uppercase tracking-wider
|
||||
text-gray-500 dark:text-slate-500" data-astro-cid-lfaoh65k>
|
||||
rounded-t-2xl shadow-xl p-6"> <div class="flex items-center justify-between mb-4"> <span class="text-sm font-semibold uppercase tracking-wider
|
||||
text-gray-500 dark:text-slate-500">
|
||||
Jump to Section
|
||||
</span> <button class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-800" data-toc-close aria-label="Close" data-astro-cid-lfaoh65k> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-lfaoh65k> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-astro-cid-lfaoh65k></path> </svg> </button> </div> <nav class="space-y-1" data-astro-cid-lfaoh65k> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link data-astro-cid-lfaoh65k> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link data-astro-cid-lfaoh65k> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> The Master Branch </a><a href="#spec-change-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Change Branches </a><a href="#spec-pull-requests" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Pull Requests </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Releases </a><a href="#spec-release-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Release Branches </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Bug Fixes & Rollback </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link data-astro-cid-lfaoh65k> Git Best Practices </a> </nav> </div> </div> <script type="module">function u(){const a=document.querySelectorAll("[data-sidebar-link]"),o=[];a.forEach(n=>{const e=n.getAttribute("data-section-id");if(e){const t=document.getElementById(e);t&&o.push({id:e,element:t})}});function l(){let e=o[0]?.id;for(const{id:t,element:r}of o)r.getBoundingClientRect().top<=100&&(e=t);a.forEach(t=>{const r=t.getAttribute("data-section-id");t.classList.toggle("active",r===e)})}let s=!1;window.addEventListener("scroll",()=>{s||(requestAnimationFrame(()=>{l(),s=!1}),s=!0)}),l();const d=document.getElementById("spec-toc-toggle"),c=document.getElementById("spec-toc-drawer"),g=c?.querySelector("[data-toc-backdrop]"),m=c?.querySelector("[data-toc-close]"),v=c?.querySelectorAll("[data-toc-link]");function p(){c?.classList.remove("hidden"),document.body.style.overflow="hidden"}function i(){c?.classList.add("hidden"),document.body.style.overflow=""}d?.addEventListener("click",p),g?.addEventListener("click",i),m?.addEventListener("click",i),v?.forEach(n=>{n.addEventListener("click",i)});const f=document.getElementById("spec");f&&d&&new IntersectionObserver(([e])=>{d.classList.toggle("hidden",!e.isIntersecting)},{threshold:0}).observe(f)}u();document.addEventListener("astro:after-swap",u);</script> </div> <!-- Main content --> <div class="flex-1 min-w-0" data-astro-cid-6lwcykzv> <article class="prose-spec spec-content" data-astro-cid-6lwcykzv> <!-- Terminology --> <section id="terminology" data-astro-cid-6lwcykzv> <h2 data-astro-cid-6lwcykzv>Terminology</h2> <ul>
|
||||
</span> <button class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-800" data-toc-close aria-label="Close"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path> </svg> </button> </div> <nav class="space-y-1"> <a href="#terminology" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link> Terminology </a><a href="#specification" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800" data-toc-link> Specification </a><a href="#spec-the-master-branch" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> The Master Branch </a><a href="#spec-change-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Change Branches </a><a href="#spec-pull-requests" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Pull Requests </a><a href="#spec-versioning" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Versioning </a><a href="#spec-releases" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Releases </a><a href="#spec-release-branches" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Release Branches </a><a href="#spec-bug-fixes-rollback" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Bug Fixes & Rollback </a><a href="#spec-git-best-practices" class="sidebar-link block py-2 px-4 text-sm rounded-md transition-colors text-gray-500 hover:text-gray-950 hover:bg-gray-100 dark:text-slate-500 dark:hover:text-slate-50 dark:hover:bg-slate-800 pl-6 text-[0.8125rem]" data-toc-link> Git Best Practices </a> </nav> </div> </div> <script type="module">function u(){const a=document.querySelectorAll("[data-sidebar-link]"),o=[];a.forEach(n=>{const e=n.getAttribute("data-section-id");if(e){const t=document.getElementById(e);t&&o.push({id:e,element:t})}});function l(){let e=o[0]?.id;for(const{id:t,element:r}of o)r.getBoundingClientRect().top<=100&&(e=t);a.forEach(t=>{const r=t.getAttribute("data-section-id");t.classList.toggle("active",r===e)})}let s=!1;window.addEventListener("scroll",()=>{s||(requestAnimationFrame(()=>{l(),s=!1}),s=!0)}),l();const d=document.getElementById("spec-toc-toggle"),c=document.getElementById("spec-toc-drawer"),g=c?.querySelector("[data-toc-backdrop]"),m=c?.querySelector("[data-toc-close]"),v=c?.querySelectorAll("[data-toc-link]");function p(){c?.classList.remove("hidden"),document.body.style.overflow="hidden"}function i(){c?.classList.add("hidden"),document.body.style.overflow=""}d?.addEventListener("click",p),g?.addEventListener("click",i),m?.addEventListener("click",i),v?.forEach(n=>{n.addEventListener("click",i)});const f=document.getElementById("spec");f&&d&&new IntersectionObserver(([e])=>{d.classList.toggle("hidden",!e.isIntersecting)},{threshold:0}).observe(f)}u();document.addEventListener("astro:after-swap",u);</script> </div> <!-- Main content --> <div class="flex-1 min-w-0"> <article class="prose-spec"> <!-- Terminology --> <section id="terminology"> <h2>Terminology</h2> <ul>
|
||||
<li><strong>Master Branch</strong> - Must always have passing tests, is considered bleeding
|
||||
edge, and must be named <code>master</code>.</li>
|
||||
<li><strong>Change Branches</strong> - Any branch that introduces changes like a new feature, a
|
||||
@@ -201,7 +202,7 @@ its merge target, allowing others to review, discuss and approve the changes.</l
|
||||
to the new version string placed on said commit.</li>
|
||||
<li><strong>Release Branches</strong> - Used both for short-term preparations of a release, and
|
||||
also for long-term maintenance of older version.</li>
|
||||
</ul> </section> <!-- Main specification --> <section id="specification" data-astro-cid-6lwcykzv> <h2 data-astro-cid-6lwcykzv>Specification</h2> <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
||||
</ul> </section> <!-- Main specification --> <section id="specification"> <h2>Specification</h2> <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
||||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
||||
interpreted as described in <a href="https://tools.ietf.org/html/rfc2119">RFC 2119</a>.</p>
|
||||
<ol>
|
||||
@@ -380,14 +381,9 @@ and creates a merge commit to mark the integration of the branch with
|
||||
master.</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol> </section> </article> </div> </div> </div> </section> <section id="faq" class="py-20 sm:py-28 bg-gray-100 dark:bg-slate-900/30"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">FAQ</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
</ol> </section> </article> </div> </div> </div> </section> <section id="faq" class="py-20 sm:py-28"> <div class="section-container"> <div class="max-w-3xl mx-auto"> <!-- Section header --> <div class="mb-12 text-center"> <h2 class="text-3xl sm:text-4xl mb-4">FAQ</h2> <p class="text-lg text-gray-600 dark:text-slate-400">
|
||||
Common questions about Git Common-Flow
|
||||
</p> </div> <!-- FAQ Items --> <div class="space-y-0"> </div> </div> </div> </section> <script type="module">function n(){document.querySelectorAll("[data-faq-item]").forEach(r=>{const t=r.querySelector("[data-faq-trigger]"),a=r.querySelector("[data-faq-content]"),s=r.querySelector("[data-faq-icon]");!t||!a||!s||t.addEventListener("click",()=>{const e=t.getAttribute("aria-expanded")==="true";t.setAttribute("aria-expanded",e?"false":"true"),a.classList.toggle("grid-rows-[1fr]",!e),a.classList.toggle("grid-rows-[0fr]",e),s.classList.toggle("rotate-180",!e)})})}n();document.addEventListener("astro:after-swap",n);</script> </main> <footer class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"> <div class="section-container"> <p>
|
||||
Git Common-Flow is authored by
|
||||
<a href="https://jimeh.me/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer">
|
||||
Jim Myhrberg
|
||||
</a> </p> <p class="mt-2"> <a href="https://creativecommons.org/licenses/by/4.0/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer">
|
||||
CC BY 4.0
|
||||
</a> </p> </div> </footer> <!-- Re-init theme on Astro page transitions --> <script type="module">document.addEventListener("astro:after-swap",()=>{const e=localStorage.getItem("theme");e==="dark"||!e&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")});</script> </body> </html>
|
||||
</p> </div> <!-- FAQ Items --> <div class="space-y-0"> </div> </div> </div> </section> <script type="module">function n(){document.querySelectorAll("[data-faq-item]").forEach(r=>{const t=r.querySelector("[data-faq-trigger]"),a=r.querySelector("[data-faq-content]"),s=r.querySelector("[data-faq-icon]");!t||!a||!s||t.addEventListener("click",()=>{const e=t.getAttribute("aria-expanded")==="true";t.setAttribute("aria-expanded",e?"false":"true"),a.classList.toggle("grid-rows-[1fr]",!e),a.classList.toggle("grid-rows-[0fr]",e),s.classList.toggle("rotate-180",!e)})})}n();document.addEventListener("astro:after-swap",n);</script> </main> <footer class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"> <div class="section-container"> <p> Git Common-Flow is authored by
|
||||
<a href="https://jimeh.me/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer"> Jim Myhrberg </a> </p> <p class="mt-2"> <a href="https://creativecommons.org/licenses/by/4.0/" class="hover:text-sky-600" target="_blank" rel="noopener noreferrer"> CC BY 4.0 </a> </p> </div> </footer> <!-- Re-init theme on Astro page transitions --> <script type="module">document.addEventListener("astro:after-swap",()=>{const e=localStorage.getItem("theme");e==="dark"||!e&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")});</script> </body> </html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -10,7 +10,7 @@ interface Props {
|
||||
const { introduction, summary, license } = Astro.props;
|
||||
---
|
||||
|
||||
<section id="about" class="py-20 sm:py-28 bg-gray-100 dark:bg-slate-900/30">
|
||||
<section id="about" class="py-20 sm:py-28">
|
||||
<div class="section-container">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
<!-- Section header -->
|
||||
@@ -23,9 +23,7 @@ const { introduction, summary, license } = Astro.props;
|
||||
</div>
|
||||
|
||||
<!-- Introduction -->
|
||||
<div class="prose-spec mb-12">
|
||||
<div class="spec-content" set:html={introduction} />
|
||||
</div>
|
||||
<div class="prose-spec mb-12" set:html={introduction} />
|
||||
|
||||
<!-- Summary as feature cards -->
|
||||
<div class="mb-16">
|
||||
@@ -35,7 +33,7 @@ const { introduction, summary, license } = Astro.props;
|
||||
>
|
||||
Key Principles
|
||||
</h3>
|
||||
<div class="spec-content prose-spec" set:html={summary} />
|
||||
<div class="prose-spec" set:html={summary} />
|
||||
</div>
|
||||
|
||||
<!-- Feedback & License -->
|
||||
@@ -65,27 +63,10 @@ const { introduction, summary, license } = Astro.props;
|
||||
>
|
||||
License
|
||||
</h4>
|
||||
<div
|
||||
class="spec-content text-gray-600 dark:text-slate-400"
|
||||
set:html={license}
|
||||
/>
|
||||
<div class="text-gray-600 dark:text-slate-400" set:html={license} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spec-content :global(p:last-child) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.spec-content :global(a) {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
.spec-content :global(a:hover) {
|
||||
color: var(--color-accent-light);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -8,7 +8,7 @@ interface Props {
|
||||
const { items } = Astro.props;
|
||||
---
|
||||
|
||||
<section id="faq" class="py-20 sm:py-28 bg-gray-100 dark:bg-slate-900/30">
|
||||
<section id="faq" class="py-20 sm:py-28">
|
||||
<div class="section-container">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
<!-- Section header -->
|
||||
@@ -58,7 +58,7 @@ const { items } = Astro.props;
|
||||
>
|
||||
<div class="overflow-hidden">
|
||||
<div
|
||||
class="pb-6 text-gray-600 dark:text-slate-400 prose-spec spec-content"
|
||||
class="pb-6 text-gray-600 dark:text-slate-400 prose-spec"
|
||||
set:html={item.answer}
|
||||
/>
|
||||
</div>
|
||||
|
||||
33
src/components/Footer.astro
Normal file
33
src/components/Footer.astro
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
import { config } from "../config";
|
||||
---
|
||||
|
||||
<footer
|
||||
class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"
|
||||
>
|
||||
<div class="section-container">
|
||||
<p>
|
||||
{config.title} is authored by
|
||||
<a
|
||||
href={config.authorUrl}
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{config.author}
|
||||
</a>
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
<a
|
||||
href={config.license.url}
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{config.license.name}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -43,31 +43,37 @@ const { version } = Astro.props;
|
||||
<nav class="hidden md:flex items-center gap-1">
|
||||
<a
|
||||
href="#about"
|
||||
class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50"
|
||||
data-nav-link
|
||||
data-section-id="about"
|
||||
>
|
||||
About
|
||||
</a>
|
||||
<a
|
||||
href="#spec"
|
||||
class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50"
|
||||
data-nav-link
|
||||
data-section-id="spec"
|
||||
>
|
||||
Spec
|
||||
</a>
|
||||
<a
|
||||
href="#faq"
|
||||
class="inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg
|
||||
transition-colors cursor-pointer
|
||||
class="nav-link inline-flex items-center px-4 py-2 text-sm font-medium
|
||||
rounded-lg transition-colors cursor-pointer
|
||||
text-gray-600 dark:text-slate-400
|
||||
hover:bg-gray-100 hover:text-gray-950
|
||||
dark:hover:bg-slate-800 dark:hover:text-slate-50"
|
||||
data-nav-link
|
||||
data-section-id="faq"
|
||||
>
|
||||
FAQ
|
||||
</a>
|
||||
@@ -133,19 +139,28 @@ const { version } = Astro.props;
|
||||
</div>
|
||||
<a
|
||||
href="#about"
|
||||
class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600"
|
||||
class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600"
|
||||
data-nav-link
|
||||
data-section-id="about"
|
||||
>
|
||||
About
|
||||
</a>
|
||||
<a
|
||||
href="#spec"
|
||||
class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600"
|
||||
class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600"
|
||||
data-nav-link
|
||||
data-section-id="spec"
|
||||
>
|
||||
Spec
|
||||
</a>
|
||||
<a
|
||||
href="#faq"
|
||||
class="block py-2 text-gray-600 dark:text-slate-400 hover:text-sky-600"
|
||||
class="nav-link block py-2 text-gray-600 dark:text-slate-400
|
||||
hover:text-sky-600"
|
||||
data-nav-link
|
||||
data-section-id="faq"
|
||||
>
|
||||
FAQ
|
||||
</a>
|
||||
@@ -162,23 +177,22 @@ const { version } = Astro.props;
|
||||
|
||||
if (!header || !hero) return;
|
||||
|
||||
// Show/hide header based on scroll past hero
|
||||
// Show header when top half of hero is above the fold
|
||||
const topMargin = Math.floor(window.innerHeight / 2);
|
||||
const observer = new IntersectionObserver(
|
||||
([entry]) => {
|
||||
if (entry.isIntersecting) {
|
||||
header.classList.add("translate-y-[-100%]");
|
||||
header.classList.remove("border-gray-200", "dark:border-slate-800");
|
||||
} else {
|
||||
header.classList.remove("translate-y-[-100%]");
|
||||
header.classList.add("border-gray-200", "dark:border-slate-800");
|
||||
}
|
||||
},
|
||||
{ threshold: 0, rootMargin: `-${topMargin}px 0px 0px 0px` }
|
||||
);
|
||||
// Show/hide header based on scroll position
|
||||
// Show header once scrolled down by the navbar height (64px)
|
||||
const navbarHeight = 64;
|
||||
|
||||
observer.observe(hero);
|
||||
function updateHeaderVisibility() {
|
||||
if (window.scrollY >= navbarHeight) {
|
||||
header.classList.remove("translate-y-[-100%]");
|
||||
header.classList.add("border-gray-200", "dark:border-slate-800");
|
||||
} else {
|
||||
header.classList.add("translate-y-[-100%]");
|
||||
header.classList.remove("border-gray-200", "dark:border-slate-800");
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("scroll", updateHeaderVisibility, { passive: true });
|
||||
updateHeaderVisibility();
|
||||
|
||||
// Mobile menu toggle
|
||||
if (mobileMenuBtn && mobileNav) {
|
||||
@@ -193,6 +207,53 @@ const { version } = Astro.props;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Active section tracking for nav links
|
||||
const navLinks = document.querySelectorAll("[data-nav-link]");
|
||||
const sections: { id: string; element: Element }[] = [];
|
||||
|
||||
// Collect unique section IDs
|
||||
const seenIds = new Set<string>();
|
||||
navLinks.forEach((link) => {
|
||||
const id = link.getAttribute("data-section-id");
|
||||
if (id && !seenIds.has(id)) {
|
||||
seenIds.add(id);
|
||||
const section = document.getElementById(id);
|
||||
if (section) {
|
||||
sections.push({ id, element: section });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function updateActiveNavSection() {
|
||||
const headerOffset = 100;
|
||||
let activeId: string | null = null;
|
||||
|
||||
for (const { id, element } of sections) {
|
||||
const rect = element.getBoundingClientRect();
|
||||
if (rect.top <= headerOffset) {
|
||||
activeId = id;
|
||||
}
|
||||
}
|
||||
|
||||
navLinks.forEach((link) => {
|
||||
const linkId = link.getAttribute("data-section-id");
|
||||
link.classList.toggle("active", linkId === activeId);
|
||||
});
|
||||
}
|
||||
|
||||
let ticking = false;
|
||||
window.addEventListener("scroll", () => {
|
||||
if (!ticking) {
|
||||
requestAnimationFrame(() => {
|
||||
updateActiveNavSection();
|
||||
ticking = false;
|
||||
});
|
||||
ticking = true;
|
||||
}
|
||||
});
|
||||
|
||||
updateActiveNavSection();
|
||||
}
|
||||
|
||||
// Initialize on load
|
||||
|
||||
@@ -219,34 +219,3 @@ const { items } = Astro.props;
|
||||
// Re-initialize on Astro page transitions
|
||||
document.addEventListener("astro:after-swap", initSpecSidebar);
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* Active state for sidebar links (toggled by JavaScript) */
|
||||
.sidebar-link.active {
|
||||
color: #0284c7;
|
||||
background-color: rgba(14, 165, 233, 0.15);
|
||||
}
|
||||
|
||||
:global(.dark) .sidebar-link.active {
|
||||
color: #38bdf8;
|
||||
background-color: rgba(14, 165, 233, 0.2);
|
||||
}
|
||||
|
||||
/* Scrollbar styling */
|
||||
#spec-sidebar::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
#spec-sidebar::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#spec-sidebar::-webkit-scrollbar-thumb {
|
||||
background-color: #e5e5e5;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
:global(.dark) #spec-sidebar::-webkit-scrollbar-thumb {
|
||||
background-color: #1e293b;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
export const config = {
|
||||
title: "Git Common Flow",
|
||||
title: "Git Common-Flow",
|
||||
description:
|
||||
"An attempt to gather a sensible selection of the most common usage " +
|
||||
"patterns of git into a single and concise specification.",
|
||||
author: "Jim Myhrberg",
|
||||
authorUrl: "https://jimeh.me/",
|
||||
hostname: "commonflow.org",
|
||||
url: "https://commonflow.org",
|
||||
repoUrl: "https://github.com/jimeh/common-flow",
|
||||
license: {
|
||||
name: "CC BY 4.0",
|
||||
url: "https://creativecommons.org/licenses/by/4.0/",
|
||||
},
|
||||
|
||||
currentVersion: "1.0.0-rc.5",
|
||||
versions: [
|
||||
|
||||
@@ -69,10 +69,10 @@ interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
||||
"master branch".
|
||||
2. The master branch MUST always be in a non-broken state with its test
|
||||
suite passing.
|
||||
4. The master branch IS NOT guaranteed to always work in production
|
||||
3. The master branch IS NOT guaranteed to always work in production
|
||||
environments. Despite test suites passing it may at times contain
|
||||
unfinished work. Only releases may be considered safe for production use.
|
||||
5. The master branch SHOULD always be in a "as near as possibly ready for
|
||||
4. The master branch SHOULD always be in a "as near as possibly ready for
|
||||
release/production" state to reduce any friction with creating a new
|
||||
release.
|
||||
3. Change Branches
|
||||
@@ -217,7 +217,7 @@ interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
||||
5. To create a new release from a long-term release branch, you MUST follow
|
||||
the same process as a release from the master branch, except the
|
||||
long-term release branch takes the place of the master branch.
|
||||
7. A long-term release branch should be treated with the same respect as the
|
||||
6. A long-term release branch should be treated with the same respect as the
|
||||
master branch. It is effectively the master branch for the release series
|
||||
in question. Meaning it MUST always be in a non-broken state, MUST NOT be
|
||||
force pushed to, etc.
|
||||
|
||||
@@ -9,6 +9,7 @@ import Hero from "../components/Hero.astro";
|
||||
import AboutSection from "../components/AboutSection.astro";
|
||||
import SpecSection from "../components/SpecSection.astro";
|
||||
import FAQSection from "../components/FAQSection.astro";
|
||||
import Footer from "../components/Footer.astro";
|
||||
import { parseSpecContent } from "../utils/parseSpecContent";
|
||||
import { config } from "../config";
|
||||
|
||||
@@ -54,34 +55,5 @@ const parsed = await parseSpecContent(markdown, version);
|
||||
<FAQSection items={parsed.faq} />
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer
|
||||
class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"
|
||||
>
|
||||
<div class="section-container">
|
||||
<p>
|
||||
Git Common-Flow is authored by
|
||||
<a
|
||||
href="https://jimeh.me/"
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Jim Myhrberg
|
||||
</a>
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
<a
|
||||
href="https://creativecommons.org/licenses/by/4.0/"
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
CC BY 4.0
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<Footer />
|
||||
</SinglePage>
|
||||
|
||||
@@ -9,6 +9,7 @@ import Hero from "../../components/Hero.astro";
|
||||
import AboutSection from "../../components/AboutSection.astro";
|
||||
import SpecSection from "../../components/SpecSection.astro";
|
||||
import FAQSection from "../../components/FAQSection.astro";
|
||||
import Footer from "../../components/Footer.astro";
|
||||
import { parseSpecContent } from "../../utils/parseSpecContent";
|
||||
import { config } from "../../config";
|
||||
|
||||
@@ -56,34 +57,5 @@ const parsed = await parseSpecContent(markdown, version);
|
||||
<FAQSection items={parsed.faq} />
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer
|
||||
class="py-8 text-center text-sm
|
||||
text-gray-500 dark:text-slate-500
|
||||
border-t border-gray-200 dark:border-slate-800"
|
||||
>
|
||||
<div class="section-container">
|
||||
<p>
|
||||
Git Common-Flow is authored by
|
||||
<a
|
||||
href="https://jimeh.me/"
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Jim Myhrberg
|
||||
</a>
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
<a
|
||||
href="https://creativecommons.org/licenses/by/4.0/"
|
||||
class="hover:text-sky-600"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
CC BY 4.0
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<Footer />
|
||||
</SinglePage>
|
||||
|
||||
@@ -57,13 +57,13 @@ html {
|
||||
font-weight: 400;
|
||||
line-height: 1.7;
|
||||
overflow-x: hidden;
|
||||
background-color: #fafafa;
|
||||
color: #0a0a0a;
|
||||
background-color: theme(colors.slate.50);
|
||||
color: theme(colors.slate.950);
|
||||
}
|
||||
|
||||
.dark body {
|
||||
background-color: #020617;
|
||||
color: #f8fafc;
|
||||
background-color: theme(colors.slate.950);
|
||||
color: theme(colors.slate.50);
|
||||
}
|
||||
|
||||
/* Typography */
|
||||
@@ -77,7 +77,7 @@ html {
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
letter-spacing: -0.02em;
|
||||
color: #0a0a0a;
|
||||
color: theme(colors.slate.950);
|
||||
}
|
||||
|
||||
.dark h1,
|
||||
@@ -86,7 +86,7 @@ html {
|
||||
.dark h4,
|
||||
.dark h5,
|
||||
.dark h6 {
|
||||
color: #f8fafc;
|
||||
color: theme(colors.slate.50);
|
||||
}
|
||||
|
||||
h1 {
|
||||
@@ -142,11 +142,11 @@ html {
|
||||
padding: 1.25rem;
|
||||
overflow-x: auto;
|
||||
line-height: 1.6;
|
||||
background-color: #e5e5e5;
|
||||
background-color: theme(colors.slate.200);
|
||||
}
|
||||
|
||||
.dark pre {
|
||||
background-color: #0f172a;
|
||||
background-color: theme(colors.slate.900);
|
||||
}
|
||||
|
||||
pre>code {
|
||||
@@ -192,11 +192,11 @@ html {
|
||||
padding-left: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
font-style: italic;
|
||||
color: #525252;
|
||||
color: theme(colors.slate.600);
|
||||
}
|
||||
|
||||
.dark blockquote {
|
||||
color: #94a3b8;
|
||||
color: theme(colors.slate.400);
|
||||
}
|
||||
|
||||
/* Strong text */
|
||||
@@ -204,16 +204,6 @@ html {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Selection */
|
||||
::selection {
|
||||
background-color: rgba(14, 165, 233, 0.2);
|
||||
color: #0a0a0a;
|
||||
}
|
||||
|
||||
.dark ::selection {
|
||||
color: #f8fafc;
|
||||
}
|
||||
|
||||
/* Focus styles */
|
||||
:focus-visible {
|
||||
outline: 2px solid var(--color-accent);
|
||||
@@ -340,6 +330,7 @@ html {
|
||||
|
||||
/* Component styles */
|
||||
@layer components {
|
||||
|
||||
/* Section container - uses CSS vars, keep here */
|
||||
.section-container {
|
||||
max-width: calc(var(--content-max-width) + var(--sidebar-width) + 4rem);
|
||||
@@ -357,11 +348,11 @@ html {
|
||||
margin-top: 3rem;
|
||||
margin-bottom: 1.5rem;
|
||||
padding-bottom: 0.75rem;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
border-bottom: 1px solid theme(colors.slate.200);
|
||||
}
|
||||
|
||||
.dark .prose-spec h2 {
|
||||
border-bottom-color: #1e293b;
|
||||
border-bottom-color: theme(colors.slate.800);
|
||||
}
|
||||
|
||||
.prose-spec h2:first-child {
|
||||
@@ -373,35 +364,35 @@ html {
|
||||
font-weight: 600;
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 1rem;
|
||||
color: #525252;
|
||||
color: theme(colors.slate.600);
|
||||
}
|
||||
|
||||
.dark .prose-spec h3 {
|
||||
color: #94a3b8;
|
||||
color: theme(colors.slate.400);
|
||||
}
|
||||
|
||||
.prose-spec p {
|
||||
color: #525252;
|
||||
color: theme(colors.slate.600);
|
||||
}
|
||||
|
||||
.dark .prose-spec p {
|
||||
color: #94a3b8;
|
||||
color: theme(colors.slate.400);
|
||||
}
|
||||
|
||||
.prose-spec strong {
|
||||
color: #0a0a0a;
|
||||
color: theme(colors.slate.950);
|
||||
}
|
||||
|
||||
.dark .prose-spec strong {
|
||||
color: #f8fafc;
|
||||
color: theme(colors.slate.50);
|
||||
}
|
||||
|
||||
.prose-spec li {
|
||||
color: #525252;
|
||||
color: theme(colors.slate.600);
|
||||
}
|
||||
|
||||
.dark .prose-spec li {
|
||||
color: #94a3b8;
|
||||
color: theme(colors.slate.400);
|
||||
}
|
||||
|
||||
/* Nested ordered list counters (spec numbering: 1., 1.1., 1.2.) */
|
||||
@@ -411,19 +402,19 @@ html {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.prose-spec ol > li {
|
||||
.prose-spec ol>li {
|
||||
counter-increment: item;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.prose-spec ol > li::before {
|
||||
.prose-spec ol>li::before {
|
||||
content: counters(item, ".") ".";
|
||||
position: absolute;
|
||||
left: -2.5rem;
|
||||
width: 2rem;
|
||||
text-align: right;
|
||||
font-weight: 500;
|
||||
color: #737373;
|
||||
color: theme(colors.slate.500);
|
||||
}
|
||||
|
||||
.prose-spec img {
|
||||
@@ -432,4 +423,48 @@ html {
|
||||
border-radius: 8px;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.prose-spec p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Nav link active state (toggled by JavaScript) */
|
||||
.nav-link.active {
|
||||
color: theme(colors.sky.600) !important;
|
||||
background-color: theme(colors.sky.500 / 15%) !important;
|
||||
}
|
||||
|
||||
.dark .nav-link.active {
|
||||
color: theme(colors.sky.400) !important;
|
||||
background-color: theme(colors.sky.500 / 20%) !important;
|
||||
}
|
||||
|
||||
/* Sidebar link active state (toggled by JavaScript) */
|
||||
.sidebar-link.active {
|
||||
color: theme(colors.sky.600) !important;
|
||||
background-color: theme(colors.sky.500 / 15%) !important;
|
||||
}
|
||||
|
||||
.dark .sidebar-link.active {
|
||||
color: theme(colors.sky.400) !important;
|
||||
background-color: theme(colors.sky.500 / 20%) !important;
|
||||
}
|
||||
|
||||
/* Sidebar scrollbar styling */
|
||||
#spec-sidebar::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
#spec-sidebar::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#spec-sidebar::-webkit-scrollbar-thumb {
|
||||
background-color: theme(colors.slate.200);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.dark #spec-sidebar::-webkit-scrollbar-thumb {
|
||||
background-color: theme(colors.slate.800);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user