Introduce Harmonic Temporal Orientation system and validator - #189
Introduce Harmonic Temporal Orientation system and validator#189safal207 wants to merge 47 commits into
Conversation
|
Important Review skippedNo new commits to review since the last review. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughДобавлены спецификация и документация Harmonic Temporal Orientation, шаблоны orientation records, набор валидных и невалидных JSON-фикстур, Node.js-валидатор, fixture-тесты и шаблон GitHub Actions для их запуска. ChangesHarmonic Temporal Orientation
Estimated code review effort: 4 (Complex) | ~45 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
✅ Action performedReview finished.
|
🚦 Roby’s Lighthouse contractmobileNo summary artifact was produced. ❌ Desktop
Hard assertions: ✅ · Regression: ❌ D.1 runs in observability mode. The final gate is enabled only after the reviewed baseline commit. |
There was a problem hiding this comment.
Actionable comments posted: 14
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/harmonic-temporal-orientation-ci-workflow-template.md`:
- Around line 26-34: Фильтр paths workflow не охватывает все входы команды
проверки. Обновите секцию pull_request в
harmonic-temporal-orientation-ci-workflow-template, добавив
scripts/test-harmonic-orientation.mjs и используемый lockfile (например,
package-lock.json или npm-shrinkwrap.json), либо расширьте фильтр до всех
релевантных файлов validator package. Проверьте, что пути и команда npm run
verify:harmonic-orientation соответствуют фактическому CI-контракту.
In `@docs/harmonic-temporal-orientation-decision-log.md`:
- Around line 142-150: Update the Example 2 YAML entry’s actor value to conform
to the documented enum by replacing “orientation-center” with an allowed value
such as “bot”, or explicitly extend the entry template contract if
“orientation-center” is intended to be supported.
In `@docs/harmonic-temporal-orientation-implementation-map.md`:
- Around line 118-152: Синхронизируйте раздел “Minimal machine-readable
orientation shape” с фактическим каноническим контрактом валидатора: добавьте
обязательные поля id, time_utc, graph-поля и orientation_center, а также
скорректируйте несовпадающие поля. Если JSON намеренно остается предварительным
форматом, явно обозначьте его как будущий adapter shape и укажите, что он не
является валидируемым каноническим контрактом.
- Around line 210-230: Обновите раздел “First useful automation candidate”,
заменив несуществующий скрипт и каталог в примере команды на фактически
добавленные `scripts/validate-harmonic-orientation.mjs` и npm-команду
`verify:harmonic-orientation`; согласуйте описание начальных проверок с реальным
контрактом `validate-harmonic-orientation.mjs` и упомяните
`test-harmonic-orientation.mjs` только если это соответствует способу запуска
тестов.
In `@docs/harmonic-temporal-orientation-playbook.md`:
- Around line 23-48: Синхронизируйте YAML-пример `orientation_record` с
канонической схемой валидатора: замените устаревшие top-level поля `pr`, `head`,
`time`, `project_invariant`, `transition_candidate`, `real_evidence_before` и
`orientation_decision` на обязательные `id`, `time_utc`, `head_sha`,
`project_graph`, `transition_graph`, `real_graph` и `orientation_center`,
сохранив соответствующее содержимое и структуру контрактов. Проверьте все
шаблоны и примеры в документе на единообразное использование этой схемы.
In `@docs/harmonic-temporal-orientation-scorecard.md`:
- Around line 41-49: Уточните в разделе “Decision guide” правило для score 0–4:
выбирать reject только при наличии необходимого evidence, а при отсутствующих
prerequisite evidence — hold; синхронизируйте это правило с примером score 1 и
соответствующими fixtures, включая раздел около строк 127–154.
In `@docs/harmonic-temporal-orientation-spec.yaml`:
- Around line 184-201: Сделайте поле scorecard обязательным для записей,
принимающих решение: добавьте scorecard в required_fields схемы
orientation_record_schema, чтобы решения allow/reject/hold/escalate не проходили
без проверки порогов и hard blockers.
- Around line 175-182: Валидируйте значения hard_blockers по каноническому enum
вместо проверки только непустых строк: отклоняйте неизвестные идентификаторы и
выявляйте отсутствие обязательных ожидаемых blockers. Обновите соответствующий
валидатор в спецификации harmonic temporal orientation и добавьте тесты для
неизвестных значений и пропущенных канонических blockers.
- Around line 169-182: Уточните в спецификации precedence между hard_blockers и
решениями hold/escalate: добавьте явное правило выбора, определяющее итоговое
решение при наличии hard blocker независимо от score и других сигналов. Обновите
decision_thresholds или отдельный раздел policy, затем добавьте fixtures для
комбинаций hard blocker + hold и hard blocker + escalate, проверяющих это
правило.
In `@package.json`:
- Line 46: Добавьте команды `node --check android-download.js`, `node --check
pwa.js` и `node --check sw.js` в скрипт `check` в package.json, сохранив
существующую последовательность проверок.
In `@scripts/test-harmonic-orientation.mjs`:
- Around line 39-44: В testInvalidFixtures проверяется только наличие ошибок,
поэтому фикстура может пройти тест при отказе по неверной причине. Добавьте для
каждого элемента INVALID_FIXTURES ожидаемую причину отказа (hard blocker или
score mismatch) и проверяйте, что результат validateFixture содержит именно
соответствующую ошибку, сохранив проверку result.ok === false.
In `@scripts/validate-harmonic-orientation.mjs`:
- Around line 103-112: Update validateEvidenceShape to validate that
record.real_graph.evidence_before is a non-null object before using the in
operator; when it has an invalid type such as a string, add a structured
validation error via pushError and return without throwing, so the exported
validateRecord returns ok: false.
- Around line 74-76: Проверка валидации scorecard.total допускает значения
неверного типа. В функции, содержащей проверку `scorecard.total`, добавьте
ошибку через `pushError` для любого значения, чей тип не является `number`, а
для числовых значений сохраните проверку соответствия `computedTotal`; учтите
также корректность числового значения согласно существующим правилам валидации.
- Around line 29-30: Проверьте функцию asArray и связанные проверки
hard_blockers валидации: некорректные не-массивные значения не должны молча
заменяться на пустой список. Измените логику так, чтобы такие записи явно
отклонялись с ошибкой и не могли завершить проверку с ok: true, сохранив
корректную обработку настоящих массивов.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 51189df2-57bf-4add-8872-9e88e4875fff
📒 Files selected for processing (17)
docs/examples/harmonic-orientation-record.conflict-escalate.jsondocs/examples/harmonic-orientation-record.invalid-allow-hard-blocker.jsondocs/examples/harmonic-orientation-record.invalid-score-mismatch.jsondocs/examples/harmonic-orientation-record.pr186-d6-hold.jsondocs/examples/harmonic-orientation-record.pr188-baseline-allow.jsondocs/examples/harmonic-orientation-record.pr188-minify-reject.jsondocs/harmonic-temporal-orientation-ci-workflow-template.mddocs/harmonic-temporal-orientation-decision-log.mddocs/harmonic-temporal-orientation-implementation-map.mddocs/harmonic-temporal-orientation-playbook.mddocs/harmonic-temporal-orientation-scorecard.mddocs/harmonic-temporal-orientation-spec.yamldocs/harmonic-temporal-orientation-system.mddocs/harmonic-temporal-orientation-templates.mdpackage.jsonscripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: profiles / profile (mobile)
- GitHub Check: profiles / profile (desktop)
- GitHub Check: CodeRabbit / Review
- GitHub Check: Verify exact-head independent review
- GitHub Check: DAST-001 passive web scan
⚠️ CI failures not shown inline (6)
GitHub Actions: Bot review disposition contract / 0_REVIEW-LEDGER exact-head findings.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
with:
script: const owner = context.repo.owner;
const repo = context.repo.repo;
const payloadPr = context.payload.pull_request;
const issuePr = context.payload.issue?.pull_request;
const prNumber = payloadPr?.number ?? (issuePr ? context.payload.issue.number : null);
if (!prNumber) {
core.notice('Event is not associated with a pull request.');
return;
}
const pr = (await github.rest.pulls.get({ owner, repo, pull_number: prNumber })).data;
const head = pr.head.sha.toLowerCase();
const [reviewComments, reviews, issueComments, statuses] = await Promise.all([
github.paginate(
github.rest.pulls.listReviewComments,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.pulls.listReviews,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.repos.listCommitStatusesForRef,
{ owner, repo, ref: head, per_page: 100 },
),
]);
const reviewHeads = new Map(
reviews.map((review) => [review.id, review.commit_id?.toLowerCase()]),
);
const reviewBots = new Set([
'chatgpt-codex-connector',
'chatgpt-codex-connector[bot]',
'coderabbitai',
'coderabbitai[bot]',
'github-advanced-security',
'github-advanced-security[bot]',
]);
const trustedAssociations = new Set(['OWNER', 'MEMBER', 'COLLABORATOR']);
const exactHeadBody = (body) => new RegExp(`(^|[^0-9a-f])${head}([^0-9a-f]|$)`, 'i').test(body ?? '');
const timeOf = (item) => Math.max(
0,
...[item.submitted_at, item.created_at, item.updated_at]
.map((value) => Date.parse(value ?? 0))
.filter(Number.isFinite),
);
const isDispositionReply = (reply) => {
const body = (reply.body ?? '').replaceAll('`', '');
const disposition = /^Disposition:\s*(accepted|rejected-with-evidence|superseded)\s*$/im.test(body);
cons...
GitHub Actions: Bot review disposition contract / REVIEW-LEDGER exact-head findings: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
with:
script: const owner = context.repo.owner;
const repo = context.repo.repo;
const payloadPr = context.payload.pull_request;
const issuePr = context.payload.issue?.pull_request;
const prNumber = payloadPr?.number ?? (issuePr ? context.payload.issue.number : null);
if (!prNumber) {
core.notice('Event is not associated with a pull request.');
return;
}
const pr = (await github.rest.pulls.get({ owner, repo, pull_number: prNumber })).data;
const head = pr.head.sha.toLowerCase();
const [reviewComments, reviews, issueComments, statuses] = await Promise.all([
github.paginate(
github.rest.pulls.listReviewComments,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.pulls.listReviews,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.repos.listCommitStatusesForRef,
{ owner, repo, ref: head, per_page: 100 },
),
]);
const reviewHeads = new Map(
reviews.map((review) => [review.id, review.commit_id?.toLowerCase()]),
);
const reviewBots = new Set([
'chatgpt-codex-connector',
'chatgpt-codex-connector[bot]',
'coderabbitai',
'coderabbitai[bot]',
'github-advanced-security',
'github-advanced-security[bot]',
]);
const trustedAssociations = new Set(['OWNER', 'MEMBER', 'COLLABORATOR']);
const exactHeadBody = (body) => new RegExp(`(^|[^0-9a-f])${head}([^0-9a-f]|$)`, 'i').test(body ?? '');
const timeOf = (item) => Math.max(
0,
...[item.submitted_at, item.created_at, item.updated_at]
.map((value) => Date.parse(value ?? 0))
.filter(Number.isFinite),
);
const isDispositionReply = (reply) => {
const body = (reply.body ?? '').replaceAll('`', '');
const disposition = /^Disposition:\s*(accepted|rejected-with-evidence|superseded)\s*$/im.test(body);
cons...
GitHub Actions: Adversarial browser contract / ADV-001 browser probes: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
GitHub Actions: Adversarial browser contract / 0_ADV-001 browser probes.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
GitHub Actions: Taste Journey poster contract / TASTE-POSTER-001 full poster gate: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run git diff --exit-code -- discover-rotation.js discover-rotation-v2.js discover-rotation-v3.js discover.html sw.js integrity-manifest.json
�[36;1mgit diff --exit-code -- discover-rotation.js discover-rotation-v2.js discover-rotation-v3.js discover.html sw.js integrity-manifest.json�[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
diff --git a/integrity-manifest.json b/integrity-manifest.json
index 8f1b2c4..d6f3b00 100644
--- a/integrity-manifest.json
+++ b/integrity-manifest.json
@@ -1 +1 @@
-{"version":1,"algorithm":"sha256","build":"20260626-8","files":[{"path":"404.html","bytes":1199,"sha256":"***REDACTED***"},{"path":"analytics.js","bytes":2920,"sha256":"***REDACTED***"},{"path":"android-app.css","bytes":6328,"sha256":"***REDACTED***"},{"path":"android-download.js","bytes":4870,"sha256":"***REDACTED***"},{"path":"app.js","bytes":32801,"sha256":"***REDACTED***"},{"path":"apple-touch-icon.png","bytes":8499,"sha256":"***REDACTED***"},{"path":"bootstrap.js","bytes":1427,"sha256":"***REDACTED***"},{"path":"community-reel.css","bytes":2970,"sha256":"***REDACTED***"},{"path":"conversion.css","bytes":2973,"sha256":"***REDACTED***"},{"path":"conversion.js","bytes":14441,"sha256":"***REDACTED***"},{"path":"data/featured-products.json","bytes":4027,"sha256":"***REDACTED***"},{"path":"discover-copy.js","bytes":5736,"sha256":"***REDACTED***"},{"path":"discover-journeys-v2.js","bytes":5611,"sha256":"***REDACTED***"},{"path":"discover-journeys.js","bytes":2654,"sha256":"***REDACTED***"},{"path":"discover-rotation-v2.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-rotation-v3.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-rotation.css","bytes":1237,"sha256":"***REDACTED***"},{"path":"discover-rotation.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-v2.js","bytes":7408,"sha256":"***REDACTED***"},{"path":"discover-weather-guard.js","bytes":606,"sha256":"***REDACTED***"},{"path":"discover.css","bytes":7686,"sha256":"***...
GitHub Actions: Taste Journey poster contract / 0_TASTE-POSTER-001 full poster gate.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run git diff --exit-code -- discover-rotation.js discover-rotation-v2.js discover-rotation-v3.js discover.html sw.js integrity-manifest.json
�[36;1mgit diff --exit-code -- discover-rotation.js discover-rotation-v2.js discover-rotation-v3.js discover.html sw.js integrity-manifest.json�[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
diff --git a/integrity-manifest.json b/integrity-manifest.json
index 8f1b2c4..d6f3b00 100644
--- a/integrity-manifest.json
+++ b/integrity-manifest.json
@@ -1 +1 @@
-{"version":1,"algorithm":"sha256","build":"20260626-8","files":[{"path":"404.html","bytes":1199,"sha256":"***REDACTED***"},{"path":"analytics.js","bytes":2920,"sha256":"***REDACTED***"},{"path":"android-app.css","bytes":6328,"sha256":"***REDACTED***"},{"path":"android-download.js","bytes":4870,"sha256":"***REDACTED***"},{"path":"app.js","bytes":32801,"sha256":"***REDACTED***"},{"path":"apple-touch-icon.png","bytes":8499,"sha256":"***REDACTED***"},{"path":"bootstrap.js","bytes":1427,"sha256":"***REDACTED***"},{"path":"community-reel.css","bytes":2970,"sha256":"***REDACTED***"},{"path":"conversion.css","bytes":2973,"sha256":"***REDACTED***"},{"path":"conversion.js","bytes":14441,"sha256":"***REDACTED***"},{"path":"data/featured-products.json","bytes":4027,"sha256":"***REDACTED***"},{"path":"discover-copy.js","bytes":5736,"sha256":"***REDACTED***"},{"path":"discover-journeys-v2.js","bytes":5611,"sha256":"***REDACTED***"},{"path":"discover-journeys.js","bytes":2654,"sha256":"***REDACTED***"},{"path":"discover-rotation-v2.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-rotation-v3.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-rotation.css","bytes":1237,"sha256":"***REDACTED***"},{"path":"discover-rotation.js","bytes":7333,"sha256":"***REDACTED***"},{"path":"discover-v2.js","bytes":7408,"sha256":"***REDACTED***"},{"path":"discover-weather-guard.js","bytes":606,"sha256":"***REDACTED***"},{"path":"discover.css","bytes":7686,"sha256":"***...
🧰 Additional context used
📓 Path-based instructions (2)
**/*.md
⚙️ CodeRabbit configuration file
**/*.md: Проверяй техническую достоверность команд и контрактов. Не оставляй
косметические замечания, если они не влияют на понимание или выполнение.
Files:
docs/harmonic-temporal-orientation-scorecard.mddocs/harmonic-temporal-orientation-ci-workflow-template.mddocs/harmonic-temporal-orientation-decision-log.mddocs/harmonic-temporal-orientation-templates.mddocs/harmonic-temporal-orientation-playbook.mddocs/harmonic-temporal-orientation-implementation-map.mddocs/harmonic-temporal-orientation-system.md
scripts/**
⚙️ CodeRabbit configuration file
scripts/**: Ищи недетерминированность, небезопасную работу с путями и shell quoting,
скрытое ослабление проверок, сетевые зависимости, утечки секретов и случаи,
когда проверка может ложно завершиться успешно.
Files:
scripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
🪛 LanguageTool
docs/harmonic-temporal-orientation-implementation-map.md
[style] ~193-~193: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t start by mutating active repair PRs. Do not replace human protocol decisions. ...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~195-~195: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... not replace human protocol decisions. Do not treat the scorecard as truth. The ...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🔇 Additional comments (10)
docs/examples/harmonic-orientation-record.pr188-baseline-allow.json (1)
1-38: LGTM!docs/examples/harmonic-orientation-record.invalid-score-mismatch.json (1)
1-25: LGTM!scripts/validate-harmonic-orientation.mjs (1)
1-27: LGTM!Also applies to: 33-53, 55-73, 85-100, 117-147, 149-200
scripts/test-harmonic-orientation.mjs (1)
1-37: LGTM!Also applies to: 47-56
package.json (1)
51-52: LGTM!docs/examples/harmonic-orientation-record.pr188-minify-reject.json (1)
1-100: LGTM!docs/examples/harmonic-orientation-record.pr186-d6-hold.json (1)
1-39: LGTM!docs/examples/harmonic-orientation-record.invalid-allow-hard-blocker.json (1)
1-26: LGTM!docs/examples/harmonic-orientation-record.conflict-escalate.json (1)
5-6: 🎯 Functional CorrectnessЗамечание неактуально:
pr/head_shaне валидируются
scripts/validate-harmonic-orientation.mjsпроверяет только наличие этих полей, а не их формат. Для этой фикстурыdecision: "escalate"при score 7 также соответствует правилам.> Likely an incorrect or invalid review comment.docs/harmonic-temporal-orientation-system.md (1)
1-427: LGTM!
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review Exact head: ebb383b |
|
✅ Action performedReview finished.
|
|
@coderabbitai review Exact head: 5d4d3f2 |
|
✅ Action performedReview finished.
|
|
@coderabbitai review Current exact head: Please review the current head after the resolved documentation, validator, blocker-precedence, and negative-fixture changes. |
|
✅ Action performedReview finished.
|
|
@coderabbitai review Exact head: 670ce73 |
|
✅ Action performedReview finished.
|
PR Summary by QodoAdd Harmonic Temporal Orientation docs, canonical records, and Node validator
AI Description
Diagram
High-Level Assessment
Files changed (23)
|
Code Review by Qodo
Context used✅ Compliance rules (platform):
11 rules 1.
|
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/harmonic-temporal-orientation-playbook.md`:
- Around line 17-19: Уточните в документации, что приведённый YAML-блок является
человекочитаемым шаблоном и перед передачей в validate-harmonic-orientation.mjs
его необходимо сериализовать в canonical JSON, либо замените пример на
корректный JSON. Обновите формулировку рядом с разделом о canonical orientation
record, чтобы не утверждать, что валидатор напрямую принимает YAML.
In `@docs/harmonic-temporal-orientation-spec.yaml`:
- Around line 102-106: Сделайте score policy исполняемой в validateScorecard:
после проверки суммы и hard-blocker precedence сопоставляйте scorecard.total с
orientation_center.decision согласно score_policy (allow только для 8–10, hold
для 0–7 при prerequisite/hold blocker, reject при reject blocker, escalate при
конфликтующих инвариантах без hard blocker). Добавьте негативные fixtures и
тесты для недопустимых сочетаний score и decision, включая total: 0 с decision:
allow.
In `@scripts/validate-harmonic-orientation.mjs`:
- Around line 59-64: Обновите `validateRequiredFields`, чтобы помимо наличия
проверять, что `project_graph`, `transition_graph`, `observer_graph` и
`tuner_graph` являются непустыми объектами, не массивами и не `null`; добавляйте
ошибку через `pushError` при неверном типе, сохранив существующую проверку
отсутствующих полей.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: a3058287-db6f-44bc-9554-4936a5596cbf
📒 Files selected for processing (15)
docs/examples/harmonic-orientation-record.invalid-escalate-hard-blocker.jsondocs/examples/harmonic-orientation-record.invalid-evidence-type.jsondocs/examples/harmonic-orientation-record.invalid-hard-blocker-type.jsondocs/examples/harmonic-orientation-record.invalid-missing-required-hard-blocker.jsondocs/examples/harmonic-orientation-record.invalid-missing-scorecard.jsondocs/examples/harmonic-orientation-record.invalid-total-type.jsondocs/examples/harmonic-orientation-record.invalid-unknown-hard-blocker.jsondocs/harmonic-temporal-orientation-ci-workflow-template.mddocs/harmonic-temporal-orientation-decision-log.mddocs/harmonic-temporal-orientation-implementation-map.mddocs/harmonic-temporal-orientation-playbook.mddocs/harmonic-temporal-orientation-scorecard.mddocs/harmonic-temporal-orientation-spec.yamlscripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
- GitHub Check: CodeRabbit / Review
- GitHub Check: CodeRabbit / Review
- GitHub Check: CodeRabbit / Review
- GitHub Check: VISUAL-001 screenshot diff
⚠️ CI failures not shown inline (2)
GitHub Actions: Adversarial browser contract / ADV-001 browser probes: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
GitHub Actions: Adversarial browser contract / 1_ADV-001 browser probes.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (2)
**/*.md
⚙️ CodeRabbit configuration file
**/*.md: Проверяй техническую достоверность команд и контрактов. Не оставляй
косметические замечания, если они не влияют на понимание или выполнение.
Files:
docs/harmonic-temporal-orientation-ci-workflow-template.mddocs/harmonic-temporal-orientation-decision-log.mddocs/harmonic-temporal-orientation-scorecard.mddocs/harmonic-temporal-orientation-playbook.mddocs/harmonic-temporal-orientation-implementation-map.md
scripts/**
⚙️ CodeRabbit configuration file
scripts/**: Ищи недетерминированность, небезопасную работу с путями и shell quoting,
скрытое ослабление проверок, сетевые зависимости, утечки секретов и случаи,
когда проверка может ложно завершиться успешно.
Files:
scripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
🔇 Additional comments (15)
docs/harmonic-temporal-orientation-spec.yaml (1)
8-100: LGTM!Also applies to: 108-112
docs/harmonic-temporal-orientation-implementation-map.md (1)
42-262: LGTM!docs/harmonic-temporal-orientation-playbook.md (1)
77-280: LGTM!docs/harmonic-temporal-orientation-scorecard.md (1)
3-194: LGTM!docs/harmonic-temporal-orientation-decision-log.md (1)
150-150: LGTM!docs/examples/harmonic-orientation-record.invalid-evidence-type.json (1)
1-24: LGTM!docs/examples/harmonic-orientation-record.invalid-hard-blocker-type.json (1)
1-24: LGTM!docs/examples/harmonic-orientation-record.invalid-escalate-hard-blocker.json (1)
1-24: LGTM!docs/examples/harmonic-orientation-record.invalid-missing-required-hard-blocker.json (1)
1-24: LGTM!docs/examples/harmonic-orientation-record.invalid-missing-scorecard.json (1)
1-13: LGTM!docs/examples/harmonic-orientation-record.invalid-total-type.json (1)
1-24: LGTM!docs/examples/harmonic-orientation-record.invalid-unknown-hard-blocker.json (1)
1-24: LGTM!scripts/validate-harmonic-orientation.mjs (1)
7-18: LGTM!Also applies to: 31-31, 41-57, 66-76, 77-121, 123-189, 191-217, 219-253
scripts/test-harmonic-orientation.mjs (1)
6-22: LGTM!Also applies to: 24-37, 39-58, 60-70
docs/harmonic-temporal-orientation-ci-workflow-template.md (1)
7-20: LGTM!Also applies to: 30-75, 77-98
|
Disposition: accepted Exact-head remediation summary:
@coderabbitai review |
|
✅ Action performedReview finished.
|
|
@coderabbitai review Exact head remains |
|
To get a fresh review pass on this exact head, either:
Triggering as requested below. ✅ Action performedReview finished.
|
|
Disposition: rejected-with-evidence Evidence:
Conclusion: the Lighthouse red is a pre-existing runtime/baseline condition and is not attributable to PR #189. This PR will not minify runtime or weaken the baseline to hide that debt. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/harmonic-temporal-orientation-spec.yaml`:
- Around line 49-54: Поле actor_values в схеме не enforced: добавьте в
scripts/validate-harmonic-orientation.mjs проверку наличия record.actor и его
соответствия enum actor_values, либо удалите actor_values из схемы;
синхронизируйте схему и валидатор, чтобы значение orientation-center проверялось
единообразно.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 53f6a367-fdbd-4608-bfd4-8fa45b7676a6
📒 Files selected for processing (7)
docs/examples/harmonic-orientation-record.invalid-high-score-hold.jsondocs/examples/harmonic-orientation-record.invalid-low-score-allow.jsondocs/examples/harmonic-orientation-record.invalid-top-level-object-type.jsondocs/harmonic-temporal-orientation-playbook.mddocs/harmonic-temporal-orientation-spec.yamlscripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: profiles / profile (desktop)
- GitHub Check: profiles / profile (mobile)
- GitHub Check: CodeRabbit / Review
- GitHub Check: Verify exact-head independent review
- GitHub Check: DAST-001 passive web scan
⚠️ CI failures not shown inline (4)
GitHub Actions: Bot review disposition contract / 0_REVIEW-LEDGER exact-head findings.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
with:
script: const owner = context.repo.owner;
const repo = context.repo.repo;
const payloadPr = context.payload.pull_request;
const issuePr = context.payload.issue?.pull_request;
const prNumber = payloadPr?.number ?? (issuePr ? context.payload.issue.number : null);
if (!prNumber) {
core.notice('Event is not associated with a pull request.');
return;
}
const pr = (await github.rest.pulls.get({ owner, repo, pull_number: prNumber })).data;
const head = pr.head.sha.toLowerCase();
const [reviewComments, reviews, issueComments, statuses] = await Promise.all([
github.paginate(
github.rest.pulls.listReviewComments,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.pulls.listReviews,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.repos.listCommitStatusesForRef,
{ owner, repo, ref: head, per_page: 100 },
),
]);
const reviewHeads = new Map(
reviews.map((review) => [review.id, review.commit_id?.toLowerCase()]),
);
const reviewBots = new Set([
'chatgpt-codex-connector',
'chatgpt-codex-connector[bot]',
'coderabbitai',
'coderabbitai[bot]',
'github-advanced-security',
'github-advanced-security[bot]',
]);
const trustedAssociations = new Set(['OWNER', 'MEMBER', 'COLLABORATOR']);
const exactHeadBody = (body) => new RegExp(`(^|[^0-9a-f])${head}([^0-9a-f]|$)`, 'i').test(body ?? '');
const timeOf = (item) => Math.max(
0,
...[item.submitted_at, item.created_at, item.updated_at]
.map((value) => Date.parse(value ?? 0))
.filter(Number.isFinite),
);
const isDispositionReply = (reply) => {
const body = (reply.body ?? '').replaceAll('`', '');
const disposition = /^Disposition:\s*(accepted|rejected-with-evidence|superseded)\s*$/im.test(body);
cons...
GitHub Actions: Bot review disposition contract / REVIEW-LEDGER exact-head findings: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
with:
script: const owner = context.repo.owner;
const repo = context.repo.repo;
const payloadPr = context.payload.pull_request;
const issuePr = context.payload.issue?.pull_request;
const prNumber = payloadPr?.number ?? (issuePr ? context.payload.issue.number : null);
if (!prNumber) {
core.notice('Event is not associated with a pull request.');
return;
}
const pr = (await github.rest.pulls.get({ owner, repo, pull_number: prNumber })).data;
const head = pr.head.sha.toLowerCase();
const [reviewComments, reviews, issueComments, statuses] = await Promise.all([
github.paginate(
github.rest.pulls.listReviewComments,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.pulls.listReviews,
{ owner, repo, pull_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number: prNumber, per_page: 100 },
),
github.paginate(
github.rest.repos.listCommitStatusesForRef,
{ owner, repo, ref: head, per_page: 100 },
),
]);
const reviewHeads = new Map(
reviews.map((review) => [review.id, review.commit_id?.toLowerCase()]),
);
const reviewBots = new Set([
'chatgpt-codex-connector',
'chatgpt-codex-connector[bot]',
'coderabbitai',
'coderabbitai[bot]',
'github-advanced-security',
'github-advanced-security[bot]',
]);
const trustedAssociations = new Set(['OWNER', 'MEMBER', 'COLLABORATOR']);
const exactHeadBody = (body) => new RegExp(`(^|[^0-9a-f])${head}([^0-9a-f]|$)`, 'i').test(body ?? '');
const timeOf = (item) => Math.max(
0,
...[item.submitted_at, item.created_at, item.updated_at]
.map((value) => Date.parse(value ?? 0))
.filter(Number.isFinite),
);
const isDispositionReply = (reply) => {
const body = (reply.body ?? '').replaceAll('`', '');
const disposition = /^Disposition:\s*(accepted|rejected-with-evidence|superseded)\s*$/im.test(body);
cons...
GitHub Actions: Adversarial browser contract / 0_ADV-001 browser probes.txt: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
GitHub Actions: Adversarial browser contract / ADV-001 browser probes: Introduce Harmonic Temporal Orientation system and validator
Conclusion: failure
##[group]Run python3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &
�[36;1mpython3 -m http.server 4173 --bind 127.0.0.1 > .artifacts/offline-server.log 2>&1 &�[0m
�[36;1mfor attempt in {1..30}; do�[0m
�[36;1m if curl --fail --silent http://127.0.0.1:4173/index.html > /dev/null; then�[0m
�[36;1m break�[0m
�[36;1m fi�[0m
�[36;1m sleep 1�[0m
�[36;1mdone�[0m
�[36;1mset -o pipefail�[0m
�[36;1mnode scripts/verify-offline-browser.mjs 2>&1 | tee .artifacts/offline-android.log�[0m
shell: /usr/bin/bash -e {0}
env:
BASE_URL: http://127.0.0.1:4173
##[endgroup]
node:internal/modules/run_main:123
triggerUncaughtException(
^
locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('html[data-offline-ready=\'true\']')
at /home/runner/work/robys-coffee-house-demo/robys-coffee-house-demo/scripts/verify-offline-browser.mjs:51:57 {
name: 'TimeoutError'
}
Node.js v22.23.1
##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (2)
scripts/**
⚙️ CodeRabbit configuration file
scripts/**: Ищи недетерминированность, небезопасную работу с путями и shell quoting,
скрытое ослабление проверок, сетевые зависимости, утечки секретов и случаи,
когда проверка может ложно завершиться успешно.
Files:
scripts/test-harmonic-orientation.mjsscripts/validate-harmonic-orientation.mjs
**/*.md
⚙️ CodeRabbit configuration file
**/*.md: Проверяй техническую достоверность команд и контрактов. Не оставляй
косметические замечания, если они не влияют на понимание или выполнение.
Files:
docs/harmonic-temporal-orientation-playbook.md
🔇 Additional comments (19)
docs/harmonic-temporal-orientation-spec.yaml (5)
27-60: Все три прошлых major-замечания по этому блоку устранены.
scorecardтеперь вrequired_fields(line 41),required_non_empty_objectsсоответствуетOBJECT_TOP_LEVEL_FIELDSв валидаторе. Хорошо синхронизировано.
61-70: LGTM!
87-120: Precedence-правило для hard_blockers теперь явно зафиксировано.Добавлены
any_hard_blocker_forbids_allow/escalate,any_reject_class_blocker_requires_reject,otherwise_any_hold_class_blocker_requires_hold,score_policy_applies_only_when_no_hard_blocker_exists— соответствует реализации вvalidateScorecard(lines 191-201 валидатора). Прошлое major-замечание устранено.
121-135: Score policy теперь исполняема и соответствует валидатору.Диапазоны
score_8_to_10/score_0_to_7совпадают с проверкамиcomputedTotal >= 8/<= 7вvalidateScorecard(lines 203-208 валидатора). Прошлое major-замечание устранено.
136-146: LGTM!docs/harmonic-temporal-orientation-playbook.md (4)
15-79: Каноническая схема синхронизирована, YAML/JSON разграничение явное.Пример теперь использует top-level поля, совпадающие с валидатором (
id, time_utc, head_sha, project_graph, transition_graph, real_graph, orientation_center, observer_graph, tuner_graph, scorecard), а строка 17 явно указывает, что валидатор принимает только JSON и YAML требует сериализации. Оба прошлых major-замечания устранены.
93-106: Score policy в тексте точно отражает реализацию валидатора.Текстовое правило (
score 8-10 with zero blockers -> allow is required,score 0-7 with zero blockers -> allow is forbidden) технически совпадает сvalidateScorecard. As per path instructions:**/*.md: «Проверяй техническую достоверность команд и контрактов.»
152-179: Команды и пути к фикстурам корректны.Все перечисленные скрипты (
scripts/validate-harmonic-orientation.mjs,scripts/test-harmonic-orientation.mjs) и JSON-фикстуры присутствуют в PR. As per path instructions:**/*.md: «Проверяй техническую достоверность команд и контрактов.»
109-203: LGTM!docs/examples/harmonic-orientation-record.invalid-high-score-hold.json (1)
1-27: Фикстура корректно провоцирует ожидаемую ошибку.Score 10,
hard_blockers: [],decision: "hold"→ должно триггерить"Score is 10; expected allow, got hold.", что содержит ожидаемую в тесте подстроку"expected allow". Согласуется сscripts/test-harmonic-orientation.mjs(INVALID_FIXTURES).docs/examples/harmonic-orientation-record.invalid-low-score-allow.json (1)
1-27: LGTM!docs/examples/harmonic-orientation-record.invalid-top-level-object-type.json (1)
1-27: Фикстура изолирует именно тип-ошибкуproject_graph.
project_graph: nullпри прочих валидных графах и score в допустимом дляholdдиапазоне (6, 0-7) не триггерит побочных score/blocker ошибок — тест проверяет ровно"project_graph must be a non-empty object".scripts/test-harmonic-orientation.mjs (3)
12-25: Прошлый nitpick устранён.Каждая запись
INVALID_FIXTURESтеперь несёт своёexpectedError, аassertValidationErrorпроверяет конкретную причину отказа вместо простогоerrors.length > 0. As per path instructions:scripts/**: «Ищи... случаи, когда проверка может ложно завершиться успешно.»
65-91: LGTM!
93-104: LGTM!scripts/validate-harmonic-orientation.mjs (4)
33-58: Прошлое major-замечание об object-типе top-level полей устранено.
OBJECT_TOP_LEVEL_FIELDS+isNonEmptyObjectтеперь ловятnull/строку/массив на месте объектных графов. As per path instructions:scripts/**: «Ищи... случаи, когда проверка может ложно завершиться успешно.»
73-83: LGTM!
97-120: Прошлый minor-issue про TypeError наevidence_before/evidence_afterустранён.
validateEvidenceObjectтеперь явно проверяетnull/тип объекта доbucket in value, отказ идёт черезpushError, а не через исключение.
145-211: Все три прошлых major-замечания в этой функции устранены.
scorecard.totalтеперь строго проверяется как integer (line 169),asArrayпринимаетerrors/fieldNameи не молча превращает невалидный тип в[](line 173), а диапазонные score-правила (203-208) реализуют executablescore_policyиз спецификации. As per path instructions:scripts/**: «Ищи... случаи, когда проверка может ложно завершиться успешно.»
| actor_values: | ||
| - human | ||
| - assistant | ||
| - ci | ||
| - bot | ||
| - orientation-center |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n 'actor' scripts/validate-harmonic-orientation.mjs docs/examples/*.jsonRepository: safal207/robys-coffee-house-demo
Length of output: 748
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n## actor_values references\n'
rg -n 'actor_values|orientation-center|required_fields|actor' \
docs/harmonic-temporal-orientation-spec.yaml \
scripts/validate-harmonic-orientation.mjs \
docs/examples \
-g '!*.map'
printf '\n## validate script outline\n'
ast-grep outline scripts/validate-harmonic-orientation.mjs --view expanded || true
printf '\n## spec excerpt\n'
sed -n '1,140p' docs/harmonic-temporal-orientation-spec.yamlRepository: safal207/robys-coffee-house-demo
Length of output: 5756
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n --hidden --glob '!**/.git/**' 'actor_values|validate.*actor|actor\s*[:=]|orientation-center' .Repository: safal207/robys-coffee-house-demo
Length of output: 2603
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '1,120p' scripts/validate-harmonic-orientation.mjsRepository: safal207/robys-coffee-house-demo
Length of output: 3850
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n 'actor' scripts/validate-harmonic-orientation.mjsRepository: safal207/robys-coffee-house-demo
Length of output: 170
actor_values нужно либо валидировать, либо убрать из схемы.
record.actor сейчас нигде не проверяется по этому enum, а в scripts/validate-harmonic-orientation.mjs нет даже проверки самого поля. В итоге orientation-center объявлен, но контракт фактически не enforced.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/harmonic-temporal-orientation-spec.yaml` around lines 49 - 54, Поле
actor_values в схеме не enforced: добавьте в
scripts/validate-harmonic-orientation.mjs проверку наличия record.actor и его
соответствия enum actor_values, либо удалите actor_values из схемы;
синхронизируйте схему и валидатор, чтобы значение orientation-center проверялось
единообразно.
|
Archived during Roby's v1 consolidation. Harmonic Temporal Orientation remains preserved as a research artifact, but it is not consumed by a current product or required release decision. It should not remain an active PR unless rebuilt around a concrete current-main use case. |
Summary
Introduces Harmonic Temporal Orientation: whitepaper, canonical JSON contract, playbook, scorecard, validator, positive/negative fixtures, tests, and an inactive CI template.
Evidence
Current exact head:
35b3105eb08fc255bc1503e1263099ad91e9769d.Exact-head CI already green: Security, CodeQL, Feature Traceability, Reviewdog, iOS route gate, generated runtime, human approval, and review preflight. The Adversarial offline failure belongs to the existing runtime repair flow and is not changed by this documentation/validator PR.
AI review
Earlier CodeRabbit and Qodo findings were accepted and remediated. A fresh
@coderabbitai reviewwas requested for the current head; the bot acknowledged the request and is processing it.Solo maintainer decision
Keep the PR in draft until the fresh exact-head review and remaining CI checks complete. Do not activate the CI template as a required check yet, and do not mix runtime repair changes into this branch.
Checklist