feat(core,cli): harden install engine and extend skill lint and interview eval

- update only touches the recorded project root; project installs do not
  follow symlinks or junctions; repeated --force rotates .orig backups;
  uninstall never deletes outside the recorded root
- run npm/npx without a shell on Windows and pin optional tool versions
- skip the update check in CI and non-interactive output
- lint: cross-document section pointers, preflight row ids, gate rule
  numbers, per-document size budgets, gate copy equality
- eval: scenarios S19-S21, route and read-cost rejudging, interpretation
  card judging, temp-dir previews and table-form cards no longer fail
This commit is contained in:
Yun Chan 2026-10-06 16:55:38 +09:00
parent ee3bef2ce5
commit 9bcb45cbd3
122 changed files with 5836 additions and 831 deletions

View file

@ -0,0 +1,18 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>기능 — 모임표</title>
<link rel="stylesheet" href="styles/site.css" />
</head>
<body>
<nav class="nav"><a href="index.html">모임표</a><a href="features.html">기능</a></nav>
<main class="page">
<h1>기능</h1>
<section class="feature"><h2>시간 칠하기</h2><p class="lede">되는 시간을 끌어서 칠한다. 가입하지 않아도 된다.</p></section>
<section class="feature"><h2>겹치는 칸 보기</h2><p class="lede">모두가 되는 칸이 가장 진하게 보인다.</p></section>
<a class="button" href="index.html#start">모임표 만들기</a>
</main>
</body>
</html>

View file

@ -0,0 +1,17 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>모임표 — 모임 일정 맞추기</title>
<link rel="stylesheet" href="styles/site.css" />
</head>
<body>
<nav class="nav"><a href="index.html">모임표</a><a href="features.html">기능</a></nav>
<main class="page">
<h1>모두가 되는 날을 한 번에 찾는다</h1>
<p class="lede">링크 하나를 보내면 각자 되는 시간을 칠하고, 겹치는 칸이 바로 보인다.</p>
<a class="button" href="#start">모임표 만들기</a>
</main>
</body>
</html>

View file

@ -0,0 +1,10 @@
@import url("tokens.css");
body { margin: 0; background: var(--color-bg); color: var(--color-ink); font-family: var(--font-body); line-height: 1.7; }
.nav { display: flex; gap: var(--space-4); padding: var(--space-4) var(--space-8); border-bottom: 1px solid var(--color-line); }
.nav a { color: var(--color-ink); text-decoration: none; }
.page { max-width: 60rem; margin: 0 auto; padding: var(--space-16) var(--space-8); }
h1, h2 { font-family: var(--font-display); font-weight: 700; line-height: 1.25; }
h1 { font-size: 2.5rem; margin: 0 0 var(--space-4); }
.lede { color: var(--color-ink-muted); max-width: 34em; }
.button { display: inline-block; padding: var(--space-2) var(--space-4); background: var(--color-accent); color: #fff; border-radius: var(--radius-control); text-decoration: none; }
.feature { padding: var(--space-8) 0; border-top: 1px solid var(--color-line); }

View file

@ -0,0 +1,15 @@
:root {
--color-bg: #f7f5f0;
--color-surface: #ffffff;
--color-ink: #1f2421;
--color-ink-muted: #5b635e;
--color-line: #d9d5cb;
--color-accent: #2f6f4f;
--font-display: "Gowun Batang", serif;
--font-body: "Pretendard", system-ui, sans-serif;
--space-2: 8px;
--space-4: 16px;
--space-8: 32px;
--space-16: 64px;
--radius-control: 6px;
}