osint-methodologies について
Riksdagsmonitor向けのOSINT手法スキルです。スウェーデン政治の公開情報を扱うチームを対象に、情報源の評価、照合、データ品質、法令・プライバシーへの配慮を扱います。
主な機能
- 014種の公開データソース枠組み
- 02情報源の信頼性と網羅性の評価
- 03複数ソースの照合手法
- 04鮮度と正確性のデータ検査
- 05GDPRとプライバシーの確認指針
活用シーン
- 01政治情報の公開データ収集計画
- 02情報源の信頼性と網羅性の確認
- 03独立した情報源間での記録照合
- 04収集パイプラインの品質管理設計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hack23/ riksdagsmonitor --skill osint-methodologiesインストール後、Claude Code で/osint-methodologiesを入力して読み込まれたか確認します。
詳細
OSINT 手法スキル
🔴 AI FIRST 品質原則
AI FIRST 原則を適用してください。初回の品質で決して満足しないでください。最低 2 回は反復してください。すべての出力を読み、すべてのセクションを改善してください。近道はしないでください。
目的
このスキルは、スウェーデンにおける民主主義の透明性と政治的説明責任という Riksdagsmonitor(Riksdagsmonitor)プラットフォームの使命に特化した、包括的なオープンソースインテリジェンス(OSINT)の収集手法を提供します。GDPR を遵守し、プライバシーの原則を尊重しながら、公開情報源から倫理的、合法的かつ効果的にインテリジェンスを収集できるようにします。
このスキルを使用する場面
次の場合にこのスキルを適用してください:
- ✅ 新しい公開データソース(政府 API、オープンデータセット)を統合する
- ✅ データソースの信頼性と網羅性を評価する
- ✅ 政治インテリジェンス向けのデータ収集パイプラインを実装する
- ✅ 複数の独立した情報源から情報を検証する
- ✅ 正確性を検証するための情報源の三角測量を行う
- ✅ 新たなインテリジェンス要件に向けた OSINT 収集戦略を設計する
- ✅ データ品質を評価し、品質指標を定める
- ✅ 自動データ収集および検証ワークフローを作成する
次の用途には使用しないでください:
- ❌ 非公開または機密情報を収集する
- ❌ 明確な公益上の正当性なく、ソーシャルメディアをスクレイピングする
- ❌ 公職者として公に活動している範囲を超えて個人データを収集する
- ❌ GDPR またはスウェーデンのプライバシー法に違反するインテリジェンス収集を行う
OSINT 収集フレームワーク
4 つの主要情報源アーキテクチャ
Riksdagsmonitor プラットフォームは、包括的な政治インテリジェンスを構築するため、完全性の高い 4 つの OSINT 情報源を統合します。
graph TB
subgraph "OSINT Sources"
A1[📡 Riksdagen API<br/>98.5% completeness<br/>3.5M+ votes, 89K documents]
A2[📊 Election Authority<br/>99.2% completeness<br/>1970-present electoral data]
A3[💰 World Bank<br/>94.1% completeness<br/>598K indicators, 211 countries]
A4[🏛️ Financial Authority ESV<br/>97.8% completeness<br/>Monthly updates]
end
subgraph "Collection Layer"
A1 --> B[Data Ingestion Pipeline]
A2 --> B
A3 --> B
A4 --> B
end
subgraph "Quality Assurance"
B --> C{Source Verification}
C --> D[Completeness Check]
C --> E[Consistency Validation]
C --> F[Temporal Continuity]
C --> G[Cross-Reference Check]
end
subgraph "Data Integration"
D & E & F & G --> H[(Integrated Dataset)]
H --> I[Entity Resolution]
I --> J[Data Enrichment]
end
subgraph "Quality Metrics"
J --> K[📊 Quality Dashboard]
K --> L[Completeness: 97.4%]
K --> M[Accuracy: 99.1%]
K --> N[Timeliness: 24h lag]
end
style A1 fill:#e1f5ff
style A2 fill:#e1f5ff
style A3 fill:#e1f5ff
style A4 fill:#e1f5ff
style C fill:#ffeb99
style H fill:#ccffcc
style K fill:#ffe6cc
情報源評価マトリックス
1. Riksdagen API(スウェーデン議会)
情報源の概要:
- URL:https://data.riksdagen.se/
- 権威性:スウェーデン議会(立法府)
- 分類:一次情報源、政府公式
- 網羅性:98.5%
- 更新頻度:毎日(投票はリアルタイム)
- 過去の対象期間:1971 年~現在(54 年間)
- データ量:350 万件以上の投票、8 万 9,000 件の文書、2,500 人の政治家
品質指標:
@Component
public class RiksdagenSourceQualityMetrics {
public SourceQualityReport evaluateRiksdagenAPI() {
return SourceQualityReport.builder()
.sourceName("Riksdagen API")
.completeness(98.5) // Measured against expected records
.accuracy(99.8) // Verified via manual audit sampling
.timeliness(1.0) // Hours lag for new data
.reliability(5) // 1-5 scale, 5 = highest
.trustLevel("PRIMARY_SOURCE")
.legalBasis("Public Records Act (Offentlighetsprincipen)")
.gdprCompliance(true)
.updateFrequency("DAILY")
.build();
}
public List<DataGap> identifyDataGaps() {
// Example: Check for missing voting records
String sql = """
SELECT
COUNT(*) as expected_votes,
COUNT(DISTINCT ballot_id) as actual_votes,
COUNT(*) - COUNT(DISTINCT ballot_id) as missing_votes
FROM view_riksdagen_vote_daily_summary
WHERE created_date >= CURRENT_DATE - INTERVAL '30 days'
""";
// Calculate completeness percentage
return jdbcTemplate.query(sql, (rs, rowNum) ->
DataGap.builder()
.expectedRecords(rs.getInt("expected_votes"))
.actualRecords(rs.getInt("actual_votes"))
.missingRecords(rs.getInt("missing_votes"))
.completeness((double) rs.getInt("actual_votes") /
rs.getInt("expected_votes") * 100)
.build()
);
}
}
データカテゴリ:
-
投票記録(
vote_dataテーブル)- 投票での個人別投票
- 党議拘束の指標
- 連立政権の投票パターン
- 時系列の投票傾向
-
文書(
document_element、document_status_container)- 立法提案(motioner)
- 政府法案(propositioner)
- 委員会報告書(utskottsbetänkanden)
- 議会質問(interpellationer)
-
政治家(
person_data、assignment_data)- 議会での役割と職務
- 委員会への所属
- 政党への所属
- 経歴の推移
-
議会活動
- 討論への参加
- 委員会活動
- 政府への質問
- 発言時間
OSINT 手法:
-- Source Triangulation: Verify politician voting record completeness
WITH expected_votes AS (
SELECT
person_id,
COUNT(DISTINCT ballot_id) as riksdagen_vote_count
FROM vote_data
WHERE vote_date >= '2022-09-11' -- Current parliament
GROUP BY person_id
),
document_activity AS (
SELECT
person_id,
COUNT(DISTINCT document_id) as document_count
FROM document_person_reference_data
WHERE document_type IN ('mot', 'ip') -- Motions & Questions
GROUP BY person_id
)
SELECT
p.first_name || ' ' || p.last_name as politician_name,
p.party as party_affiliation,
ev.riksdagen_vote_count,
da.document_count,
CASE
WHEN ev.riksdagen_vote_count > 500 THEN 'ACTIVE'
WHEN ev.riksdagen_vote_count BETWEEN 100 AND 500 THEN 'MODERATE'
WHEN ev.riksdagen_vote_count < 100 THEN 'INACTIVE'
END as engagement_level
FROM person_data p
LEFT JOIN expected_votes ev ON p.person_id = ev.person_id
LEFT JOIN document_activity da ON p.person_id = da.person_id
WHERE p.status = 'Tjänstgörande riksdagsledamot' -- Active MPs
ORDER BY ev.riksdagen_vote_count DESC;
2. 選挙管理局(Valmyndigheten)
情報源の概要:
- URL:https://www.val.se/
- 権威性:スウェーデン選挙管理局(独立機関)
- 分類:一次情報源、政府公式
- 網羅性:99.2%
- 更新頻度:選挙後(4 年ごと、および特別選挙後)
- 過去の対象期間:1970 年~現在(14 回の選挙)
- データ量:40 政党、全国および地域別の結果
品質指標:
@Component
public class ElectionAuthorityQualityMetrics {
public SourceQualityReport evaluateElectionAuthority() {
return SourceQualityReport.builder()
.sourceName("Valmyndigheten")
.completeness(99.2)
.accuracy(99.9) // Official certified results
.timeliness(168.0) // Hours post-election for final results
.reliability(5)
.trustLevel("PRIMARY_SOURCE")
.legalBasis("Election Act (Vallagen)")
.gdprCompliance(true)
.updateFrequency("ELECTION_CYCLE")
.build();
}
public List<ElectionDataValidation> validateElectionData() {
// Cross-reference with Riksdagen seat assignments
String sql = """
SELECT
e.party_name,
e.parliament_seats as election_authority_seats,
COUNT(DISTINCT a.person_id) as riksdagen_active_mps,
e.parliament_seats - COUNT(DISTINCT a.person_id) as seat_discrepancy
FROM sweden_political_party e
LEFT JOIN assignment_data a
ON e.party_id = a.party
AND a.role_code = 'Riksdagsledamot'
AND a.from_date <= CURRENT_DATE
AND (a.to_date IS NULL OR a.to_date >= CURRENT_DATE)
WHERE e.parliament_seats > 0
GROUP BY e.party_name, e.parliament_seats
HAVING e.parliament_seats != COUNT(DISTINCT a.person_id)
""";
return jdbcTemplate.query(sql, (rs, rowNum) ->
ElectionDataValidation.builder()
.partyName(rs.getString("party_name"))
.expectedSeats(rs.getInt("election_authority_seats"))
.actualSeats(rs.getInt("riksdagen_active_mps"))
.discrepancy(rs.getInt("seat_discrepancy"))
.build()
);
}
}
OSINT 手法:
-- Historical Election Trend Analysis
SELECT
party_name,
election_year,
percentage,
parliament_seats,
LAG(percentage, 1) OVER (PARTITION BY party_name ORDER BY election_year) as previous_percentage,
percentage - LAG(percentage, 1) OVER (PARTITION BY party_name ORDER BY election_year) as vote_swing,
LAG(parliament_seats, 1) OVER (PARTITION BY party_name ORDER BY election_year) as previous_seats,
parliament_seats - LAG(parliament_seats, 1) OVER (PARTITION BY party_name ORDER BY election_year) as seat_change
FROM sweden_political_party
WHERE parliament_seats IS NOT NULL
ORDER BY party_name, election_year DESC;
3. World Bank オープンデータ
情報源の概要:
- URL:https://data.worldbank.org/
- 権威性:World Bank(国際機関)
- 分類:二次情報源、国際機関の権威ある情報
- 網羅性:94.1%
- 更新頻度:四半期ごと
- 過去の対象期間:1960 年~現在(64 年間)
- データ量:59 万 8,000 件の指標、211 か国
品質指標:
@Component
public class WorldBankQualityMetrics {
public SourceQualityReport evaluateWorldBankAPI() {
return SourceQualityReport.builder()
.sourceName("World Bank Open Data")
.completeness(94.1)
.accuracy(97.5)
.timeliness(2160.0) // 90 days lag (quarterly updates)
.reliability(4) // High but not primary source
.trustLevel("SECONDARY_SOURCE")
.legalBasis("Open Data License")
.gdprCompliance(true) // Aggregate data only
.updateFrequency("QUARTERLY")
.build();
}
}
ユースケース:
- 政治的決定の経済的背景
- 国際比較のベンチマーク
- 政策の有効性測定
- 相関分析(GDP と政府支出の比較)
4. 金融庁(ESV)
ソースプロファイル:
- URL: https://www.esv.se/
- 機関: スウェーデン金融管理庁
- 分類: 一次情報源、政府公式
- 完全性: 97.8%
- 更新頻度: 毎月
- 対象期間: 1990年~現在
- データ量: 機関の財務データ
OSINT 収集チェックリスト
収集前の評価
法務・倫理レビュー:
✅ Data is publicly available under Swedish Public Access Principle (Offentlighetsprincipen)
✅ Collection method complies with GDPR Article 6(1)(e) - public interest
✅ Data processing aligns with purpose limitation (Article 5(1)(b))
✅ Data retention periods defined and documented
✅ Privacy impact assessment completed for personal data
✅ Source attribution and license compliance verified
ソースの信頼性評価:
public enum SourceReliability {
A("COMPLETELY_RELIABLE", "Primary government source, official records"),
B("USUALLY_RELIABLE", "Established media, verified aggregators"),
C("FAIRLY_RELIABLE", "Secondary sources with known limitations"),
D("NOT_USUALLY_RELIABLE", "Unverified sources, requires corroboration"),
E("UNRELIABLE", "Known bias, propaganda, unverified claims"),
F("RELIABILITY_CANNOT_BE_JUDGED", "New source, insufficient track record");
private final String description;
private final String criteria;
}
public enum InformationCredibility {
ONE("CONFIRMED", "Verified by multiple independent sources"),
TWO("PROBABLY_TRUE", "Corroborated by additional source"),
THREE("POSSIBLY_TRUE", "Not confirmed but consistent with known facts"),
FOUR("DOUBTFUL", "Contradicts other information"),
FIVE("IMPROBABLE", "Contradicts established facts"),
SIX("TRUTH_CANNOT_BE_JUDGED", "Insufficient information to evaluate");
private final String description;
private final String criteria;
}
データ収集ワークフロー
1. ソースの特定
class OSINTSource:
def __init__(self, name, url, api_endpoint=None):
self.name = name
self.url = url
self.api_endpoint = api_endpoint
self.reliability = None # A-F rating
self.credibility = None # 1-6 rating
self.completeness = None
self.last_updated = None
def evaluate_reliability(self):
"""NATO Admiralty Code reliability assessment"""
if self.is_government_official_source():
self.reliability = SourceReliability.A
elif self.is_verified_aggregator():
self.reliability = SourceReliability.B
# ... additional logic
def verify_completeness(self, expected_records, actual_records):
"""Calculate data completeness percentage"""
self.completeness = (actual_records / expected_records) * 100
return self.completeness
def assess_timeliness(self):
"""Calculate data lag from source update to platform availability"""
time_lag = datetime.now() - self.last_updated
return time_lag.total_seconds() / 3600 # Hours
2. データの収集
@Service
public class OSINTDataCollector {
@Scheduled(cron = "0 0 2 * * *") // Daily at 02:00
public void collectRiksdagenData() {
try {
// 1. Fetch new data
List<VoteData> newVotes = riksdagenClient.getVotesSince(lastCollectionTimestamp);
// 2. Validate data quality
DataQualityReport report = validateDataQuality(newVotes);
if (report.getQualityScore() < 95.0) {
alertService.sendAlert("Low quality data detected", report);
}
// 3. Deduplicate
List<VoteData> uniqueVotes = deduplicateRecords(newVotes);
// 4. Store with audit trail
voteRepository.saveAll(uniqueVotes);
// 5. Update collection metadata
updateCollectionMetrics(uniqueVotes.size(), report);
log.info("Collected {} new votes with {}% quality score",
uniqueVotes.size(), report.getQualityScore());
} catch (Exception e) {
log.error("Data collection failed", e);
alertService.sendAlert("OSINT collection failure", e);
}
}
private DataQualityReport validateDataQuality(List<VoteData> data) {
DataQualityReport report = new DataQualityReport();
// Completeness check
long missingFields = data.stream()
.filter(v -> v.getPersonId() == null || v.getBallotId() == null)
.count();
report.setCompleteness(100.0 - (missingFields * 100.0 / data.size()));
// Consistency check
long invalidVotes = data.stream()
.filter(v -> !Arrays.asList("Ja", "Nej", "Frånvarande", "Avstår").contains(v.getVote()))
.count();
report.setConsistency(100.0 - (invalidVotes * 100.0 / data.size()));
// Temporal validity
long futureVotes = data.stream()
.filter(v -> v.getVoteDate().isAfter(LocalDate.now()))
.count();
report.setTemporalValidity(100.0 - (futureVotes * 100.0 / data.size()));
report.calculateOverallScore();
return report;
}
}
3. ソースの照合
-- Cross-Reference Verification: Validate politician data across sources
WITH riksdagen_politicians AS (
SELECT
person_id,
first_name,
last_name,
party,
status
FROM person_data
WHERE status = 'Tjänstgörande riksdagsledamot'
),
riksdagen_seats AS (
SELECT
party,
COUNT(DISTINCT person_id) as active_mps
FROM riksdagen_politicians
GROUP BY party
),
election_seats AS (
SELECT
party_name,
parliament_seats
FROM sweden_political_party
WHERE parliament_seats > 0
)
SELECT
COALESCE(r.party, e.party_name) as party,
r.active_mps as riksdagen_count,
e.parliament_seats as election_authority_count,
ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) as discrepancy,
CASE
WHEN ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) = 0 THEN '✅ VERIFIED'
WHEN ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) <= 2 THEN '⚠️ MINOR_DISCREPANCY'
ELSE '🚨 MAJOR_DISCREPANCY'
END as verification_status
FROM riksdagen_seats r
FULL OUTER JOIN election_seats e ON r.party = e.party_name
ORDER BY discrepancy DESC;
データ品質指標
品質の側面
1. 完全性
-- Calculate field completeness across all tables
SELECT
'person_data' as table_name,
COUNT(*) as total_records,
SUM(CASE WHEN first_name IS NULL THEN 1 ELSE 0 END) as missing_first_name,
SUM(CASE WHEN last_name IS NULL THEN 1 ELSE 0 END) as missing_last_name,
SUM(CASE WHEN party IS NULL THEN 1 ELSE 0 END) as missing_party,
ROUND(100.0 * (1.0 - (
SUM(CASE WHEN first_name IS NULL THEN 1 ELSE 0 END)::decimal +
SUM(CASE WHEN last_name IS NULL THEN 1 ELSE 0 END) +
SUM(CASE WHEN party IS NULL THEN 1 ELSE 0 END)
) / (COUNT(*) * 3)), 2) as completeness_percentage
FROM person_data;
2. 正確性
@Component
public class DataAccuracyVerifier {
public AccuracyReport verifyPoliticianData() {
// Manual audit sampling: Verify 100 random politicians against Riksdagen website
List<PersonData> sample = personRepository.findRandomSample(100);
int accurate = 0;
int inaccurate = 0;
for (PersonData person : sample) {
// Fetch from official Riksdagen website for comparison
OfficialPersonData official = riksdagenWebScraper.fetchPersonData(person.getPersonId());
if (verifyMatch(person, official)) {
accurate++;
} else {
inaccurate++;
log.warn("Data mismatch for person_id: {}", person.getPersonId());
}
}
return AccuracyReport.builder()
.sampleSize(sample.size())
.accurateRecords(accurate)
.inaccurateRecords(inaccurate)
.accuracyPercentage((double) accurate / sample.size() * 100)
.build();
}
}
3. 適時性
-- Calculate data freshness lag
SELECT
'vote_data' as data_type,
MAX(created_date) as latest_record,
CURRENT_TIMESTAMP as current_time,
EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 as hours_lag,
CASE
WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 < 24 THEN '✅ CURRENT'
WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 < 168 THEN '⚠️ RECENT'
ELSE '🚨 STALE'
END as freshness_status
FROM vote_data;
4. 一貫性
-- Detect referential integrity violations
SELECT
'Vote Data Integrity' as check_name,
COUNT(DISTINCT v.ballot_id) as total_votes,
COUNT(DISTINCT CASE WHEN p.person_id IS NULL THEN v.person_id END) as orphaned_person_refs,
COUNT(DISTINCT CASE WHEN b.ballot_id IS NULL THEN v.ballot_id END) as orphaned_ballot_refs,
ROUND(100.0 * (1.0 - (
COUNT(DISTINCT CASE WHEN p.person_id IS NULL THEN v.person_id END)::decimal +
COUNT(DISTINCT CASE WHEN b.ballot_id IS NULL THEN v.ballot_id END)
) / (COUNT(DISTINCT v.ballot_id) * 2)), 2) as consistency_percentage
FROM vote_data v
LEFT JOIN person_data p ON v.person_id = p.person_id
LEFT JOIN ballot_data b ON v.ballot_id = b.ballot_id;
ISMS コンプライアンス対応
ISO 27001:2022 管理策
A.5.10 - 情報の許容される利用
- OSINT の収集は公益目的に限定
- データの利用はスウェーデンの情報公開原則に準拠
- 個人データの処理は公務上の職務に限定
A.5.33 - 記録の保護
- 収集したすべてのデータについてソースを明記
- データ収集活動の監査証跡を保持
- 保存期間は法的要件に準拠
A.8.8 - 技術的脆弱性の管理
- API エンドポイントの可用性とセキュリティを監視
- サービスの中断を防ぐためのレート制限
- API アクセス用認証情報の安全な管理
NIST CSF 2.0 の機能
識別(ID)
- ID.AM-5: 分類とビジネス価値に基づいてリソースに優先順位を設定
- 4つの OSINT ソースを信頼性と完全性に基づいて分類
- データ品質指標を継続的に追跡
防御(PR)
- PR.DS-5: データ漏えいに対する保護を実装
- API キーをセキュアな保管庫(AWS Secrets Manager)に保存
- コードリポジトリに機密認証情報を保存しない
検知(DE)
- DE.CM-1: 潜在的なサイバーセキュリティイベントを検知するためにネットワークを監視
- 5分ごとに API のヘルスチェックを実施
- 通常と異なるデータパターンを検知
CIS Controls v8.1
CIS Control 3: データ保護
- 3.3: データアクセス制御リストを構成
- OSINT データを機密性に基づいて分類
- ロールベースの権限に基づいてアクセスを制御
CIS Control 12: ネットワークインフラストラクチャ管理
- 12.4: 許可されていないネットワークプロトコルによる通信を拒否
- すべての API 通信で HTTPS のみを使用
- Riksdagen API に証明書のピン留めを適用
Hack23 ISMS ポリシーの参照先
データ分類ポリシー
- リンク: https://github.com/Hack23/ISMS-PUBLIC/blob/main/Data_Classification_Policy.md
- 適用: OSINT データを PUBLIC(集計済み)または INTERNAL(詳細な分析)に分類
プライバシーポリシー
- リンク: https://github.com/Hack23/ISMS-PUBLIC/blob/main/Privacy_Policy.md
- 適用: GDPR 第6条(1)(e)(公益)に基づく個人データの処理
セキュア開発ポリシー
- リンク: https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md
- 適用: 安全な API 統合パターン、認証情報の管理
サードパーティ管理
- リンク: https://github.com/Hack23/ISMS-PUBLIC/blob/main/Third_Party_Management.md
- 適用: API 依存関係(Riksdagen、Election Authority)のベンダー評価
参考資料
公式ドキュメント:
- Riksdagen API ドキュメント:https://data.riksdagen.se/dokumentation/
- Valmyndigheten オープンデータ:https://www.val.se/serviceapi/
- World Bank API:https://datahelpdesk.worldbank.org/knowledgebase/topics/125589
- スウェーデンの情報公開原則:https://www.government.se/how-sweden-is-governed/public-access-to-information-and-secrecy/
CIA プラットフォームのドキュメント:
- インテリジェンスデータフロー:INTELLIGENCE_DATA_FLOW.md
- データ分析フレームワーク:DATA_ANALYSIS_INTOP_OSINT.md
- データベースビューカタログ:DATABASE_VIEW_INTELLIGENCE_CATALOG.md
- リスクルール:RISK_RULES_INTOP_OSINT.md
学術資料:
- NATO OSINT リーダー:インテリジェンス収集の分類体系
- 情報源の信頼性評価のためのアドミラルティ・コード
- GDPR 第6条1項(e):公共の利益に関する業務に必要な処理
標準規格:
- ISO 27001:2022:情報セキュリティマネジメント
- NIST Special Publication 800-53:セキュリティおよびプライバシー管理策
- CIS Controls v8.1:重要なセキュリティ管理策
🔗 エージェント型ワークフローおよび分析成果物との統合
このスキルは、.github/workflows/news-*.md にある11個のエージェント型ニュースワークフローで使用されます。正式な仕様は .github/prompts/README.md に記載されており、このスキルはその仕様を補完する専門知識を提供します。
- 分析成果物 →
ai-driven-analysis-guide.mdおよびanalysis/templates/内のすべてのテンプレート。 - 記事作成前に必須:
analysis/daily/$ARTICLE_DATE/$SUBFOLDER/にある9個のコア成果物(Tier-C の場合は14個)。05-analysis-gate.mdが唯一のブロッキングゲートです。 - gh-aw v0.69.3 ドキュメント:要約版 · 完全版 · ブログシリーズ。
🌐 IMF を経済情報の一次情報源として使用(OSINT 情報源評価の更新)
適用日: 2026-04-24
経済情報源に対するアドミラルティ・コードの評価
| 情報源 | 信頼性(A–E) | 信憑性(1–6) | 用途 |
|---|---|---|---|
| IMF WEO / Fiscal Monitor | A(一貫して信頼できる) | 1(他の情報源で確認済み) | 一次情報源 — マクロ、財政、金融、対外、予測 |
| IMF IFS / BOP / DOTS / GFS_COFOG / PCPS / ER / MFS | A | 2(おそらく真実) | 一次情報源 — 高頻度の経済指標 |
| SCB(Statistics Sweden) | A | 1 | 一次情報源 — スウェーデン固有の基準データ |
| Riksbank | A | 1 | 金融政策を補足する情報源 |
| World Bank WGI(ガバナンスのみ) | A | 1 | ガバナンスの一次情報源(CC.EST、RL.EST、VA.EST、GE.EST、RQ.EST、PV.EST) |
| World Bank WDI / WGI(経済以外のコンテキスト) | A | 1 | ガバナンス(*.EST)、環境(EN.*、EG.*、AG.LND.FRST.ZS)、社会・教育の残余項目(SP.*、SH.*、SE.*)、防衛の過去データ(MS.MIL.*)、犯罪(VC.IHR.PSRC.P5)の一次情報源 |
正規の OSINT ルール: IMF は経済情報(マクロ、財政、金融、対外、貿易、商品、外国為替、金利)について A1/A2 と評価し、すべての経済関連の主張の情報源とします。World Bank は、analysis/worldbank/indicators-inventory.json に収録されたガバナンス、環境、社会・教育、防衛の過去データ、犯罪・司法のコンテキストについて A1 と評価します。.github/aw/ECONOMIC_DATA_CONTRACT.md v3.0 と analysis/imf/ を参照してください。